From 70f0bd795332ef249676af4fd7c4021f8a9d3ec6 Mon Sep 17 00:00:00 2001 From: liupengyuan Date: Sun, 1 Oct 2017 08:40:32 +0800 Subject: [PATCH 01/44] =?UTF-8?q?Update=20=E7=88=AC=E8=99=AB=E5=85=A5?= =?UTF-8?q?=E9=97=A8.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "chapter4/\347\210\254\350\231\253\345\205\245\351\227\250.md" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/chapter4/\347\210\254\350\231\253\345\205\245\351\227\250.md" "b/chapter4/\347\210\254\350\231\253\345\205\245\351\227\250.md" index 342218015..ee0100508 100644 --- "a/chapter4/\347\210\254\350\231\253\345\205\245\351\227\250.md" +++ "b/chapter4/\347\210\254\350\231\253\345\205\245\351\227\250.md" @@ -37,7 +37,7 @@ with open('0.md', 'w') as f: 首先我们打开网易首页,在页面内copy一个新闻标题到剪贴板,然后用鼠标右键点击页面,并选择`查看源代码`(如用chrome浏览器可选择`检查`,进入开发者模式)。,会看到一片很乱的代码(其实就是html标记的文本),如果有一些html基础(推荐教程:http://www.w3school.com.cn/html/index.asp), 看起来就不会那么乱了。 -可以对示例代码D-1稍加修改,就能够抓取到这个页面的源代码,但我们需要对这个网页源代码进行解析,定位到我们希望的内容,获取我们希望得到的数据。这里将使用优秀的第三方网页解析包Beautiful Soap (ver4),该包已经随Anaconda安装,名称为bs4,并辅以对抓取页面的仔细分析。 +可以对示例代码D-1稍加修改,就能够抓取到这个页面(代码),但我们需要对这个网页源代码进行解析,定位到我们希望的内容,获取我们希望得到的数据。这里将使用优秀的第三方网页解析包Beautiful Soap (ver4),该包已经随Anaconda安装,名称为bs4,并辅以对抓取页面的仔细分析。 在刚打开的源代码页按`Ctrl+F`查找刚才copy在剪贴板上的新闻标题,找到这个新闻标题的位置。这行大致是这样:`
  • yyyyyyyyy
  • `, 其中`xxxxx`及`yyyyyyy`随新闻标题不同而不同。其中,`yyyyyyyy`是新闻标题,`http://news.163.com/xxxxxx.html`是新闻标题对应的网页链接,访问该网页链接,就能进入该新闻的内容页面,因此这两项是我们感兴趣并希望抓取的内容。 From de891462a3a17b2eec5cccbabbbd6834a6595049 Mon Sep 17 00:00:00 2001 From: liupengyuan Date: Sun, 1 Oct 2017 08:44:07 +0800 Subject: [PATCH 02/44] =?UTF-8?q?Update=20=E7=88=AC=E8=99=AB=E5=85=A5?= =?UTF-8?q?=E9=97=A8.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "chapter4/\347\210\254\350\231\253\345\205\245\351\227\250.md" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/chapter4/\347\210\254\350\231\253\345\205\245\351\227\250.md" "b/chapter4/\347\210\254\350\231\253\345\205\245\351\227\250.md" index ee0100508..3aa2e42ad 100644 --- "a/chapter4/\347\210\254\350\231\253\345\205\245\351\227\250.md" +++ "b/chapter4/\347\210\254\350\231\253\345\205\245\351\227\250.md" @@ -62,7 +62,7 @@ f.close() ``` 示例代码D-2中: - `from bs4 import BeautifulSoup`,从bs4包中导入BeautifulSoup模块 -- `soap = BeautifulSoup(r.text, 'html.parser')`,对网页文本,利用python内置的`html.parser`解析器,建立一个`BeautifulSoup`对象`soap`。 +- `soap = BeautifulSoup(r.text, 'html.parser')`,对网页文本,利用python内置的`html.parser`解析器,将`r.text`初始化为`BeautifulSoup`对象`soap`。 - `soup.find_all('li')`,调用`BeautifulSoup`对象`soap`的`find_all()`方法,找到标签`li`之间的所有内容,并返回一个结果集合(`ResultSet`),集合中每一个元素为一个`Tag`对象,与html中对tag定义相同,此处即利用`
  • `及`
  • `进行标记的所有对象。 - 对每一个Tag对象model,取出其内容(contents属性,会返回一个list,内容是两个tag之间的所有内容),并转换为字符串写入文件。 From bca921ef0d90fcc355ae0a62013837cd5355fe9e Mon Sep 17 00:00:00 2001 From: liupengyuan Date: Sun, 1 Oct 2017 11:30:15 +0800 Subject: [PATCH 03/44] =?UTF-8?q?Update=20=E7=88=AC=E8=99=AB=E5=85=A5?= =?UTF-8?q?=E9=97=A8.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...54\350\231\253\345\205\245\351\227\250.md" | 49 ++++++++++++++++++- 1 file changed, 48 insertions(+), 1 deletion(-) diff --git "a/chapter4/\347\210\254\350\231\253\345\205\245\351\227\250.md" "b/chapter4/\347\210\254\350\231\253\345\205\245\351\227\250.md" index 3aa2e42ad..2298fa7a1 100644 --- "a/chapter4/\347\210\254\350\231\253\345\205\245\351\227\250.md" +++ "b/chapter4/\347\210\254\350\231\253\345\205\245\351\227\250.md" @@ -15,6 +15,7 @@ 输入以下代码,并观察执行结果。 ```python +# coding: utf-8 # 示例代码 D-1 import requests @@ -46,6 +47,7 @@ with open('0.md', 'w') as f: 输入以下代码,并观察执行结果。 ```python +# coding: utf-8 # 示例代码 D-2 import requests @@ -71,9 +73,10 @@ f.close() 由于我们是找到了`
  • `及`
  • `进行标记的所有对象,而经过观察可以发现,这样的对象非常多,并非只有新闻标题与链接符合这一模式。我们只能更细致地分析网页源代码。 我们重新在网页源文件中查找新闻标题,进行观察,可以发现,新闻标题及链接均在`
      `及`
    `之间(指向一种名称为`cm_ul_round`的样式),且源文件中,其他非新闻标题的内容,均不在这种规定了`class`的`
      `标签之间,OK,找到关键标签了。 -输入以下代码,并观察执行结果。 +输入以下代码,并观察执行结果(查看所保存文件内容)。 ```python +# coding: utf-8 # 示例代码 D-3 import requests @@ -97,6 +100,50 @@ f.close() - `text.get('href')`,利用tag对象的get()方法得到text对象的链接。 - `text.string`,利用tag对象的string属性,得到text对象的文本。 +我们得到了首页上每个新闻标题及链接URL,我们下一步就是要利用这些URL来抓取新闻页面,并从中提取出正文。整个过程与前面示例代码D-3处理的过程基本类似,关键在于,找到正文在新闻网页源代码中所处的标签。 + +输入以下代码,并观察执行结果(查看所保存文件内容)。 +```python +# coding: utf-8 +# 示例代码 D-4 + +import requests +from bs4 import BeautifulSoup + +# 第一部分,得到首页面新闻URL及标题,并存入dict +r = requests.get('http://www.163.com') +soup = BeautifulSoup(r.text, 'html.parser') +url_titles = {} + +for model in soup.find_all(attrs={"class":"cm_ul_round"}): + model = model.find_all('a') + for text in model: + try: + url_titles[text.get('href')]=text.string + except KeyError: + pass + +# 第二部分,对URL及标题的dict,抓取每个新闻页面,提取正文并保存 +f = open('news_163.txt', 'w', encoding = 'utf-8') + +for url, title in url_titles.items(): + try: + r = requests.get(url) + except: + pass + soup = BeautifulSoup(r.text, 'html.parser') + + f.write('title:{}\n'.format(title)) + for model in soup.find_all(attrs={"class":"post_text"}): + model = model.find_all('p') + for text in model: + if text.string: + f.write(text.string) + f.write('\n') + +f.close() +``` + 4. 正则表达式 5. 用beautifulsoap解析数据 6. scrapy爬虫框架 From e0ef997df18d93561e1935dbd2a5f94f69bc778c Mon Sep 17 00:00:00 2001 From: liupengyuan Date: Sun, 1 Oct 2017 17:22:41 +0800 Subject: [PATCH 04/44] =?UTF-8?q?Update=20=E7=88=AC=E8=99=AB=E5=85=A5?= =?UTF-8?q?=E9=97=A8.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\254\350\231\253\345\205\245\351\227\250.md" | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git "a/chapter4/\347\210\254\350\231\253\345\205\245\351\227\250.md" "b/chapter4/\347\210\254\350\231\253\345\205\245\351\227\250.md" index 2298fa7a1..57ff24bc9 100644 --- "a/chapter4/\347\210\254\350\231\253\345\205\245\351\227\250.md" +++ "b/chapter4/\347\210\254\350\231\253\345\205\245\351\227\250.md" @@ -34,7 +34,7 @@ with open('0.md', 'w') as f: 3. 爬虫进阶 -- 任务:抓取网易首页(www.163.com) 上的全部新闻,并以将所有新闻标题及新闻内容存入到一个文本文件中。 +- 任务1:抓取网易首页(www.163.com) 上的全部新闻,并以将所有新闻标题及新闻内容存入到一个文本文件中。 首先我们打开网易首页,在页面内copy一个新闻标题到剪贴板,然后用鼠标右键点击页面,并选择`查看源代码`(如用chrome浏览器可选择`检查`,进入开发者模式)。,会看到一片很乱的代码(其实就是html标记的文本),如果有一些html基础(推荐教程:http://www.w3school.com.cn/html/index.asp), 看起来就不会那么乱了。 @@ -123,7 +123,7 @@ for model in soup.find_all(attrs={"class":"cm_ul_round"}): except KeyError: pass -# 第二部分,对URL及标题的dict,抓取每个新闻页面,提取正文并保存 +# 第二部分,对URL及标题的dict遍历,抓取每个新闻页面,提取正文并保存 f = open('news_163.txt', 'w', encoding = 'utf-8') for url, title in url_titles.items(): @@ -144,6 +144,15 @@ for url, title in url_titles.items(): f.close() ``` +示例代码D-4中: +- `url_titles[text.get('href')]=text.string`,这里以URL为键,以新闻标题为值,存入字典 +- `soup.find_all(attrs={"class":"post_text"})`,通过观察源代码(或利用谷歌浏览器的检查),发现正文在`"class="cm_ul_round"`属性的标签之间,因此提取其间所有内容 +- `model.find_all('p')`,提取`model`中所有标签`

      `之间的内容 + +经过以上几个步骤,我们成功地将`www.163.com`首页所有新闻标题及正文抓取并存储到文件中了。当然,由于我们并没有特别仔细分析页面,最终抓取的文件中,仍然含有一部分不太正确的地方,留给读者自行解决。 + +- 任务2:抓取有道词典查询词的双语例句 + 4. 正则表达式 -5. 用beautifulsoap解析数据 -6. scrapy爬虫框架 +5. scrapy爬虫框架 +6. 扩展 From 5b15bfccdc245a0406e65b122f4ccb2fa994d495 Mon Sep 17 00:00:00 2001 From: liupengyuan Date: Sun, 1 Oct 2017 22:06:00 +0800 Subject: [PATCH 05/44] =?UTF-8?q?Update=20=E7=88=AC=E8=99=AB=E5=85=A5?= =?UTF-8?q?=E9=97=A8.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...54\350\231\253\345\205\245\351\227\250.md" | 45 ++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git "a/chapter4/\347\210\254\350\231\253\345\205\245\351\227\250.md" "b/chapter4/\347\210\254\350\231\253\345\205\245\351\227\250.md" index 57ff24bc9..eaec81448 100644 --- "a/chapter4/\347\210\254\350\231\253\345\205\245\351\227\250.md" +++ "b/chapter4/\347\210\254\350\231\253\345\205\245\351\227\250.md" @@ -32,7 +32,7 @@ with open('0.md', 'w') as f: 打开`https://github.com/liupengyuan/python_tutorial/blob/master/chapter1/0.md`网页,在网页正文区域点击右键,选择查看源代码,会发现代码示例D-1确实已经获取/抓取这个网页的文本文件。至此,一个最简爬虫已经完成。 -3. 爬虫进阶 +3. 静态定向爬虫基础 - 任务1:抓取网易首页(www.163.com) 上的全部新闻,并以将所有新闻标题及新闻内容存入到一个文本文件中。 @@ -152,6 +152,49 @@ f.close() 经过以上几个步骤,我们成功地将`www.163.com`首页所有新闻标题及正文抓取并存储到文件中了。当然,由于我们并没有特别仔细分析页面,最终抓取的文件中,仍然含有一部分不太正确的地方,留给读者自行解决。 - 任务2:抓取有道词典查询词的双语例句 +通过在有道词典(dict.youdao.com)进行单词查询,发现对任意单词`xxxxx`,给出该单词翻译信息的页面`URL`为:`http://dict.youdao.com/w/xxxxx` + +由于我要抓取词`xxxxx`中查询结果的所有双语例句,则需要在页面下部的显示最后一个例句后,点击`更多双语例句`,这会更新当前页面的`URL`为:`http://dict.youdao.com/example/blng/eng/xxxxx/#keyfrom=dict.main.moreblng`,所有双语例句均在其中,因此,我们只对这个`URL`进行爬取分析即可。 + +输入以下代码,并观察执行结果(查看所保存文件内容)。 + +```python +# coding: utf-8 +# 示例代码 D-5 +import requests +from bs4 import BeautifulSoup + +def get_word_sents(word): + ''' +    根据给定的词汇返回该词汇(word)在有道词典查询页面中的所有双语例句 +    参数:word,类型:str +    返回:含有双语例句的list +    ''' + url = 'http://dict.youdao.com/example/blng/eng/{}/#keyfrom=dict.main.moreblng'.format(word) + r = requests.get(url) + soup = BeautifulSoup(r.text, 'html.parser') + + sents = [] + for model in soup.find_all(attrs={"class":"ol"}): + models = model.find_all('p') + for model in models: + try: + model['class'] + except KeyError: + sents.append(model.text.replace('\n','')) + return sents + +if __name__ == '__main__': + word = '葡萄' + sents = get_word_sents(word) + filename = '1.txt' + with open(filename, 'w', encoding = 'utf-8') as f: + for sent in sents: + f.write(sent+'\n') +``` +示例代码 D-5 中: +- + 4. 正则表达式 5. scrapy爬虫框架 From 82393e144b8bde9c434d2f87e2dc655e644a28ad Mon Sep 17 00:00:00 2001 From: liupengyuan Date: Sun, 1 Oct 2017 22:06:51 +0800 Subject: [PATCH 06/44] =?UTF-8?q?Update=20=E7=88=AC=E8=99=AB=E5=85=A5?= =?UTF-8?q?=E9=97=A8.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "chapter4/\347\210\254\350\231\253\345\205\245\351\227\250.md" | 1 + 1 file changed, 1 insertion(+) diff --git "a/chapter4/\347\210\254\350\231\253\345\205\245\351\227\250.md" "b/chapter4/\347\210\254\350\231\253\345\205\245\351\227\250.md" index eaec81448..150116827 100644 --- "a/chapter4/\347\210\254\350\231\253\345\205\245\351\227\250.md" +++ "b/chapter4/\347\210\254\350\231\253\345\205\245\351\227\250.md" @@ -152,6 +152,7 @@ f.close() 经过以上几个步骤,我们成功地将`www.163.com`首页所有新闻标题及正文抓取并存储到文件中了。当然,由于我们并没有特别仔细分析页面,最终抓取的文件中,仍然含有一部分不太正确的地方,留给读者自行解决。 - 任务2:抓取有道词典查询词的双语例句 + 通过在有道词典(dict.youdao.com)进行单词查询,发现对任意单词`xxxxx`,给出该单词翻译信息的页面`URL`为:`http://dict.youdao.com/w/xxxxx` 由于我要抓取词`xxxxx`中查询结果的所有双语例句,则需要在页面下部的显示最后一个例句后,点击`更多双语例句`,这会更新当前页面的`URL`为:`http://dict.youdao.com/example/blng/eng/xxxxx/#keyfrom=dict.main.moreblng`,所有双语例句均在其中,因此,我们只对这个`URL`进行爬取分析即可。 From 6f312fc1ff55f2eeda2c09f07901be47da9f9d4e Mon Sep 17 00:00:00 2001 From: liupengyuan Date: Sun, 1 Oct 2017 22:14:41 +0800 Subject: [PATCH 07/44] =?UTF-8?q?Update=20=E7=88=AC=E8=99=AB=E5=85=A5?= =?UTF-8?q?=E9=97=A8.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../\347\210\254\350\231\253\345\205\245\351\227\250.md" | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git "a/chapter4/\347\210\254\350\231\253\345\205\245\351\227\250.md" "b/chapter4/\347\210\254\350\231\253\345\205\245\351\227\250.md" index 150116827..4483dcc62 100644 --- "a/chapter4/\347\210\254\350\231\253\345\205\245\351\227\250.md" +++ "b/chapter4/\347\210\254\350\231\253\345\205\245\351\227\250.md" @@ -182,16 +182,16 @@ def get_word_sents(word): try: model['class'] except KeyError: - sents.append(model.text.replace('\n','')) +                sents.append(model.text.replace('\n','')+'\n) return sents if __name__ == '__main__': word = '葡萄' sents = get_word_sents(word) + filename = '1.txt' with open(filename, 'w', encoding = 'utf-8') as f: - for sent in sents: - f.write(sent+'\n') + f.writelines(sents) ``` 示例代码 D-5 中: - From 1f35bdce2d4887758f3a687b3bfe37770158a43c Mon Sep 17 00:00:00 2001 From: liupengyuan Date: Sun, 1 Oct 2017 23:25:21 +0800 Subject: [PATCH 08/44] =?UTF-8?q?Update=20=E7=88=AC=E8=99=AB=E5=85=A5?= =?UTF-8?q?=E9=97=A8.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../\347\210\254\350\231\253\345\205\245\351\227\250.md" | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git "a/chapter4/\347\210\254\350\231\253\345\205\245\351\227\250.md" "b/chapter4/\347\210\254\350\231\253\345\205\245\351\227\250.md" index 4483dcc62..5bedcae0f 100644 --- "a/chapter4/\347\210\254\350\231\253\345\205\245\351\227\250.md" +++ "b/chapter4/\347\210\254\350\231\253\345\205\245\351\227\250.md" @@ -194,8 +194,12 @@ if __name__ == '__main__': f.writelines(sents) ``` 示例代码 D-5 中: -- +- url = `'http://dict.youdao.com/example/blng/eng/{}/#keyfrom=dict.main.moreblng'.format(word)`,构造查询URL +- `model['class']`,取`model`的`class`键的值,此处是为了过滤掉非双语例句的文本,形如`class="example-via"`等包含的文本将被过滤掉。 +至此,给定任意词汇,已经可以抓取到其双语例句平行文本,并存到文件中。 + +对任意静态网页,均可以利用以上类似的方法,抓取感兴趣的内容。对更复杂的网页,需要对BeautifulSoap进一步进行了解,可参考其官方文档:`https://www.crummy.com/software/BeautifulSoup/bs4/doc/`,而有些网页很不规律,也不太容易用beautifulSoap对一些内容进行提取,这时,可以利用正则表达式进行模式匹配进行提取。 4. 正则表达式 5. scrapy爬虫框架 From 0b150483a9aa094f66c11624f6273b94f3eea492 Mon Sep 17 00:00:00 2001 From: liupengyuan Date: Tue, 3 Oct 2017 18:43:12 +0800 Subject: [PATCH 09/44] Create novel_site_list --- chapter4/novel_site_list | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 chapter4/novel_site_list diff --git a/chapter4/novel_site_list b/chapter4/novel_site_list new file mode 100644 index 000000000..6e92703d2 --- /dev/null +++ b/chapter4/novel_site_list @@ -0,0 +1,5 @@ +- `http://www.bookdown.com.cn/mingzhu/` +- `http://www.sogoutxt.com/wenxue/` +- `http://www.xbwx.com/a/wxlw/` +- `http://www.jjxsw.cc/category/wenxuejingdian.html` +- 待补充 From 4710b458f71446d4ac590d3b1fa9418976dd869c Mon Sep 17 00:00:00 2001 From: liupengyuan Date: Tue, 3 Oct 2017 18:43:34 +0800 Subject: [PATCH 10/44] Rename novel_site_list to novel_site_list.md --- chapter4/{novel_site_list => novel_site_list.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename chapter4/{novel_site_list => novel_site_list.md} (100%) diff --git a/chapter4/novel_site_list b/chapter4/novel_site_list.md similarity index 100% rename from chapter4/novel_site_list rename to chapter4/novel_site_list.md From f94cd58fb1cfbf491eb2761d785b4eb7ccc2659e Mon Sep 17 00:00:00 2001 From: liupengyuan Date: Tue, 3 Oct 2017 18:48:13 +0800 Subject: [PATCH 11/44] Update novel_site_list.md --- chapter4/novel_site_list.md | 1 + 1 file changed, 1 insertion(+) diff --git a/chapter4/novel_site_list.md b/chapter4/novel_site_list.md index 6e92703d2..da2db893d 100644 --- a/chapter4/novel_site_list.md +++ b/chapter4/novel_site_list.md @@ -1,3 +1,4 @@ +- 百度网盘、微盘等各类资源 - `http://www.bookdown.com.cn/mingzhu/` - `http://www.sogoutxt.com/wenxue/` - `http://www.xbwx.com/a/wxlw/` From 97bbbc52feb80ab6f147285ab4deccd9a43a0bbb Mon Sep 17 00:00:00 2001 From: liupengyuan Date: Wed, 4 Oct 2017 10:47:48 +0800 Subject: [PATCH 12/44] =?UTF-8?q?Update=20=E7=88=AC=E8=99=AB=E5=85=A5?= =?UTF-8?q?=E9=97=A8.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "chapter4/\347\210\254\350\231\253\345\205\245\351\227\250.md" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/chapter4/\347\210\254\350\231\253\345\205\245\351\227\250.md" "b/chapter4/\347\210\254\350\231\253\345\205\245\351\227\250.md" index 5bedcae0f..2cd79f31d 100644 --- "a/chapter4/\347\210\254\350\231\253\345\205\245\351\227\250.md" +++ "b/chapter4/\347\210\254\350\231\253\345\205\245\351\227\250.md" @@ -199,7 +199,7 @@ if __name__ == '__main__': 至此,给定任意词汇,已经可以抓取到其双语例句平行文本,并存到文件中。 -对任意静态网页,均可以利用以上类似的方法,抓取感兴趣的内容。对更复杂的网页,需要对BeautifulSoap进一步进行了解,可参考其官方文档:`https://www.crummy.com/software/BeautifulSoup/bs4/doc/`,而有些网页很不规律,也不太容易用beautifulSoap对一些内容进行提取,这时,可以利用正则表达式进行模式匹配进行提取。 +对任意静态网页,均可以利用以上类似的方法,抓取感兴趣的内容。对更复杂的网页,需要对BeautifulSoap进一步进行了解,可参考其官方文档:`https://www.crummy.com/software/BeautifulSoup/bs4/doc/`,而有些网页很不规律特别是结构有问题的网页,也不太容易用beautifulSoap进行提取,这时,可以利用正则表达式,一般解析网页最经常的就是用BeautifulSoap和正则表达式联合解析。 4. 正则表达式 5. scrapy爬虫框架 From 300594c608461e6983e39a8347f2070509714167 Mon Sep 17 00:00:00 2001 From: liupengyuan Date: Wed, 4 Oct 2017 10:57:08 +0800 Subject: [PATCH 13/44] =?UTF-8?q?Update=20=E7=88=AC=E8=99=AB=E5=85=A5?= =?UTF-8?q?=E9=97=A8.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "chapter4/\347\210\254\350\231\253\345\205\245\351\227\250.md" | 2 ++ 1 file changed, 2 insertions(+) diff --git "a/chapter4/\347\210\254\350\231\253\345\205\245\351\227\250.md" "b/chapter4/\347\210\254\350\231\253\345\205\245\351\227\250.md" index 2cd79f31d..6e3733863 100644 --- "a/chapter4/\347\210\254\350\231\253\345\205\245\351\227\250.md" +++ "b/chapter4/\347\210\254\350\231\253\345\205\245\351\227\250.md" @@ -34,6 +34,8 @@ with open('0.md', 'w') as f: 3. 静态定向爬虫基础 +本小节中的爬虫是开始就指定了要抓取网页的地址(定向),要抓取的内容直接存在在网页源代码中(静态),因此称为静态定向爬虫。 + - 任务1:抓取网易首页(www.163.com) 上的全部新闻,并以将所有新闻标题及新闻内容存入到一个文本文件中。 首先我们打开网易首页,在页面内copy一个新闻标题到剪贴板,然后用鼠标右键点击页面,并选择`查看源代码`(如用chrome浏览器可选择`检查`,进入开发者模式)。,会看到一片很乱的代码(其实就是html标记的文本),如果有一些html基础(推荐教程:http://www.w3school.com.cn/html/index.asp), 看起来就不会那么乱了。 From 0c41b2f4f440effc570a6d519d13b7885298c94c Mon Sep 17 00:00:00 2001 From: liupengyuan Date: Wed, 4 Oct 2017 17:45:38 +0800 Subject: [PATCH 14/44] =?UTF-8?q?Update=20=E7=88=AC=E8=99=AB=E5=85=A5?= =?UTF-8?q?=E9=97=A8.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...54\350\231\253\345\205\245\351\227\250.md" | 26 +++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git "a/chapter4/\347\210\254\350\231\253\345\205\245\351\227\250.md" "b/chapter4/\347\210\254\350\231\253\345\205\245\351\227\250.md" index 6e3733863..55ed8bf7e 100644 --- "a/chapter4/\347\210\254\350\231\253\345\205\245\351\227\250.md" +++ "b/chapter4/\347\210\254\350\231\253\345\205\245\351\227\250.md" @@ -203,6 +203,28 @@ if __name__ == '__main__': 对任意静态网页,均可以利用以上类似的方法,抓取感兴趣的内容。对更复杂的网页,需要对BeautifulSoap进一步进行了解,可参考其官方文档:`https://www.crummy.com/software/BeautifulSoup/bs4/doc/`,而有些网页很不规律特别是结构有问题的网页,也不太容易用beautifulSoap进行提取,这时,可以利用正则表达式,一般解析网页最经常的就是用BeautifulSoap和正则表达式联合解析。 -4. 正则表达式 +4. 用正则表达式处理字符串 + +正则表达式,这个术语不太容易望文生义(没有去考证是如何被翻译为正则表达式的),其实其英文为Regular Expression,直接翻译就是:有规律的表达式。这个表达式其实就是一个字符序列,反映某种字符规律,用(字符串模式匹配)来处理字符串。很多高级语言均支持利用正则表达式对字符串进行处理的操作。 + +4.1 示例 + +我们先看一个简单的正则表达式:E,所反映的字符规律是:以标签`

      `及`

      `包含的字符串(包含标签)。同时,为了便于观察是否反映这一规律,我们将以一个字符串作为输入,其中会有包含这种字符规律的部分,并利用正则表达式E,将符合这种规律的字符串进行提取。 + +```python +#coding: utf-8 +#示例程序 D-6 +import re + +line ='asdfjd

      adfasdQ sdkf74j

      okik' +print(re.search(r'

      .+

      ', line)) +``` +示例程序D-6中: +- `import re`,引入re模块,即引入正则表达式模块。 +- `re.search(r'

      .+

      ', line)`,调用re模块的search()函数,其中有两个参数,第一个参数是一个字符串r'

      .+

      ',反映字符模式,也就是正则表达式;第二个参数是目标字符串,即变量line。整个功能是要从目标字符串line中搜索符合模式r'

      .+

      '的字符串。 + +从示例程序D-6中,我们发现程序会将以标签`

      `及`

      `包含的字符串(包含标签)全部提取出来,因此可以合理猜测上面的正则表达式中`

      `及`

      `表示的仍然是自己,而`.+`可能表示多个字符(获取是任意字符,不限定个数)。 + +示例程序D-6也是 + 5. scrapy爬虫框架 -6. 扩展 From db46e0f05ab0639a6e52297b8424a2951e0f99de Mon Sep 17 00:00:00 2001 From: liupengyuan Date: Wed, 4 Oct 2017 17:47:05 +0800 Subject: [PATCH 15/44] =?UTF-8?q?Update=20=E7=88=AC=E8=99=AB=E5=85=A5?= =?UTF-8?q?=E9=97=A8.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "chapter4/\347\210\254\350\231\253\345\205\245\351\227\250.md" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/chapter4/\347\210\254\350\231\253\345\205\245\351\227\250.md" "b/chapter4/\347\210\254\350\231\253\345\205\245\351\227\250.md" index 55ed8bf7e..0494ec9b7 100644 --- "a/chapter4/\347\210\254\350\231\253\345\205\245\351\227\250.md" +++ "b/chapter4/\347\210\254\350\231\253\345\205\245\351\227\250.md" @@ -221,7 +221,7 @@ print(re.search(r'

      .+

      ', line)) ``` 示例程序D-6中: - `import re`,引入re模块,即引入正则表达式模块。 -- `re.search(r'

      .+

      ', line)`,调用re模块的search()函数,其中有两个参数,第一个参数是一个字符串r'

      .+

      ',反映字符模式,也就是正则表达式;第二个参数是目标字符串,即变量line。整个功能是要从目标字符串line中搜索符合模式r'

      .+

      '的字符串。 +- `re.search(r'

      .+

      ', line)`,调用re模块的search()函数,其中有两个参数,第一个参数是一个字符串`r'

      .+

      '`,反映字符模式,也就是正则表达式;第二个参数是目标字符串,即变量line。整个功能是要从目标字符串line中搜索符合模式`r'

      .+

      '`的字符串。 从示例程序D-6中,我们发现程序会将以标签`

      `及`

      `包含的字符串(包含标签)全部提取出来,因此可以合理猜测上面的正则表达式中`

      `及`

      `表示的仍然是自己,而`.+`可能表示多个字符(获取是任意字符,不限定个数)。 From 6d9860cafc64f8572ed1c942def960cb903e00e8 Mon Sep 17 00:00:00 2001 From: liupengyuan Date: Thu, 5 Oct 2017 13:35:56 +0800 Subject: [PATCH 16/44] =?UTF-8?q?Update=20=E7=88=AC=E8=99=AB=E5=85=A5?= =?UTF-8?q?=E9=97=A8.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "chapter4/\347\210\254\350\231\253\345\205\245\351\227\250.md" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/chapter4/\347\210\254\350\231\253\345\205\245\351\227\250.md" "b/chapter4/\347\210\254\350\231\253\345\205\245\351\227\250.md" index 0494ec9b7..cecfe2dc3 100644 --- "a/chapter4/\347\210\254\350\231\253\345\205\245\351\227\250.md" +++ "b/chapter4/\347\210\254\350\231\253\345\205\245\351\227\250.md" @@ -225,6 +225,6 @@ print(re.search(r'

      .+

      ', line)) 从示例程序D-6中,我们发现程序会将以标签`

      `及`

      `包含的字符串(包含标签)全部提取出来,因此可以合理猜测上面的正则表达式中`

      `及`

      `表示的仍然是自己,而`.+`可能表示多个字符(获取是任意字符,不限定个数)。 -示例程序D-6也是 +示例程序D-6也是利用正则来进行字符串处理的一般范式:1. 观察字符串;2. 设计正则表达式;3. 进行匹配提取。 5. scrapy爬虫框架 From c7253c17517fbe4bff8cab21a1a6188aa7a2c998 Mon Sep 17 00:00:00 2001 From: liupengyuan Date: Sat, 7 Oct 2017 09:50:30 +0800 Subject: [PATCH 17/44] Delete task4.html --- chapter2/task4.html | 12201 ------------------------------------------ 1 file changed, 12201 deletions(-) delete mode 100644 chapter2/task4.html diff --git a/chapter2/task4.html b/chapter2/task4.html deleted file mode 100644 index c53bdb275..000000000 --- a/chapter2/task4.html +++ /dev/null @@ -1,12201 +0,0 @@ - - - -task4 - - - - - - - - - - - - - - - - - - - -
      -
      - -
      -
      -
      -
      -
      -

      4.求$ \sum_{i=1}^mi + \sum_{i=1}^ni + \sum_{i=1}^ki$

      -

      4.1 任务简介与分析
      -当然,这个任务仍然是不允许采用等差数列求和的公式来计算。任务没有什么难度,就是多次求和的过程。

      -

      4.2 软件复用

      -
        -
      • 键入如下代码并观察执行结果。
      • -
      -
      #求sigma1~m + sigma1~n + sigma1~k
      -
      -n = int(input('请输入第1个整数,以回车结束。'))
      -i = 0
      -total_n = 0
      -while i < n:
      -    i = i + 1
      -    total_n = total_n + i
      -
      -m = int(input('请输入第2个整数,以回车结束。'))
      -i = 0
      -total_m = 0
      -while i < m:
      -    i = i + 1
      -    total_m = total_m + i
      -
      -k = int(input('请输入第3个整数,以回车结束。'))
      -i = 0
      -total_k = 0
      -while i < k:
      -    i = i + 1
      -    total_k = total_k + i
      -
      -print('最终的和是:', total_n + total_m + total_k)
      -
      -

      好,一次闯关成功,任务解决,so easy,赶紧进入下一个任务。但等等,先别急,逐行敲入代码或者是拷贝剪贴代码再修改的读者,是否觉得这样的工作是无聊的重复劳动?到本节为止,上段代码中间的6行,算上这三次,至少已经重复输入了四次,如果有其他任务或者实践需要类似的求和,则我们还将重复输入。
      -人们不喜欢一直简单重复,人们编程的初衷之一就是要利用计算机从简单重复中解救自己。如何能对类似的代码进行重复利用呢?既可以避免重复,又可以一次写好到处实用呢?这种不“重复制造轮子”的思想与方法称为软件复用

      -

      4.3 函数、参数与返回值

      -

      要是计算机看到compute_sum(1...end)compute_sum(1, end)或干脆就compute_sum(end)就能求得从1到n的和就好了。
      -compute_sum是说明要做什么,(end)是仿照python的print()及input()函数的形式,参数指明加到end为止。等等,这不就是函数吗?只不过这个函数是我们自己想的而已,如果可以,那上面的程序就可以简化成下面这样:

      -
      n = int(input('请输入第1个整数,以回车结束。'))
      -m = int(input('请输入第2个整数,以回车结束。'))
      -k = int(input('请输入第3个整数,以回车结束。'))
      -
      -print('最终的和是:', compute_sum(m) + compute_sum(n) + compute_sum(k))
      -
      -

      完美!看到这样的简化,不禁有些小激动了。这样非常清楚,非常符合逻辑。
      -computer_sum()虽然名称符合python命名规范与习惯,形式也与我们已经接触到的print()及input()函数相同,但这只是我们临时写的函数,函数是由我们自行定义的,一般称为自定义函数,不需要区分的时候,可简称函数。
      -到目前为止,python语言还不知道这个自定义函数是什么,因此无法解释执行它,那么,我们就教给python这个函数的定义,让python理解吧。但在真正尝试前,我们先从最简单的自定义函数开始。

      -
        -
      • 键入如下代码并观察执行结果。
      • -
      -
      # 第一个自定义函数
      -def fake_print(content):
      -    print(content)
      -
      -

      一片空白,这不是你大脑的状态,因为大脑的状态也许是一堆问号---没有出错,但居然也没有其他任何反应(我一定写了假代码,笑)。
      -由于没有报错,毫无疑问,本段代码符合python语法,其中def是定义函数使用的关键字,也就是英文define的缩写;fake_print是作者刚刚起的函数名;括号内的content是函数参数。
      -函数定义的基本结构是:

      -
      def 函数名(参数表):
      -    语句块
      -
      -
        -
      • 函数名(参数表),一般称为函数头
      • -
      • 函数定义内部的语句块又称为函数体
      • -
      • 参数表就是一系列参数,可以有0,1或多个参数,多个参数之间用,分隔。
      • -
      -

      函数定义好之后,只是能使python解释器知道有一个自定义函数,知道这个函数的名字,知道函数参数表,但是并不执行,也并不知道函数参数表内参数的具体值。 -因此,函数定义时的参数,一般称为形式参数,简称形参
      -python解释器知道很多已经定义好的函数,比如input(),比如print(),但是如果我们不在代码中写出来,不去调用使用,函数就不会被执行。
      -这样,前面执行第一个自定义函数的代码,就只是让python解释器知道有一个自定义函数,名字是fake_print,有一个参数content,这些都属于函数头信息。
      -对自定义函数来说,仅让python解释器知道这个函数头的信息还不够,还需要在函数体实现函数的功能。这个功能是为以后函数被使用被调用时准备的。

      -
        -
      • 键入如下代码并观察执行结果。
      • -
      -
      # 函数定义
      -def fake_print(content):
      -    print(content)
      -
      -# 主程序
      -fake_print('假装是print()函数。')
      -
      -

      本段代码执行的大体流程是:

      -
        -
      • 对第一行代码def fake_print(content):进行处理,发现这是函数定义,于是保存此处地址,保存函数信息:函数名是fake_print,一个函数形参是content
      • -
      • 跳过fake_print()的函数体定义,直接从函数体外的第一行开始执行;
      • -
      • 在执行到主程序[^1]第一行fake_print('假装是print()函数。')时,发现这里调用了fake_print()函数,有一个实参与函数定义的形参content相对应,其值为'假装是print()函数。',于是将'假装是print()函数。'赋值给content;
      • -
      • 保存调用函数的地址,然后根据fake_print()函数的地址,跳转到def fake_print(content):,准备运行函数体。此时,形参content已有实际值,已经可以作为有实际值的变量在函数体内使用了。执行函数时,其形参值是由实际参数在函数调用时由对应的实参传递过来的,一般把这个参数传递过程称为参数传递。注意参数传递时,实参会赋值给相对应的形参,最一般的就是位置对应,因此,不需要形参与对应实参的变量名相同;
      • -
      • 运行函数体,调用print()函数打印'假装是print()函数。'
      • -
      • 函数体执行完毕,程序返回到调用fake_print()函数地址的行末,继续执行;
      • -
      • 执行到程序尾,整个程序执行完毕。
      • -
      -

      由自定义函数的执行过程可知:如果自定义函数在当前文件中定义,则函数定义的代码必须写在函数调用之前。有些“神秘”函数比如print()及input(),则不受此限制。实际上print()及input()等函数由于太过常用,函数已经被预先定义及实现好,并内置在Python语言中,称为内置函数
      -作为示例,fake_print()函数只完成了一个简单的功能,即与只带一个参数的print()函数功能相同。
      -回到求和问题中来,现在可以定义我们梦想中的compute_sum()函数了。

      -
        -
      • 键入如下代码并观察执行结果。
      • -
      -
      #函数定义
      -def compute_sum(end):
      -    i = 0
      -    total_n = 0
      -    while i < end:
      -        i = i + 1
      -        total_n = total_n + i
      -
      -# 主程序
      -compute_sum(100)
      -
      -

      很不幸,一片空白给兴致勃勃的我们当头一棒。但我们已经进行了函数定义,已经进行了函数调用,已经没有任何python语法错误提示了啊?
      -别急,让我们一起简单的分析下程序执行过程:

      -
        -
      • 第一行,python解释器保存函数头信息,保存调用地址,跳转到函数体;
      • -
      • 执行compute_sum(100)调用函数,将100传递给n;
      • -
      • 进入compute_sum函数体,从i=0开始执行,执行完毕时,应该能够得到total_n的值为5050;
      • -
      • 函数体结束,程序跳转到函数调用处末尾,即compute_sum(100))后面;
      • -
      • 函数结束。
      • -
      -

      好吧,我们没有把compute_sum()函数中计算的结果打印出来,了解了。

      -
        -
      • 键入如下代码并观察执行结果。
      • -
      -
      # 函数定义
      -def compute_sum(end):
      -    i = 0
      -    total_n = 0
      -    while i < end:
      -        i = i + 1
      -        total_n = total_n + i
      -        print(total_n)
      -
      -# 主程序
      -compute_sum(100)
      -
      -

      很奇妙,打印出了一大波数字,最后一个确实是5050,我们犯了一个常犯错误(请自行思考,python中空格缩进太重要了)。

      -
        -
      • 键入如下代码并观察执行结果。
      • -
      -
      # 函数定义
      -def compute_sum(end):
      -    i = 0
      -    total_n = 0
      -    while i < end:
      -        i = i + 1
      -        total_n = total_n + i
      -    print(total_n)
      -
      -# 主程序       
      -compute_sum(100)
      -
      -

      必须承认这次得到了预期的计算结果,5050。
      -可以预想到,每次调用compute_sum()函数时,随着参数的不同,可以计算出任意从1累加到end的值。但是先等等,我们怎么来完成我们最初的任务呢?
      -compute_sum()函数虽然能计算任意从1累加到end的值,但却无法将这些值累加。其实在compute_sum()函数中打印total_n并无必要,中间结果无需打印。
      -那么,这样试试:

      -
        -
      • 键入如下代码并观察执行结果。
      • -
      -
      # 函数定义
      -def compute_sum(end):
      -    i = 0
      -    total_n = 0
      -    while i < end:
      -        i = i + 1
      -        total_n = total_n + i
      -
      -# 主程序
      -print(compute_sum(100))
      -
      -

      屏幕显示:NoneNone是python语言中的一个特殊的值,可简单解释为没有对象或值[^2]。
      -无需沮丧,我们接近成功了。这首先说明函数自身也是有值的,称为函数值,目前compute_sum()函数的值是None;其次说明我们的思路符合python语言设计的意图,函数可以有值,更进一步,函数值可以是任意对象/值。
      - 键入如下代码并观察执行结果。

      -
      # 函数定义
      -def compute_sum(end):
      -    i = 0
      -    total_n = 0
      -
      -    while i < end:
      -        i = i + 1
      -        total_n = total_n + i
      -
      -    return total_n
      -
      -主程序
      -print(compute_sum(100))
      -
      -

      终于得到了预期中的结果。
      -本段代码中的return是python的关键字。由returntotal_n赋值给函数compute_sum(),此时compute_sum()的函数值即为total_n当前的值。由于在得到函数的值以后,程序要返回到函数调用的位置,同时,函数的值也被顺利‘带回’,因此函数调用后得到的函数值,一般称为函数返回值
      -我们顺利的完成了真正意义上的第一个实用函数(前面那个fake_print原来真是假的,笑),但我们并没有特别激动。
      -一切本该如此,水到渠成,顺理成章。

      -

      4.4 拓展与总结 -(定义、以及图形等均可在这里)

      -
        -
      • return语句。
        -一个函数根据需要可以有0,1或多个return语句。
        -键入如下代码并观察执行结果。
      • -
      -
      def example_0(number):
      -    number += 10
      -
      -def example_1(number):
      -    number += 10
      -    return
      -
      -# 主程序
      -n=100
      -print('0:',example_0(n))
      -print('1:',example_0(n))
      -
      -

      没有return语句或者return语句后面没有参数,调用函数后函数的值都是None。因此,在程序不需要返回值的时候,可以不用return语句。
      -键入如下代码并观察执行结果。

      -
      def example_multi(number):
      -    return '多个返回值', number*10, number, number/10
      -
      -
      -# 主程序
      -n=100
      -print(example_0(100))
      -
      -

      可见可以利用return语句返回多个返回值[^3],且返回值的类型可以不同。
      -键入如下代码观察执行结果。

      -
      def zero_flag(number):
      -    if number < 0:
      -        return -1
      -    elif number == 0:
      -        return 0
      -    else:
      -        return 1
      -
      -# 主程序
      -print('First:', zero_flag(100))
      -print('Second:', zero_flag(0))
      -print('Third:', zero_flag(-100))
      -
      -

      通过以上代码我们可以了解,在函数中,运行到return语句时,该return语句除了提供函数返回值以外,同时还会使程序跳出函数体(不会执行return语句之后函数体内的语句),直接返回到函数调用处。因此,即使一个函数有多个return语句,每次调用时,最多仅会执行某一个return语句。

      -
        -
      • 函数调用与作用域初探
      • -
      -

      我们已经实现了自定义函数,并在主程序中调用了自定义函数。在自定义函数中,多次对内置函数进行了调用。
      -一个自定义函数也可以调用另一个自定义函数。例如:

      -
      # 自定义函数调用示例
      -
      -def my_abs(number):
      -    if number < 0:
      -        number = -number
      -
      -    return number
      -
      -def compute_sum(end):
      -    i = 0
      -    total_n = 0
      -    number = my_abs(end)
      -
      -    while i < number:
      -        i = i + 1
      -        total_n = total_n + i
      -
      -    return total_n
      -
      -
      -# 主程序
      -i=1000
      -print('1+2+...+', i, '=',compute_sum(i))
      -
      -

      上述代码中,自定义求和函数compute_sum()调用自定义函数my_abs(),求得传入参数end的绝对值来作为累加的终点值,就此实现了自定义函数之间的调用。
      -细心的读者可能已经注意到一件事,在my_abs()函数与compute_sum()函数内,有相同的变量名number。在compute_sum()函数与主程序中,有相同的变量名i。但是注意,这几个名字相同的变量,并非同一个变量。

      -
        -
      • python程序可根据函数定义(0、1或多个)及主程序划分为多个区域,每个区域内都的变量(对象)的在各个区域的使用(作用)有一定规则限制,因此这种区域称作作用域,又分为函数作用域(对应函数体)与全局作用域(对应主程序)。
      • -
      • 每个函数内部的变量只属于该函数的函数体,主程序无法使用。例:
      • -
      -
      #函数作用域示例1
      -
      -def inner(n):
      -    n = 10
      -    print('inner', n)
      -
      -#主程序
      -inner(n)        #报错
      -
      -

      将提示句法错误:name 'n' is not defined,即n没有定义。虽然在主程序前面的inner()函数定义中,变量n被赋值10,但主程序无法使用inner()函数中的变量n,因此报错。

      -
        -
      • 每个函数内部的变量,其他函数也无法使用。例:
      • -
      -
      #函数作用域示例2
      -
      -def inner1(n):
      -    n = 10
      -    print('inner', n)
      -
      -def inner2():
      -    print(n)
      -
      -#主程序
      -inner1(10)
      -inner2()        #报错
      -
      -

      所提示的出错信息与前一段示例类似。
      -因此函数内部变量一般称为局部变量

      -
        -
      • 自定义函数能够读取并使用主程序(同一个程序中的)中变量的值,因此主程序中的变量,也称为全局变量。例:
      • -
      -
      #函数作用域示例3
      -
      -def inner():
      -    print('inner', n)
      -
      -#主程序
      -
      -n=100
      -inner()
      -
      -

      从示例3代码中可以看到,inner()函数内部并没有对n进行定义,但是能够从全局变量n中得到值100。但是自定义函数一般不能[^4]改变全局变量的值。例:

      -
      #函数作用域示例4
      -
      -def inner():
      -    n=10
      -    print('inner', n)
      -
      -#主程序
      -
      -n=100
      -inner()
      -print('outer', n)
      -
      -

      可知,虽然在自定义函数内部,将n赋值了10,但是在主程序中的全局变量n的值仍然是100
      -这个是怎么回事呢?是调用自定义函数inner()过程中,,全局变量n的值由100被赋值为10,然后从inner()函数返回的时候,n又被改回100了嘛?这似乎合理,但请看:

      -
      #函数作用域示例5
      -
      -def inner():
      -    print('inner', n)
      -    n=10
      -
      -#主程序
      -
      -n=100
      -inner()
      -print('outer', n)
      -
      -

      程序出现错误,local variable 'n' referenced before assignment,即局部变量n赋值前被使用/引用。示例4与5中,变量n被定义了(赋值就是一种定义),因此其中的n虽然与全局变量n同名,但其实是局部变量。
      -因此,示例4中使用的n是局部变量,其值为10,与全局变量n(值为100)无关;示例5中使用的n也是局部变量,在打印之前,并没有值,因此出错。只有示例3,由于函数内部没有对n进行定义,因此使用的是全局变量n的值。
      -最后要说明的一点是,对在自定义函数中与全局变量同名的变量,只要在自定义函数内部对该同名变量进行了任何形式[^4]的赋值,无论在该函数体内的哪个位置,该同名变量即成为局部变量,与同名全局变量无关。以下是更多示例:

      -
      #函数作用域示例6
      -
      -def inner():
      -    print('inner', n)
      -    n=n
      -
      -#主程序
      -
      -n=100
      -inner()
      -print('outer', n)
      -
      -
      #函数作用域示例7
      -
      -def inner():
      -    n=n
      -    print('inner', n)
      -
      -#主程序
      -
      -n=100
      -inner()
      -print('outer', n)
      -
      -

      最后一个示例比较有趣,请读者自行分析。

      -
        -
      • python内置函数
      • -
      -

      python语言解释器内置了一大批函数,可以直接使用。函数具体可见:https://docs.python.org/3/library/functions.html

      -

      本小节先介绍几个常用内置函数,后续还会陆续介绍。

      -
        -
      • abs(x)
      • -
      -

      Return the absolute value of a number. The argument may be an integer or a floating point number. If the argument is a complex number, its magnitude is returned.

      -
        -
      • divmod(a, b)
      • -
      -

      Take two (non complex) numbers as arguments and return a pair of numbers consisting of their quotient and remainder when using integer division. With mixed operand types, the rules for binary arithmetic operators apply. For integers, the result is the same as (a // b, a % b).

      -
        -
      • round(number[, ndigits])
      • -
      -

      Return the floating point value number rounded to ndigits digits after the decimal point. If ndigits is omitted or is None, it returns the nearest integer to its input.

      -

      4.5 完整代码

      -
      #求sigma1~m + sigma1~n + sigma1~k
      -
      -def compute_sum(end):
      -    i = 0
      -    total_n = 0
      -
      -    while i < end:
      -        i = i + 1
      -        total_n = total_n + i
      -
      -    return total_n
      -
      -n = int(input('请输入第1个整数,以回车结束。'))
      -m = int(input('请输入第2个整数,以回车结束。'))
      -k = int(input('请输入第3个整数,以回车结束。'))
      -
      -print('最终的和是:', compute_sum(m) + compute_sum(n) + compute_sum(k))
      -
      -

      4.6 实践与练习

      -
        -
      • 练习 1:仿照求$ \sum_{i=1}^mi + \sum_{i=1}^ni + \sum_{i=1}^ki$的完整代码,写程序,可求m!+n!+k!
      • -
      • 练习 2:写函数可返回1-1/3+1/5-1/7...的前n项的和。在主程序中,分别令n=1000及100000,打印4倍该函数的和。
      • -
      • 练习 3:将task3中的练习1及练习4改写为函数,并进行调用。
      • -
      • 挑战性练习:写程序,可以求从整数m到整数n累加的和,间隔为k,求和部分需用函数实现,主程序中由用户输入m,n,k调用函数验证正确性。
      • -
      -

      [^1] : 主程序可简单理解为指一个程序代码中第一层次的语句,该语句前没有空格,同时也不是函数定义语句。

      -

      [^2] : None这个对象不太容易清晰定义,举例进行说明会更容易理解。假设我们数东西(对象),如果数苹果,可以说1个苹果,2个苹果。当没有的时候,我们不说这是0个苹果,因为这时没有苹果这个对象存在;不能说这是0,因为我们不一定是在数数;也不能说没有苹果,因为我们不一定数什么我们只能说'没有'或'没有东西',这时候没有具体的对象和数。但是我们知道,如果确定了要数任何对象A,我们就可以说'没有A'。所以,python语言中,None可以被赋值给如函数及变量等任何对象。

      -

      [^3] : 此处多个返回值是在()里面,表示是python中元组(tuple)类型,将在后续章节介绍。

      -

      [^4] : 用global关键字,可以在函数内部改变全局变量的值,相对特殊,将在后续章节介绍。

      - -
      -
      -
      -
      -
      - - - - - - From 4f1c20695013539bc7067c103117ee4fd57abd77 Mon Sep 17 00:00:00 2001 From: liupengyuan Date: Sun, 8 Oct 2017 12:42:21 +0800 Subject: [PATCH 18/44] Add files via upload --- chapter4/pandas Tutorial (Series).ipynb | 1957 +++++++++++++++++++++++ 1 file changed, 1957 insertions(+) create mode 100644 chapter4/pandas Tutorial (Series).ipynb diff --git a/chapter4/pandas Tutorial (Series).ipynb b/chapter4/pandas Tutorial (Series).ipynb new file mode 100644 index 000000000..6c37d046c --- /dev/null +++ b/chapter4/pandas Tutorial (Series).ipynb @@ -0,0 +1,1957 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Pandas统计分析入门(1)\n", + "- ## Pandas及相关python库简介\n", + "- ## 一维数据统计分析(Series基础)\n", + "- ## 二维数据统计分析(DataFrame基础)\n", + "- ## Visualization基础\n", + "---\n", + "## Pandas 简介\n", + "\n", + " pandas is a Python package providing fast, flexible, and expressive data structures designed to make working with “relational” or “labeled” data both easy and intuitive. It aims to be the fundamental high-level building block for doing practical, real world data analysis in Python. Additionally, it has the broader goal of becoming the most powerful and flexible open source data analysis / manipulation tool available in any language. It is already well on its way toward this goal.\n", + "\n", + "## Numpy 简介\n", + "\n", + " NumPy is the fundamental package for scientific computing with Python. It contains among other things:\n", + "- a powerful N-dimensional array object\n", + "- sophisticated (broadcasting) functions\n", + "- tools for integrating C/C++ and Fortran code\n", + "- useful linear algebra, Fourier transform, and random number capabilities\n", + "\n", + "## Matplotlib 简介\n", + "\n", + "Matplotlib是一个Python的2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。\n", + "通过Matplotlib,开发者可以仅需要几行代码,便可以生成绘图,直方图,功率谱,条形图,错误图,散点图等。\n", + "\n", + "## Seaborn 简介\n", + "\n", + "Seaborn is a library for making attractive and informative statistical graphics in Python. It is built on top of matplotlib and tightly integrated with the PyData stack, including support for numpy and pandas data structures and statistical routines from scipy and statsmodels.\n", + "\n", + "---" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- ## 程序头部引入" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "from pandas import Series, DataFrame\n", + "import pandas as pd\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import seaborn as sns" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "以上引入各类利用pandas做数据分析可视化的模块,一般可作为每次数据分析项目/任务的起始代码,其中:\n", + "- `%matplotlib inline`是jupyter notebook的一个魔法命令,能够使基于matplotlib的绘图直接显示在网页中\n", + "- `from pandas import Series, DataFrame`,从pandas中引入最为常用的两个对象:Series及DataFrame\n", + "\n", + "**注意**,在以上的引入中,类似`pd`、`np`、`plt`及`sns`均为约定俗成的习惯性名称,**不建议**更改。\n", + "\n", + "---" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 一维数据统计分析(Series基础)\n", + "\n", + "- 数据的描述、分析、可视化展示、概括性度量、输入与输出" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1. Series对象及数据最基本展示\n", + "\n", + "我们将以一个词频统计结果的实例,进行介绍。教程中的各个代码段,请自行建立新的python程序,依次键入并顺序执行,观察执行结果。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "words_freq = [200,300,400,350,390,600,900,400,300,120]\n", + "freq_dict = {'天长地久':words_freq}\n", + "total_words_freq = [12345000,23456000,22333000,45632000,11144000,65433000,44444000,55555000,34522000,55566000]\n", + "years = [2006,2007,2008,2009,2010,2011,2012,2013,2014,2015]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "以上代码中:\n", + "- `words_freq`,是“天长地久”在2006-2015年10年之间的频次list\n", + "- `freq_dict`,键为“天长地久”,值为其历时频次的list\n", + "- `total_words_freq`,是每年统计文本语料的总字数list\n", + "- `years`,是年份list" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s = Series(words_freq)\n", + "s" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "利用list来初始化Series对象。Series是pandas内置的处理一维数据的数据类型。\n", + "- 第一列为Series对象的索引(index),默认为数字索引;\n", + "- 第二列为Series对象的值(value)\n", + "- 最后一行说明,Series对象的值为int64类型" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s = Series(freq_dict['天长地久'], index = years)\n", + "s" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "可以在初始化Series对象时,同时指定索引(index)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s.name = '2006-2015'\n", + "s.index.name = 'year'\n", + "s" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "还可以指定Series对象的名称(name),指定其索引(index)的名称(name)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s.plot()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Series对象可利用pandas内置的plot()直接绘图,默认为折线图。\n", + "\n", + "**折线图**多用于展示**数值型数据**,特别是用于展示历时数据。\n", + "\n", + "统计学中,依据计量尺度,一般可将数据分为三种类型:\n", + "- 分类数据\n", + "- 顺序数据(定序数据)\n", + "- 数值型数据(定量数据)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s.plot(kind='bar')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "plot()函数的参数`kind`,可以指定plot()函数所绘制图形的种类,`'bar'`为柱状图。也可以采用这种形式:`s.plot.bar()`,效果与指定kind参数为bar类似。\n", + "\n", + "**柱状图**用宽度相同的柱的高度或长短来表示数据多少。\n", + "\n", + "柱状图一般用于展示**分类数据**,展示不同类别数据的多少(可将以上数据的每个年份理解为不同类别)。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s.plot(kind='barh')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "'barh'为条形图,与柱状图类似。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s.plot('pie',figsize=(6,6))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "'pie'为饼图。\n", + "**饼图**使用圆形及圆内扇形的角度表示数值大小的图形。\n", + "\n", + "一般也用于展示**分类数据**,用来表示各分类部分数据占全部数据的比例(频率分布)。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s.plot('pie',figsize=(6,6))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "可利用plot()函数的`figsize`参数,设定图形的大小(长与宽)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2. 数据基本分析、度量与展示\n", + "\n", + "**2.1 归一化**\n", + "\n", + "**归一化**一般要使数值的绝对值变成**相对值**,将数值映射到[0,1]区间上。\n", + "\n", + "在本例中,由于每个年度的语料大小不同,单纯观察每个年度某个词汇出现的频次(绝对值),无法确定其出现的相对高低(相对值)。\n", + "\n", + "因此可将频次归一化,即某词汇每年出现的次数/每年语料的总字数。这样,该词汇就可以利用频次归一化的数值进行横向比较了。\n", + "\n", + "在实际中,也可以将频次归一化的结果乘以一个较大的整数。在本例中,可乘以10000000,表示语料中每10000000字出现该词汇的频次。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "#python实现\n", + "def norm_freq(freqs, total_freqs, per = 1):\n", + " return [per * freq/total_freq for freq, total_freq in zip(freqs, total_freqs)]\n", + "\n", + "per = 10000000\n", + "s_norm = norm_freq(freq_dict['天长地久'], total_words_freq, per = 10000000)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "上面的代码用python实现了将每年的频次归一化为每年每一千万字该词汇出现的频次。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s_norm = Series(s_norm, index = years)\n", + "s_norm" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "利用归一化处理后的结果初始化一个Series对象s_norm。注意,此时value的数据类型自动转换为float。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "#pandas的Series运算\n", + "s_norm = per * s / total_words_freq\n", + "s_norm" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "也可以直接利用pandas的序列运算进行归一化。运算结果与python编写代码一直,但是更简洁。\n", + "- `s_norm = per * s / total_words_freq`,其中`s`为Series类型,`total_words_freq`为list类型,直接相除运算的结果是将s中每个对应的值除以list中每个值。这种向量/矩阵运算是numpy及pandas中非常常见的情况,一般被称为**矢量化操作**。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s_norm.plot()\n", + "s.plot()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "再次绘图,并将两根折线展示在一个图上。\n", + "\n", + "可以看出,归一化前,峰值出现在2012年;归一化后,峰值出现在2010年。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**1.2 求平均值**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "#python实现\n", + "freq_mean = sum(freq_dict['天长地久'])/len(freq_dict['天长地久'])\n", + "freq_mean" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "计算均值的python代码。\n", + "\n", + "除非特别指出,一般平均值指的就是**算数平均值**。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "#pandas内置求均值函数\n", + "s.mean()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "利用内置均值函数mean()更为简洁。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s_mean = Series([freq_mean]*10, index = years)\n", + "s_mean" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "声明一个每年数值均为均值的Series对象s_mean。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s.plot()\n", + "s_mean.plot()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "将频次均值与各年频次画在一个图中" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**1.3 样本方差、标准差、标准分及变异系数**" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "**方差**(variance)是在概率论和统计方差衡量随机变量或一组数据时离散程度的度量。\n", + "- 统计中的方差(样本方差)是每个样本值与全体样本值的平均数之差的平方值的平均数。\n", + "\n", + "**总体**:包含所研究的全部个体(数据)的集合。\n", + "\n", + "**样本**:从总体中抽取的一部分元素的集合。\n", + "\n", + "**样本容量**:构成样本的元素的数量称为样本容量(size)。\n", + "\n", + "样本方差计算公式为:\n", + "$$s^2 = \\frac{1}{n-1}\\sum_{i=1}^{n}(x_i-\\widetilde x)^2$$\n", + "\n", + "注意样本方差的公式中,分母为`n-1`。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "#python实现方差\n", + "def variance(freqs):\n", + " mean = sum(freqs)/len(freqs)\n", + " return sum([(freq-mean)**2 for freq in freqs])/(len(freqs)-1)\n", + "\n", + "freq_var = variance(freq_dict['天长地久'])\n", + "freq_var" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "上述代码用python实现了求样本方差。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "#pandas内置方差\n", + "s.var()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "而pandas内置求方差的函数var()更为简洁。· " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "**标准差**:标准差是方差的算术平方根。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "#pandas内置标准差\n", + "s.std()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Pandas内置std()函数,可得到序列s的标准差。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**标准分**:变量值与平均数的差除以标准差后的值,也称为**z分数**(z score)。\n", + "\n", + "标准分的计算公式为:\n", + "$$z_i=\\frac{x_i-\\widetilde x}{s}$$" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "(s-s.mean())/s.std()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "上述代码可得到s中所有数值的标准分,存放在一个Series对象中。\n", + "标准差的**经验法则**(当一组数据对称分布时):\n", + "- 约68%的数据在均值附近正负1个标准差内\n", + "- 约95%的数据在均值附近正负2个标准差内\n", + "- 约99%的数据在均值附近正负3个标准差内\n", + "在正负3个标准差以外的数据,称为**离群点(outlier)**。\n", + "\n", + "**切比雪夫不等式**:对任意分布的一组数据,至少有(1-1/k^2)的数据落在正负k个标准差以内(k>1)。" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "**变异系数**(离散系数):一组数据的标准差与该组数据均值之比。公式为:\n", + "$$v_i=\\frac{s}{\\widetilde x}$$\n", + "\n", + "该系数是测度离散程度的相对统计量,主要用于比较不同演变数据的离散程度(特别对均值差异较大的数据组)。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "#变异系数\n", + "s.std()/s.mean()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "变异系数可由标准差/均值直接得到。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**1.4 中位数、分位数、轴距与箱型图**" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**中位数**(median):中数是按顺序排列的一组数据中居于中间位置的数,即在这组数据中,有一半的数据比他大,有一半的数据比他小。如果观察值有偶数个,通常取最中间的两个数值的平均数作为中位数。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s_norm.median()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Pandas内置了median()函数,即求中位数函数。" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false + }, + "source": [ + "**分位数**是将总体的全部数据按大小顺序排列后,处于各等分位置的变量值。\n", + "- 将全部数据分成相等的两部分,它就是中位数;如果分成四等分,就是四分位数;八等分就是八分位数。\n", + "- 四分位数也称为四分位点,它是将全部数据分成相等的四部分,其中每部分包括25%的数据,处在各分位点的数值就是四分位数。\n", + "- 四分位数有三个,第一个四分位数就是通常所说的四分位数,称为下四分位数,第二个四分位数就是中位数,第三个四分位数称为上四分位数,分别用Q1、Q2、Q3表示。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s_norm.quantile(0.25)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s_norm.quantile(0.75)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Pandas内置的quantile()函数可以求任意分位数,参数为0.25即Q1,参数为0.75即Q3。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s_norm.plot(kind='box')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "参数kind为`box`时,对应的就是**箱型图**。\n", + "\n", + "箱型图中间的箱型一般由三根线组成,由下至上分别对应Q1,Q2,Q3;而箱型以外的上下两根线,分别对应最大值与最小值(不含离群点)\n", + "\n", + "箱型图一般用于展示数值型数据,有助于对数据的整体分布有只管了解,特别有利于对离群点/异常点的观察。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "#Series箱型图离群点/异常点显示,利用seaborn\n", + "sns.boxplot(s_norm)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "由于pandas内置的箱型图默认不含离群点,可直接利用seaborn中的boxplot函数,为Series对象绘制带离群点的箱型图。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**1.5 样本的累积和**(累积频数与累积频率)\n", + "\n", + "**累积频数**(cumulative frequencies),将各有序类别或组的频数逐级累加起来的频数。\n", + "\n", + "**累积频率**(cumulative percentages),将各有序类别或组的百分比逐级累加起来。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s.cumsum()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Pandas内置了cumsum()函数,可以直接得到累积频数。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s.cumsum().plot()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "利用cumsum()得到的仍然是Series对象,可以直接绘图。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s_ratio = s/s.sum()\n", + "s_ratio.cumsum().plot()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "累积频率(累积百分比)可以类似的得到。\n", + "\n", + "`sum()`为内置的求Series对象中value和的函数。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**1.6 最大值、最小值、众数及总体描述**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s.max()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "内置最大值函数max()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s.min()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "内置最小值函数min()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s.mode()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**众数**(mode):一组数据中出现次数最多的数据值。一般用于测度分类数据的集中趋势,在数据量较大的时候有意义。\n", + "Pandas内置mode()函数,可以直接得到众数,注意众数可能不唯一,如此时s的众数有两个。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s.describe()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "Pandas的descibe()函数,可以给出汇总与描述统计的常用值。其中count为数据个数。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**1.7 随机数、直方图、峰度与偏度**(公式以后有时间补充)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "np.random.seed(66)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "调用np中random模块的seed()方法,生成一个随机数种子,在这个种子下,每次第一次生成的随机数均相同。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "arr1 = np.random.randn(10000)\n", + "arr1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "利用random的randn()函数,生成一个numpy的array类型的对象,大小为10000,可理解为长度为10000的数组(所有数据元素类型相同)。\n", + "\n", + "数组内数据分布为正态分布。randn即random normal。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "arr2 = np.random.randn(50)\n", + "arr2" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "与前类似,生成了一个长度为50的array,数据为正态分布。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "s_1 = Series(arr1)\n", + "s_2 = Series(arr2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Numpy的array类型可以直接初始化为Series类型的对象。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s_1.plot(kind='hist')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**直方图**(histogram):又称质量分布图,是数值数据分布的精确图形表示。\n", + "- 将值的范围分段,即将整个值的范围分成一系列间隔(一般要相等)\n", + "- 计算每个间隔中有多少值\n", + "\n", + "当plot()函数的kind参数为hist时,即代表直方图。\n", + "\n", + "此外,Pandas内置hist()函数,可对Series对象直接绘制直方图:`s_norm.hist()`。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s_1.plot(kind='hist',bins=50)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Plot()函数有一个重要参数`bins`,指定了间隔个数。此处将间隔数设为50." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s_1.plot(kind='kde')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**核密度估计图**(Kernel Density Estimation, KDE):采用平滑的峰值函数(“核函数”)来拟合观察到的数据点,从而对真实的概率分布曲线进行模拟。\n", + "Pandas的plot()函数中,参数kind的值为kde时,即可绘制KDE图。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "sns.distplot(s_1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Seaborn中内置的distplot()函数,可以直接对Series对象绘制直方图及KDE图的合一图。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "sns.distplot(s_2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "类似地,可以为s_2绘制histogram及kde图。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s_1.skew(),s_2.skew(),s_1.kurt(),s_2.kurt()," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**偏度**(Skewness)、偏态、偏态系数,是统计数据分布偏斜方向和程度的度量,是统计数据分布非对称程度的数字特征。正态分布的偏度为零。\n", + "- Skewness=0 分布形态与正态分布偏度相同\n", + "- Skewness>0 正偏差数值较大,为正偏或右偏。长尾巴拖在右边。\n", + "- Skewness<0 负偏差数值较大,为负偏或左偏。长尾巴拖在左边。\n", + "\n", + "**峰度**(Kurtosis)、峰态、峰态系数,是描述总体中所有取值分布形态陡缓程度的统计量。正态分布的峰度为3(也有很多将计算得到的峰度-3,而使正态分布峰度为零的做法)。\n", + "- Kurtosis=3(或0) 分布形态与正态分布峰度相同\n", + "- Kurtosis>3(或0) 正偏差数值较大,尖峰,厚尾。\n", + "- Kurtosis<3(或0) 负偏差数值较大,扁峰,薄尾。\n", + "\n", + "本例中,s_1比s_2更接近于正态分布。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3. Series类型基本操作整理\n", + "**3.1 创建与查看**\n", + "\n", + "创建一个Series的基本方法是:s = Series(data, index=index)。其中,data指代许多不同的数据类型:\n", + "- a Python dict\n", + "- an ndarray\n", + "- a scalar value (like 6)\n", + "\n", + "index指一个标签序列,一般用list类型。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**3.1.1 利用list创建Series**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s = Series([x*x for x in range(100)])\n", + "s" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 第一行利用一个list,创建了一个Series对象s\n", + "- 第二行查看该对象。\n", + "- 该对象由两部分组成,第一列为index,第二列为values。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "数据太长,可用head()函数查看前几个数据。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s.tail(10)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "也可用tail()函数查看最后几个数据,head()及tail()函数内可放整型参数,代表列出的数据个数。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s.values" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "查看序列s的值" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "type(s.values)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 查看s.values的类型\n", + "- Series对象的values的类型确实为numpy的array(数组)类型,即ndarray(n维数组)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s.index" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 查看s的index(索引)的值" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "type(s.index)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 查看s.index的类型\n", + "- Series对象的索引在未指定时,为pandas内置的RangeIndex类型,类似于python的range类型。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s2 = Series([x*x for x in range(26)], index=set('abcdefghijklmnopqrstuvwxyz'))\n", + "s2.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用list创建Series对象时,可用index参数指定一个list或set对应索引。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "type(s2.index), s2.index" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 指定索引后,Series对象的索引是pandas内置的Index类型" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**3.1.2 利用dict创建Series**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "data = {'喜欢':3000,'爱':7000,'讨厌':1000,'恨':500}\n", + "s3 = Series(data)\n", + "s3" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 可用dict创建Series对象,则字典的键自动成为index" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s3 = Series(data, index = ['a','b','c','爱'])\n", + "s3" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 初始化时,也可以额外指定index。但是如果指定的index找不到对应的值,则该index对应值设为NaN(Not a Number)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**3.1.3 利用标量创建Series对象**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s0 = Series(5, index = ['a','b','c','d','e'])\n", + "s0" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用标量创建Series对象时,对象的值将均为标量的值" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**3.1.4 利用Series对象创建Series对象**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s4 = Series(s3)\n", + "s4" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 这是最简单的利用Series对象创建Series对象的代码" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s5 = Series(s4, index = ['喜欢','爱','讨厌','中'])\n", + "s5" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 与利用dict初始化类似,也可以额外指定index。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**3.2 访问Series对象的元素**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s4[0], s4['爱'], s4.爱" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用位置索引或者index均可以访问对应元素\n", + "- 还可以利用index的值作为属性来访问对应元素" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s4[0:2]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s4['喜欢':'爱']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 位置索引及index的切片访问也适用,但利用index切片是包含末端的" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s4.index" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 可以利用index属性访问Series对象的索引" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s4.values" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 可以利用values属性访问Series对象的值" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "for k, v in s4.items():\n", + " print(k, v)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "for k in s4.keys():\n", + " print(k)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "for v in s4:\n", + " print(v)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 可以类似dict一样迭代访问Series对象的各个元素" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "for k in s4.index:\n", + " print(k)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "for v in s4.values:\n", + " print(v)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 也可以利用index与values属性迭代访问" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**3.3 修改、删除、排序等基本运算**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s4[0] = 10000\n", + "s4" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s4['爱'] = 4078\n", + "s4" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- Series对象内的值可以直接根据位置或index被赋值(修改)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s4[0:3] = 666\n", + "s4" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 可以切片式赋值" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s4.index = ['a', 'b', 'c', 'd']\n", + "s4" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- Series对象的index可以直接被赋值(修改),注意新的index的长度要与Series对象中index的长度一致。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s4 = s3.reindex(['喜欢','爱','讨厌','中', 'e'])\n", + "s4" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 可用reindex方法来更改index,找不到对应值的index,则其值为NaN。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s5 = s4.drop('e')\n", + "s4" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s5" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 可利用drop函数删除指定索引及值,生成新的Series对象,但原series对象不变。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s4+s5" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s4-s5" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s4*s5" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s4/s5" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- Serires对象可以直接进行四则运算,运算规则是对应索引的值进行运算,整体运算结果仍然是Series对象。\n", + "- 如果索引值无法对应,则结果为NaN。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s4.sort_values()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 按照values(值)进行排序,按值排序时,NaN将排在尾端" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s4.sort_index()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 按照index(索引)进行排序" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s4.sort_values(ascending=False)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 将ascending参数指定为False,则变为倒序排序" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**3.4 处理NaN值**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s5 = s4.fillna(1)\n", + "s5" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 可以利用内置fillna()函数,将NaN值替换为指定数值" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s6 = s4.reindex(['喜欢','爱','不讨厌','中'], fill_value = 0)\n", + "s6" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 可在reindex方法内利用fill_value参数,指定值来替换在重新索引时新出现的NaN值,\n", + "- 注意,fill_value参数与不会对原有NaN值进行替换。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s4.add(s6)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s4.add(s6, fill_value=0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 两个Series对象相加可用add方法,设置fill_value参数的值,替换非对齐index部分的NaN值。fill_value参数不会对运算前的NaN进行填充。\n", + "- 类似还有sub,div,mul方法,分别对应减法、除法及乘法。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**3.5 输出**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s.plot()\n", + "plt.savefig('test.jpg')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用内置的plot()函数展示图片后,可利用plt的savefig()函数将图片保存为文件输出。\n", + "- 可以查看当前目录下的test.jpg文件,与当前显示一致。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "s.to_csv('test.csv')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用to_csv()函数,可将Series对象输出为.csv文件\n", + "- 可在当前目录下,找到test.csv,双击打开查看" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.0" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} From 3795204028bd6b534fdaedec636201243f512313 Mon Sep 17 00:00:00 2001 From: liupengyuan Date: Sun, 8 Oct 2017 13:41:39 +0800 Subject: [PATCH 19/44] Add files via upload --- chapter4/pandas Tutorial (Series).ipynb | 136 +++++++++++++++++++++++- 1 file changed, 134 insertions(+), 2 deletions(-) diff --git a/chapter4/pandas Tutorial (Series).ipynb b/chapter4/pandas Tutorial (Series).ipynb index 6c37d046c..3a57c8b1d 100644 --- a/chapter4/pandas Tutorial (Series).ipynb +++ b/chapter4/pandas Tutorial (Series).ipynb @@ -85,7 +85,9 @@ "source": [ "### 1. Series对象及数据最基本展示\n", "\n", - "我们将以一个词频统计结果的实例,进行介绍。教程中的各个代码段,请自行建立新的python程序,依次键入并顺序执行,观察执行结果。" + "- 将以一个词频统计结果的实例,进行介绍。\n", + "- 教程中的各个代码段,请自行建立新的python程序,依次键入并顺序执行,观察执行结果。\n", + "- Series是pandas最重要最基础的数据对象,可用来表示数据表中的一列或一行。" ] }, { @@ -1890,7 +1892,137 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**3.5 输出**" + "**3.5 过滤**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s > 1000" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- Series对象进行比较等逻辑运算,结果仍然是一个Series对象,每一维度的值根据运算结果为True或False" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s[s>1000]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 可以利用逻辑运算的结果Series,对Series对象进行过滤,得到满足条件的Series" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**3.6 时间序列(Time Series)**示例" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "rng = pd.date_range('1/1/2012', periods=100, freq='S')\n", + "rng" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- Pandas内置的date_range()函数,可以很方便的得到时间标签\n", + "- 第一个参数'1/1/2012'为时间字符串,表示开始时间\n", + "- 第二个参数periods为时间标签个数,此处设为100\n", + "- 第三个参数freq为时间频率间隔,此处的'S'表示间隔为秒,常用的为S,Min,H,D,M分别为秒、分、小时、天,月。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "ts = Series(np.random.randint(0, 500, len(rng)), index=rng)\n", + "ts.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 将时间标签作为Series对象的index,随机生成0-500间100个整数,作为Series对象的值。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "ts.plot()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用plot()函数绘图" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "ts1 = ts.resample('Min').mean()\n", + "ts1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用resample()函数,可将时间序列重新抽样。\n", + "- 样本时间间隔根据resample()函数参数决定,本例中,样本时间间隔设为分钟(Min)\n", + "- 重新设定样本间隔后,可利用mean()函数,求得每个时间间隔内值的均值,作为新的index对应的值" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**3.7 输出**" ] }, { From 1481277bc707c6e290c5d8cb4947845acbeede28 Mon Sep 17 00:00:00 2001 From: liupengyuan Date: Sun, 8 Oct 2017 17:54:13 +0800 Subject: [PATCH 20/44] Add files via upload --- chapter5/Latex Equation Tutorial .ipynb | 253 ++++++++++++++++++++++++ 1 file changed, 253 insertions(+) create mode 100644 chapter5/Latex Equation Tutorial .ipynb diff --git a/chapter5/Latex Equation Tutorial .ipynb b/chapter5/Latex Equation Tutorial .ipynb new file mode 100644 index 000000000..2ce8b6d0e --- /dev/null +++ b/chapter5/Latex Equation Tutorial .ipynb @@ -0,0 +1,253 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Latex公式编辑简易教程\n", + "### Latex简介\n", + "\n", + "LaTeX – A document preparation system\n", + "- LaTeX is a high-quality typesetting system;\n", + "- It includes features designed for the production of technical and scientific documentation. \n", + "- LaTeX is the de facto standard for the communication and publication of scientific documents.\n", + "- LaTeX is available as free software.\n", + "\n", + "### 1. 行内公式与独立公式\n", + "$a=c+d$\n", + "\n", + "上式Latex代码:`$a=c+d$`\n", + "$$a=c+d$$\n", + "上式Latex代码:`$$a=c+d$$`\n", + "\n", + "### 2. 上标与下标\n", + "$n_i$\n", + "\n", + "上式Latex代码:`$n_i$`\n", + "\n", + "$n^i$\n", + "\n", + "上式Latex代码:`$n^i$`\n", + "\n", + "$n_{i,j}$\n", + "\n", + "上式Latex代码:`$n_{i,j}$`\n", + "\n", + "$n^{i+j}$\n", + "\n", + "上式Latex代码:`$n^{i+j}$`" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3. 根号与分数\n", + "3.1 根号\n", + "\n", + "$\\sqrt2$\n", + "\n", + "上式Latex代码:`$\\sqrt2$`\n", + "\n", + "$\\sqrt{x+y}$\n", + "\n", + "上式Latex代码:`$\\sqrt{x+y$`\n", + "\n", + "$\\sqrt[5]{x^2+y^2+z^2}$\n", + "\n", + "上式Latex代码:`$\\sqrt[5]{x^2+y^2+z^2}$`\n", + "\n", + "3.2 分数\n", + "\n", + "$\\frac a c$\n", + "\n", + "上式Latex代码:`$\\frac a c$`\n", + "\n", + "$\\frac {a}{c+d+e}$\n", + "\n", + "上式Latex代码:`$\\frac {a}{c+d+e}$`\n", + "\n", + "$\\frac {a}{c+d+\\frac e f}$\n", + "\n", + "上式Latex代码:`$\\frac {a}{c+d+\\frac e f}$`" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 4.各类运算符号,字母形式\n", + "$\\lambda,\\xi,\\pi,\\mu,\\Phi,\\Omega,\\alpha, \\beta, \\gamma,\\Gamma, \\Delta, \\infty, \\to$\n", + "\n", + "上式Latex代码:`$\\lambda,\\xi,\\pi,\\mu,\\Phi,\\Omega,\\alpha, \\beta, \\gamma,\\Gamma, \\Delta, \\infty, \\to $`\n", + "\n", + "$\\neq, \\geq, \\leq, \\approx, \\cdot, \\cdots, \\vdots, \\ddots$\n", + "\n", + "上式Latex代码:`$\\neq, \\geq, \\leq, \\approx, \\cdot, \\cdots, \\vdots, \\ddots$`\n", + "\n", + "$\\widetilde x, \\widehat x, \\overrightarrow A, \\overleftarrow{bc}$\n", + "\n", + "上式Latex代码:`$\\widetilde x, \\widehat x, \\overrightarrow A, \\overleftarrow{bc}$`" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 5. 求和、累积及积分\n", + "5.1 求和\n", + "\n", + "$\\sum$\n", + "\n", + "上式Latex代码:`$\\sum$`\n", + "\n", + "$\\sum_{i=1}^{n}$\n", + "\n", + "上式Latex代码:`$\\sum_{i=1}^{n}$`\n", + "\n", + "$\\sum_{i=1}^{n}x_i$\n", + "\n", + "上式Latex代码:`$\\sum_{i=1}^{n}x_i$`\n", + "\n", + "$\\sum_{i=1,j=1}^{n,m}{x_i \\cdot y_j}$\n", + "\n", + "上式Latex代码:`$\\sum_{i=1,j=1}^{n,m}{x_i \\cdot y_j}$`\n", + "\n", + "5.2 累积\n", + "\n", + "$\\prod$\n", + "\n", + "上式Latex代码:`$\\prod$`\n", + "\n", + "$\\prod_{i=1,j=1}^{n,m}{x_i \\cdot y_j}$\n", + "\n", + "上式Latex代码:`$\\prod_{i=1,j=1}^{n,m}{x_i \\cdot y_j}$\n", + "\n", + "5.3 积分\n", + "\n", + "$\\int$\n", + "\n", + "上式Latex代码:`$\\int$`\n", + "\n", + "$\\int_0^x{f(x)}$\n", + "\n", + "上式Latex代码:`$\\int_0^x{f(x)}$`" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 6 矩阵\n", + "\n", + "$\\begin{matrix} 1 & 2 & 3 \\end{matrix}$\n", + "\n", + "上式Latex代码:`$\\begin{matrix} 1 & 2 & 3 \\end{matrix}$`\n", + "\n", + "$\\begin{matrix} 1 \\\\ 2 \\\\ 3 \\end{matrix}$\n", + "\n", + "上式Latex代码:`$\\begin{matrix} 1 \\\\ 2 \\\\ 3 \\end{matrix}$`\n", + "\n", + "$\\begin{matrix} 1 & 2 & 3 \\\\ 4 & 5 & 6 \\\\ 7 & 8 & 9 \\\\ \\end{matrix}$\n", + "\n", + "上式Latex代码:`$\\begin{matrix} 1 & 2 & 3 \\\\ 4 & 5 & 6 \\\\ 7 & 8 & 9 \\\\ \\end{matrix}$`\n", + "\n", + "$$\\begin{pmatrix} 1 & 2 & 3 \\\\ 4 & 5 & 6 \\\\ 7 & 8 & 9 \\\\ \\end{pmatrix}$$\n", + "\n", + "上式Latex代码:`$$\\begin{pmatrix} 1 & 2 & 3 \\\\ 4 & 5 & 6 \\\\ 7 & 8 & 9 \\\\ \\end{pmatrix}$$`\n", + "\n", + "$$\\begin{pmatrix} 1 & 2 & 3 \\\\ 4 & 5 & 6 \\\\ 7 & 8 & 9 \\\\ \\end{pmatrix} \\tag3$$\n", + "\n", + "上式Latex代码:`$$\\begin{pmatrix} 1 & 2 & 3 \\\\ 4 & 5 & 6 \\\\ 7 & 8 & 9 \\\\ \\end{pmatrix} \\tag3$$`\n", + "\n", + "$$\\begin{pmatrix} \n", + "1 & 2 & \\cdots & m \\\\ \n", + "1 & 4 & \\cdots & m^2 \\\\\n", + "\\vdots & \\vdots & \\ddots & \\vdots\\\\\n", + "1 & 2^n & \\cdots & m^n \\\\\n", + "\\end{pmatrix}$$\n", + "\n", + "上式Latex代码:\n", + "```\n", + "$$\\begin{pmatrix} \n", + "1 & 2 & \\cdots & m \\\\ \n", + "1 & 4 & \\cdots & m^2 \\\\\n", + "\\vdots & \\vdots & \\ddots & \\vdots\\\\\n", + "1 & 2^n & \\cdots & m^n \\\\\n", + "\\end{pmatrix}$$```\n", + "\n", + "$$\\begin{array}{cc|c}\n", + " 1 & 2 & 3 \\\\\n", + " 4 & 5 & 6\n", + " \\end{array}$$\n", + " \n", + "式Latex代码:\n", + "```\n", + "$$\\begin{array}{cc|c}\n", + " 1 & 2 & 3 \\\\\n", + " 4 & 5 & 6\n", + " \\end{array}$$\n", + "```\n", + "\n", + "$$\\left[\n", + "\\begin{array}{cc|c}\n", + " 1 & 2 & 3 \\\\\n", + " 4 & 5 & 6\n", + " \\end{array}\n", + " \\right] $$\n", + " \n", + "上式Latex代码:\n", + "```\n", + "$$\\left[\n", + "\\begin{array}{cc|c}\n", + " 1 & 2 & 3 \\\\\n", + " 4 & 5 & 6\n", + " \\end{array}\n", + " \\right] $$\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 7. 空格、括号、绝对值、范数及转义\n", + "\n", + "$x b, x\\quad b, x\\qquad b$\n", + "\n", + "上式Latex代码:`$x b, x\\quad b, x\\qquad b$`\n", + "\n", + "$\\left(\\frac a b \\right), \\left[\\frac a b \\right], \\left|\\frac a b \\right|, \\left\\| \\frac a b \\right\\|$\n", + "\n", + "上式Latex代码:`$\\left(\\frac a b \\right), \\left[\\frac a b \\right], \\left|\\frac a b \\right|, \\left\\| \\frac a b \\right\\|$`\n", + "\n", + "$\\{a+b\\}$\n", + "\n", + "上式Latex代码:`$\\{a+b\\}$`\n", + "\n", + "Latex中一些保留字符如:`# $ % ^ & _ { } ~ \\`可直接用`\\`+上述符号进行转义,即可输出" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.0" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} From 9562209aa436069b64cc718c6170e09fa10eb54c Mon Sep 17 00:00:00 2001 From: liupengyuan Date: Sun, 8 Oct 2017 17:56:05 +0800 Subject: [PATCH 21/44] Create Markdown Basic Tutorial.md --- chapter5/Markdown Basic Tutorial.md | 107 ++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 chapter5/Markdown Basic Tutorial.md diff --git a/chapter5/Markdown Basic Tutorial.md b/chapter5/Markdown Basic Tutorial.md new file mode 100644 index 000000000..d9a65b129 --- /dev/null +++ b/chapter5/Markdown Basic Tutorial.md @@ -0,0 +1,107 @@ +# Markdown极简教程 +### by 刘鹏远(liupengyuan[at]pku.edu.cn) +--- +本教程将采取**内容与形式一体化**的方式进行。具体来说,从本段开始,正文分为多个段,**奇数段**为实际显示内容,其紧邻的**偶数段**为奇数自然段内容对应的Markdown形式,奇数偶数段间以分割线分割。偶数段可视为Markdown代码,因此以`代码`显示,把偶数自然段的内容直接拷贝到支持Markdown的编辑环境中,即可显示对应奇数自然段。[Markdown](https://en.wikipedia.org/wiki/Markdown)编辑环境如喜欢在浏览器中编辑,可用[简书](http://www.jianshu.com/),喜欢软件工具形式的,在Windows下可用[smark](https://github.com/elerao/Smark),ios下可使用[Mou](http://25.io/mou/)。建议边看本教程边动手拷贝修改。 + +--- + +`` +本教程将采取**内容与形式一体化**的方式进行。具体来说,从本段开始,正文分为多个段,**奇数段**为实际显示内容,其紧邻的**偶数段**为奇数自然段内容对应的Markdown形式,奇数偶数段间以分割线分割。偶数段可视为Markdown代码,因此以`代码`显示,把偶数自然段的内容直接拷贝到支持Markdown的编辑环境中,即可显示对应奇数自然段。[Markdown](https://en.wikipedia.org/wiki/Markdown)编辑环境如喜欢在浏览器中编辑,可用[简书](http://www.jianshu.com/),喜欢软件工具形式的,在Windows下可用[smark](https://github.com/elerao/Smark),ios下可使用[Mou](http://25.io/mou/)。建议边看本教程边动手拷贝修改。 +`` + +--- +# Markdown极简教程 +## 欢迎转载,本文链接: +### https://github.com/LanguageResources/tools/blob/master/markdown.md +--- + +``` +# Markdown极简教程 +## 欢迎转载,本文链接: +### https://github.com/LanguageResources/tools/blob/master/markdown.md +``` + +--- +# 内容提纲 +- **段落中的文本** + - 改字体 + - 添超链接 + - 转义字符 +- **图片、公式与表格** + - 插入图片 + - 插入公式 + - 插入表格 +- **引用** +--- +``` +# 内容提纲 +- **段落中的文本** + - 改字体 + - 添超链接 + - 转义字符 +- **图片、公式与表格** + - 插入图片 + - 插入公式 + - 插入表格 +- **引用** +``` +*** +- **段落中的文本** + - 改字体,示例:**粗体**,*斜体*,~~删除~~ + - 添超链接,示例:[本教程链接](https://www.gitbook.com/book/4078/ability_tools/details) + - 转义字符,想输出用于Markdown标记的字符,而不是要用这些字符标记,可前面加`\`符号。示例:\`\`, \[\], \-, \*, \\等等。 +--- +``` +- **段落中的文本** + - 改字体,示例:**粗体**,*斜体*,~~删除~~ + - 添超链接,示例:[本教程链接](https://www.gitbook.com/book/4078/ability_tools/details) + - 转义字符,想输出用于Markdown标记的字符,而不是要用这些字符标记,可前面加`\`符号。示例:\`\`, \[\], \-, \*, \\等等。 +``` +--- +- **图片与表格** + - 插入图片,但须有一个图片的地址链接,示例:![图片](http://daringfireball.net/graphics/logos/) + - 插入表格 + 用字符`-`与`|`排成表格,但注意第一行最好没有空格,线可以不用太对齐,示例: + +AB | ED +--- |-- + a | b + d | e + +--- +``` +- **图片与表格** +- 插入图片,但须有一个图片的地址链接,示例:![图片](http://daringfireball.net/graphics/logos/) + + - 插入表格 + 用字符`-`与`|`排成表格,但注意第一行最好没有空格,线可以不用太对齐,示例: + +AB | ED +--- |-- + a | b + d | e +---- +``` +--- + - 引用,示例: + +> 引用的文字从此行开始 +>>再次引用,注意空行的作用 +>> +>>>三次引用,`还可以插入代码等。注意 +>>>如没空行,则文本与上一行连上了。 + +--- +``` + - 引用,示例: + +> 引用的文字从此行开始 +>>再次引用,注意空行的作用 +>> +>>>三次引用,`还可以插入代码`等。注意 +>>>如没空行,则文本与上一行连上了。 +``` +更多Markdown的知识,可参考[Markdown语法](http://www.appinn.com/markdown/),或网上直接搜索。 + +``更多Markdown的知识,可参考[Markdown语法](http://www.appinn.com/markdown/),或网上直接搜索。 +`` From 1042b7373a4a6afdb6c3d636f688bab9e4743917 Mon Sep 17 00:00:00 2001 From: liupengyuan Date: Sun, 8 Oct 2017 18:01:45 +0800 Subject: [PATCH 22/44] Update Latex Equation Tutorial .ipynb --- chapter5/Latex Equation Tutorial .ipynb | 1 + 1 file changed, 1 insertion(+) diff --git a/chapter5/Latex Equation Tutorial .ipynb b/chapter5/Latex Equation Tutorial .ipynb index 2ce8b6d0e..9114c1054 100644 --- a/chapter5/Latex Equation Tutorial .ipynb +++ b/chapter5/Latex Equation Tutorial .ipynb @@ -5,6 +5,7 @@ "metadata": {}, "source": [ "# Latex公式编辑简易教程\n", + "## by liupengyuan[at]pku.edu.cn\n", "### Latex简介\n", "\n", "LaTeX – A document preparation system\n", From 0c03da1343b03be88c965f0c6480ef63dc87e0ec Mon Sep 17 00:00:00 2001 From: liupengyuan Date: Sun, 8 Oct 2017 18:13:40 +0800 Subject: [PATCH 23/44] Update pandas Tutorial (Series).ipynb --- chapter4/pandas Tutorial (Series).ipynb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/chapter4/pandas Tutorial (Series).ipynb b/chapter4/pandas Tutorial (Series).ipynb index 3a57c8b1d..b35e556de 100644 --- a/chapter4/pandas Tutorial (Series).ipynb +++ b/chapter4/pandas Tutorial (Series).ipynb @@ -62,9 +62,9 @@ "metadata": {}, "source": [ "以上引入各类利用pandas做数据分析可视化的模块,一般可作为每次数据分析项目/任务的起始代码,其中:\n", - "- `%matplotlib inline`是jupyter notebook的一个魔法命令,能够使基于matplotlib的绘图直接显示在网页中\n", - "- `from pandas import Series, DataFrame`,从pandas中引入最为常用的两个对象:Series及DataFrame\n", - "\n", + "- `%matplotlib inline`是jupyter notebook的一个魔法命令,能够使基于matplotlib的绘图直接显示在网页中,非jupyter notebook环境下编程,可以省略\n", + "- `from pandas import Series, DataFrame`,从pandas中引入最为常用的两个对象:Series及DataFrame。本行可以省略,则调用Series和DataFrame就需要加上前缀:pd.Series和pd.DataFrame。\n", + "- 在以上的引入中,第一行一般是为jupyter notebook\n", "**注意**,在以上的引入中,类似`pd`、`np`、`plt`及`sns`均为约定俗成的习惯性名称,**不建议**更改。\n", "\n", "---" From 469862a4f3cb2f40566814427bb1486074bd728b Mon Sep 17 00:00:00 2001 From: liupengyuan Date: Sun, 8 Oct 2017 18:16:56 +0800 Subject: [PATCH 24/44] Update pandas Tutorial (Series).ipynb --- chapter4/pandas Tutorial (Series).ipynb | 1 - 1 file changed, 1 deletion(-) diff --git a/chapter4/pandas Tutorial (Series).ipynb b/chapter4/pandas Tutorial (Series).ipynb index b35e556de..adc44cbd0 100644 --- a/chapter4/pandas Tutorial (Series).ipynb +++ b/chapter4/pandas Tutorial (Series).ipynb @@ -64,7 +64,6 @@ "以上引入各类利用pandas做数据分析可视化的模块,一般可作为每次数据分析项目/任务的起始代码,其中:\n", "- `%matplotlib inline`是jupyter notebook的一个魔法命令,能够使基于matplotlib的绘图直接显示在网页中,非jupyter notebook环境下编程,可以省略\n", "- `from pandas import Series, DataFrame`,从pandas中引入最为常用的两个对象:Series及DataFrame。本行可以省略,则调用Series和DataFrame就需要加上前缀:pd.Series和pd.DataFrame。\n", - "- 在以上的引入中,第一行一般是为jupyter notebook\n", "**注意**,在以上的引入中,类似`pd`、`np`、`plt`及`sns`均为约定俗成的习惯性名称,**不建议**更改。\n", "\n", "---" From 93b97c2ffaf011d22eae3972c2108f61668b5814 Mon Sep 17 00:00:00 2001 From: liupengyuan Date: Sun, 8 Oct 2017 18:17:51 +0800 Subject: [PATCH 25/44] Update pandas Tutorial (Series).ipynb --- chapter4/pandas Tutorial (Series).ipynb | 1 + 1 file changed, 1 insertion(+) diff --git a/chapter4/pandas Tutorial (Series).ipynb b/chapter4/pandas Tutorial (Series).ipynb index adc44cbd0..4ac93aff4 100644 --- a/chapter4/pandas Tutorial (Series).ipynb +++ b/chapter4/pandas Tutorial (Series).ipynb @@ -64,6 +64,7 @@ "以上引入各类利用pandas做数据分析可视化的模块,一般可作为每次数据分析项目/任务的起始代码,其中:\n", "- `%matplotlib inline`是jupyter notebook的一个魔法命令,能够使基于matplotlib的绘图直接显示在网页中,非jupyter notebook环境下编程,可以省略\n", "- `from pandas import Series, DataFrame`,从pandas中引入最为常用的两个对象:Series及DataFrame。本行可以省略,则调用Series和DataFrame就需要加上前缀:pd.Series和pd.DataFrame。\n", + "\n", "**注意**,在以上的引入中,类似`pd`、`np`、`plt`及`sns`均为约定俗成的习惯性名称,**不建议**更改。\n", "\n", "---" From 598c2a8c537efba2599391fd53dcb75f29c9d0d8 Mon Sep 17 00:00:00 2001 From: liupengyuan Date: Mon, 9 Oct 2017 00:29:39 +0800 Subject: [PATCH 26/44] Add files via upload --- chapter4/pandas Tutorial (DataFrame).ipynb | 1229 ++++++++++++++++++++ 1 file changed, 1229 insertions(+) create mode 100644 chapter4/pandas Tutorial (DataFrame).ipynb diff --git a/chapter4/pandas Tutorial (DataFrame).ipynb b/chapter4/pandas Tutorial (DataFrame).ipynb new file mode 100644 index 000000000..6a6a00500 --- /dev/null +++ b/chapter4/pandas Tutorial (DataFrame).ipynb @@ -0,0 +1,1229 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Pandas统计分析入门(2)\n", + "- ## 二维数据统计分析(DataFrame基础)\n", + "\n", + "---" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "from pandas import Series, DataFrame\n", + "import pandas as pd\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import seaborn as sns" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 二、二维数据统计分析(DataFrame基础)\n", + "\n", + "- 数据的描述、分析、可视化展示、概括性度量、输入与输出\n", + "df:多维条形图,多维折线图,多层图" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "### 1. DataFrame对象及数据展示\n", + "\n", + "- DataFrame是pandas最重要最基础的数据对象之一,可用来表示数据表\n", + "- 如果将Series视为表格中的一列,则DataFrame可以视为表中多列,或者是具有相同index的多个Series\n", + "- 如果将Series视为向量(带索引),则DataFrame即可视为矩阵(带索引)。\n", + "- 本小节仍将以一个词频统计结果作为实例,进行介绍。\n", + "- 教程中的各个代码段,请自行建立新的python程序,依次键入并顺序执行,观察执行结果。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "words_freq = np.array([200,300,400,350,390,600,900,400,300,120])\n", + "freq_dict = {'boy':words_freq,'girl':words_freq*2,'children':words_freq+100, 'child': words_freq+300}\n", + "total_words_freq = [12345000,23456000,22333000,45632000,11144000,65433000,44444000,55555000,34522000,55566000]\n", + "years = pd.date_range('2006', periods=10, freq='A')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "df = DataFrame(freq_dict)\n", + "df" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用dict创建一个DataFrame对象,其index默认为从0开始的整数" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "df = DataFrame(freq_dict, index = years)\n", + "df" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 与Series对象类似,可以在初始化DataFrame的时候,指定index\n", + "- 数据可视为3个有相同index的Series" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "df.plot()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 与Series对象类似,DataFrame对象可以利用plot()函数直接绘制折线图" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "df.plot(kind='bar')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 绘制柱状图(统计学中一般称为复式柱状图)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "df.plot(kind='barh')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 绘制条形图" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "df.plot(kind = 'area')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 绘制(面积)堆积图" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "df.plot(kind='box')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 绘制箱型图" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "sns.boxplot(df)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用seaborn绘制箱型图" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "df.plot(kind='scatter', x='boy',y='girl')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 当plot()函数kind为scatter时,可绘制散点图\n", + "- 散点图展现的是2组数据(2个变量)之间的关系\n", + "- 可见当前`boy`与`girl`两组数据之间是一种线性关系" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "df.plot(kind='scatter', x='boy',y='girl',s=df['child'].values)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 对散点图,如果设置s参数,将一组list类型的数据传入,代表对应点的大小,则绘制出气泡图\n", + "- 气泡图展示的是三组数据(三个变量)之间的关系。上图可以解释为:当男孩数量增加时,女孩增加,同时小孩儿的数量增加。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2. 查看DataFrame数据" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "df.tail(4)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 与Series类似,一样可以利用head()与tail()查看数据的前几行与后几行。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "df.index" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 查看index属性,index也可称为行索引" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "df.values" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 查看values属性,可见DataFrame对象的values是一个numpy的ndarray类型。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "df.columns" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 查看columns属性,columns也可称为列索引。此时列标签是pandas的Index对象,类似list,其中有个三个元素,类型为`object`,在pandas中,非数字类型一般均为object类型。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "df.describe()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用describe()函数,快速查看DataFrame中数据表的数据概要" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "dft = df.T\n", + "dft" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 可将DataFrame对象转置。\n", + "- 注意,转置并不改变原DataFrame对象,而是新生成一个DataFrame对象。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "dft.index" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "dft.columns" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 转置后,index与columns的值互换" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "df.sort_index(ascending = False) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 根据索引进行排序,默认是升序,并对行索引进行排序。定义逐行变化方向为0轴方向:axis=0\n", + "- `ascending = False`,使之降序排列" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "df.sort_index(axis = 1, ascending = False) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 将参数axis设为1,排序即按照列索引进行排序" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "df.sort_values(by='boy')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 根据值进行排序,如是根据某对应列的值进行排序,需要在参数by中指定数据列索引" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3. 选择DataFrame数据\n", + "**3.1 列选择**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "df['boy']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用列索引选择一列,将返回该列,且为Series对象。也可以用`df.boy`来访问,效果相同。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "df[['boy']]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 指定一个列标签,放入list中,可以获取对应colums标签的列,返回DataFrame对象。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "df[['boy','children']]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用指定多个列标签colums的list,可以获取对应colums标签的列,返回DataFrame对象。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "df[[0,2]]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用代表列整数索引的list,可以获取对应colums标签的列,返回DataFrame对象。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + " df.loc[:,'boy']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 也可以利用DataFrame的loc属性进行列选取\n", + "- loc属性主要通过标签进行数据选取\n", + "- 其中第一个位置参数表示行方向(即axis=0)元素,为`:`即为全部选取\n", + "- 第二个位置参数表示列方向(即axis=1)元素,选取当前指定列标签的数据\n", + "- 返回一个Series对象" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + " df.loc[:,['boy']]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 与前类似,如在list中指定列标签,则返回一个DataFrame对象" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "df.loc[:,['boy', 'girl']]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 与前类似,可以选择多个列,返回一个DataFrame对象" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "df.loc[:,'boy': 'girl']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 可以利用列索引进行切片选取\n", + "- 注意切片是两端包含\n", + "- 注意切片不需要在list中" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "df.iloc[:,0]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 还可以利用DataFrame的iloc属性进行列选取\n", + "- iloc属性也称为位置(position)属性,主要通过位置(即对应整数索引)进行数据选取\n", + "- 其中第一个位置参数仍然表示行方向(即axis=0)元素,为`:`即为全部选取\n", + "- 第二个位置参数仍然表示列方向(即axis=1)元素,选取当前指定列标签的数据\n", + "- 返回一个Series对象" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "df.iloc[:,[1]]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 与前类似,如在list中指定列位置,则返回一个DataFrame对象" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "df.iloc[:,[1,2]]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 与前类似,可以根据位置选择多个列,返回一个DataFrame对象" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "df.iloc[:,0:2]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 与前类似,可以通过列位置进行切片选择多个列,返回一个DataFrame对象" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**3.2 行选择**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "df.loc[years[0]]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 也可以利用DataFrame的loc属性进行行选取\n", + "- loc属性主要通过标签进行数据选取\n", + "- 其中第一个位置参数表示行方向(即axis=0)元素\n", + "- 第二个位置参数表示列方向(即axis=1)元素,不指定时,默认为全部选取\n", + "- 返回一个Series对象" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "df.loc[[years[0]]]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 与前类似,如在list中指定行标签,则可选择该行,并返回一个DataFrame对象" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "df.loc[[years[0], years[2]]]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 与前类似,如在list中指定多个行标签,则可选择多行,并返回一个DataFrame对象" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "df.loc[years[0]: years[2]]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 与前类似,还可以利用标签切片来选择多行,并返回一个DataFrame对象" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "df.iloc[0]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 还可以利用DataFrame的iloc属性进行行选取\n", + "- iloc属性也称为位置(position)属性,主要通过位置(即对应整数索引)进行数据选取\n", + "- 其中第一个位置参数仍然表示行方向(即axis=0)元素\n", + "- 第二个位置参数仍然表示列方向(即axis=1)元素,不指定时,默认为全部选取\n", + "- 返回一个Series对象" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "df.iloc[[0]]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 与前类似,如在list中指定行位置,则返回一个DataFrame对象" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "df.iloc[[0,1,2]]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 与前类似,可以根据位置选择多个行,返回一个DataFrame对象" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "df.iloc[1:3]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 与前类似,可以根据位置进行切片选择多个行,返回一个DataFrame对象" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "df[0:3]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 可以利用行切片,选取多行数据,返回一个DataFrame对象\n", + "- 个人觉得容易与选取列数据的混淆,不建议使用" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**3.3 选择区块**" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**3.3.1 利用loc**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "df.loc[years[0],'boy']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用loc,可以选择指定行标签、列标签的数据" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "df.loc[years[0],['boy']]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用loc,指定行标签,在list中指定一个列标签,可以选择指定行列的数据\n", + "- 返回一个Series" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "df.loc[[years[0]],['boy']]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用loc,在list中指定一个行标签,在list中指定一个列标签,可以选择指定行列的数据\n", + "- 返回一个DataFrame对象" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "df.loc[years[0],['boy', 'girl']]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用loc,指定行标签,在list中指定多个列标签,可以选择指定行的多个列的数据\n", + "- 返回一个Series" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "df.loc[years[0],'boy':'girl']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 与前类似,还可以切片选择给定行的多列数据\n", + "- 返回一个Series" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "df.loc[[years[0]],'boy':'girl']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 与前类似,但是将返回一个DataFrame对象" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "df.loc[years[0]:years[2],'boy':'girl']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 行列标签切片,选择对应数据\n", + "- 利用loc方式的行与列均可以如上类似处理" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**3.3.2 利用iloc**\n", + "\n", + "利用iloc进行区域选择的方式与loc基本类似,只是利用位置而非标签信息进行选取,请参照前面理解" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "df.iloc[0,0]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "df.iloc[0,[0,1,2]]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "df.iloc[[0,1,2],0]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "df.iloc[[0,1,2],[1, 2]]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "df.iloc[0:2,[1, 2]]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "df.iloc[0:5,0:3]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**3.3.3 利用iat选择单个元素**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "df.iat[1,1]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 4. 过滤DataFrame数据" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + " df[df.boy > 400]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 可利用DataFrame对象的某一列数据,进行布尔运算,根据布尔运算的结果过滤数据\n", + "- 返回一个DataFrame对象" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "df[df[['boy','girl']] > 700]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 可设置多个列的条件,来过滤数据\n", + "- 返回DataFrame对象" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "df[df > 400]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 可对所有元素进行条件过滤\n", + "- 返回DataFrame对象" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "df[df['girl'].isin([700,800])]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用isin()函数,选择某列数据进行数据过滤" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.0" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} From c7f4f4aa39936f1f840db0d85ed21f2052518c03 Mon Sep 17 00:00:00 2001 From: liupengyuan Date: Sat, 14 Oct 2017 21:37:27 +0800 Subject: [PATCH 27/44] Delete pandas Tutorial (DataFrame).ipynb --- chapter4/pandas Tutorial (DataFrame).ipynb | 1229 -------------------- 1 file changed, 1229 deletions(-) delete mode 100644 chapter4/pandas Tutorial (DataFrame).ipynb diff --git a/chapter4/pandas Tutorial (DataFrame).ipynb b/chapter4/pandas Tutorial (DataFrame).ipynb deleted file mode 100644 index 6a6a00500..000000000 --- a/chapter4/pandas Tutorial (DataFrame).ipynb +++ /dev/null @@ -1,1229 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Pandas统计分析入门(2)\n", - "- ## 二维数据统计分析(DataFrame基础)\n", - "\n", - "---" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "%matplotlib inline\n", - "from pandas import Series, DataFrame\n", - "import pandas as pd\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "import seaborn as sns" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 二、二维数据统计分析(DataFrame基础)\n", - "\n", - "- 数据的描述、分析、可视化展示、概括性度量、输入与输出\n", - "df:多维条形图,多维折线图,多层图" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": true - }, - "source": [ - "### 1. DataFrame对象及数据展示\n", - "\n", - "- DataFrame是pandas最重要最基础的数据对象之一,可用来表示数据表\n", - "- 如果将Series视为表格中的一列,则DataFrame可以视为表中多列,或者是具有相同index的多个Series\n", - "- 如果将Series视为向量(带索引),则DataFrame即可视为矩阵(带索引)。\n", - "- 本小节仍将以一个词频统计结果作为实例,进行介绍。\n", - "- 教程中的各个代码段,请自行建立新的python程序,依次键入并顺序执行,观察执行结果。" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "words_freq = np.array([200,300,400,350,390,600,900,400,300,120])\n", - "freq_dict = {'boy':words_freq,'girl':words_freq*2,'children':words_freq+100, 'child': words_freq+300}\n", - "total_words_freq = [12345000,23456000,22333000,45632000,11144000,65433000,44444000,55555000,34522000,55566000]\n", - "years = pd.date_range('2006', periods=10, freq='A')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "df = DataFrame(freq_dict)\n", - "df" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 利用dict创建一个DataFrame对象,其index默认为从0开始的整数" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "df = DataFrame(freq_dict, index = years)\n", - "df" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 与Series对象类似,可以在初始化DataFrame的时候,指定index\n", - "- 数据可视为3个有相同index的Series" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "df.plot()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 与Series对象类似,DataFrame对象可以利用plot()函数直接绘制折线图" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "df.plot(kind='bar')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 绘制柱状图(统计学中一般称为复式柱状图)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "df.plot(kind='barh')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 绘制条形图" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "df.plot(kind = 'area')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 绘制(面积)堆积图" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "df.plot(kind='box')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 绘制箱型图" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "sns.boxplot(df)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 利用seaborn绘制箱型图" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "df.plot(kind='scatter', x='boy',y='girl')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 当plot()函数kind为scatter时,可绘制散点图\n", - "- 散点图展现的是2组数据(2个变量)之间的关系\n", - "- 可见当前`boy`与`girl`两组数据之间是一种线性关系" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "df.plot(kind='scatter', x='boy',y='girl',s=df['child'].values)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 对散点图,如果设置s参数,将一组list类型的数据传入,代表对应点的大小,则绘制出气泡图\n", - "- 气泡图展示的是三组数据(三个变量)之间的关系。上图可以解释为:当男孩数量增加时,女孩增加,同时小孩儿的数量增加。" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 2. 查看DataFrame数据" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "df.head()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "df.tail(4)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 与Series类似,一样可以利用head()与tail()查看数据的前几行与后几行。" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "df.index" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 查看index属性,index也可称为行索引" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "df.values" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 查看values属性,可见DataFrame对象的values是一个numpy的ndarray类型。" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "df.columns" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 查看columns属性,columns也可称为列索引。此时列标签是pandas的Index对象,类似list,其中有个三个元素,类型为`object`,在pandas中,非数字类型一般均为object类型。" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "df.describe()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 利用describe()函数,快速查看DataFrame中数据表的数据概要" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "dft = df.T\n", - "dft" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 可将DataFrame对象转置。\n", - "- 注意,转置并不改变原DataFrame对象,而是新生成一个DataFrame对象。" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "dft.index" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "dft.columns" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 转置后,index与columns的值互换" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "df.sort_index(ascending = False) " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 根据索引进行排序,默认是升序,并对行索引进行排序。定义逐行变化方向为0轴方向:axis=0\n", - "- `ascending = False`,使之降序排列" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "df.sort_index(axis = 1, ascending = False) " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 将参数axis设为1,排序即按照列索引进行排序" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "df.sort_values(by='boy')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 根据值进行排序,如是根据某对应列的值进行排序,需要在参数by中指定数据列索引" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 3. 选择DataFrame数据\n", - "**3.1 列选择**" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "df['boy']" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 利用列索引选择一列,将返回该列,且为Series对象。也可以用`df.boy`来访问,效果相同。" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "df[['boy']]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 指定一个列标签,放入list中,可以获取对应colums标签的列,返回DataFrame对象。" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "df[['boy','children']]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 利用指定多个列标签colums的list,可以获取对应colums标签的列,返回DataFrame对象。" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "df[[0,2]]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 利用代表列整数索引的list,可以获取对应colums标签的列,返回DataFrame对象。" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - " df.loc[:,'boy']" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 也可以利用DataFrame的loc属性进行列选取\n", - "- loc属性主要通过标签进行数据选取\n", - "- 其中第一个位置参数表示行方向(即axis=0)元素,为`:`即为全部选取\n", - "- 第二个位置参数表示列方向(即axis=1)元素,选取当前指定列标签的数据\n", - "- 返回一个Series对象" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - " df.loc[:,['boy']]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 与前类似,如在list中指定列标签,则返回一个DataFrame对象" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "df.loc[:,['boy', 'girl']]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 与前类似,可以选择多个列,返回一个DataFrame对象" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "df.loc[:,'boy': 'girl']" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 可以利用列索引进行切片选取\n", - "- 注意切片是两端包含\n", - "- 注意切片不需要在list中" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "df.iloc[:,0]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 还可以利用DataFrame的iloc属性进行列选取\n", - "- iloc属性也称为位置(position)属性,主要通过位置(即对应整数索引)进行数据选取\n", - "- 其中第一个位置参数仍然表示行方向(即axis=0)元素,为`:`即为全部选取\n", - "- 第二个位置参数仍然表示列方向(即axis=1)元素,选取当前指定列标签的数据\n", - "- 返回一个Series对象" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "df.iloc[:,[1]]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 与前类似,如在list中指定列位置,则返回一个DataFrame对象" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "df.iloc[:,[1,2]]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 与前类似,可以根据位置选择多个列,返回一个DataFrame对象" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "df.iloc[:,0:2]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 与前类似,可以通过列位置进行切片选择多个列,返回一个DataFrame对象" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**3.2 行选择**" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "df.loc[years[0]]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 也可以利用DataFrame的loc属性进行行选取\n", - "- loc属性主要通过标签进行数据选取\n", - "- 其中第一个位置参数表示行方向(即axis=0)元素\n", - "- 第二个位置参数表示列方向(即axis=1)元素,不指定时,默认为全部选取\n", - "- 返回一个Series对象" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "df.loc[[years[0]]]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 与前类似,如在list中指定行标签,则可选择该行,并返回一个DataFrame对象" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "df.loc[[years[0], years[2]]]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 与前类似,如在list中指定多个行标签,则可选择多行,并返回一个DataFrame对象" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "df.loc[years[0]: years[2]]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 与前类似,还可以利用标签切片来选择多行,并返回一个DataFrame对象" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "df.iloc[0]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 还可以利用DataFrame的iloc属性进行行选取\n", - "- iloc属性也称为位置(position)属性,主要通过位置(即对应整数索引)进行数据选取\n", - "- 其中第一个位置参数仍然表示行方向(即axis=0)元素\n", - "- 第二个位置参数仍然表示列方向(即axis=1)元素,不指定时,默认为全部选取\n", - "- 返回一个Series对象" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "df.iloc[[0]]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 与前类似,如在list中指定行位置,则返回一个DataFrame对象" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "df.iloc[[0,1,2]]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 与前类似,可以根据位置选择多个行,返回一个DataFrame对象" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "df.iloc[1:3]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 与前类似,可以根据位置进行切片选择多个行,返回一个DataFrame对象" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "df[0:3]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 可以利用行切片,选取多行数据,返回一个DataFrame对象\n", - "- 个人觉得容易与选取列数据的混淆,不建议使用" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**3.3 选择区块**" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**3.3.1 利用loc**" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "df.loc[years[0],'boy']" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 利用loc,可以选择指定行标签、列标签的数据" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "df.loc[years[0],['boy']]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 利用loc,指定行标签,在list中指定一个列标签,可以选择指定行列的数据\n", - "- 返回一个Series" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "df.loc[[years[0]],['boy']]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 利用loc,在list中指定一个行标签,在list中指定一个列标签,可以选择指定行列的数据\n", - "- 返回一个DataFrame对象" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "df.loc[years[0],['boy', 'girl']]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 利用loc,指定行标签,在list中指定多个列标签,可以选择指定行的多个列的数据\n", - "- 返回一个Series" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "df.loc[years[0],'boy':'girl']" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 与前类似,还可以切片选择给定行的多列数据\n", - "- 返回一个Series" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "df.loc[[years[0]],'boy':'girl']" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 与前类似,但是将返回一个DataFrame对象" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "df.loc[years[0]:years[2],'boy':'girl']" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 行列标签切片,选择对应数据\n", - "- 利用loc方式的行与列均可以如上类似处理" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**3.3.2 利用iloc**\n", - "\n", - "利用iloc进行区域选择的方式与loc基本类似,只是利用位置而非标签信息进行选取,请参照前面理解" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "df.iloc[0,0]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "df.iloc[0,[0,1,2]]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "df.iloc[[0,1,2],0]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "df.iloc[[0,1,2],[1, 2]]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "df.iloc[0:2,[1, 2]]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "df.iloc[0:5,0:3]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**3.3.3 利用iat选择单个元素**" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "df.iat[1,1]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 4. 过滤DataFrame数据" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - " df[df.boy > 400]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 可利用DataFrame对象的某一列数据,进行布尔运算,根据布尔运算的结果过滤数据\n", - "- 返回一个DataFrame对象" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "df[df[['boy','girl']] > 700]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 可设置多个列的条件,来过滤数据\n", - "- 返回DataFrame对象" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "df[df > 400]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 可对所有元素进行条件过滤\n", - "- 返回DataFrame对象" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "df[df['girl'].isin([700,800])]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 利用isin()函数,选择某列数据进行数据过滤" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.0" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} From 3a0bb63237c008ab90971e1949002cb04b5acde2 Mon Sep 17 00:00:00 2001 From: liupengyuan Date: Sat, 14 Oct 2017 21:47:48 +0800 Subject: [PATCH 28/44] Add files via upload --- chapter4/pandas+Tutorial+DataFrame.ipynb | 4830 ++++++++++++++++++++++ chapter4/pandas+Tutorial+Series.ipynb | 3726 +++++++++++++++++ 2 files changed, 8556 insertions(+) create mode 100644 chapter4/pandas+Tutorial+DataFrame.ipynb create mode 100644 chapter4/pandas+Tutorial+Series.ipynb diff --git a/chapter4/pandas+Tutorial+DataFrame.ipynb b/chapter4/pandas+Tutorial+DataFrame.ipynb new file mode 100644 index 000000000..23a227fc0 --- /dev/null +++ b/chapter4/pandas+Tutorial+DataFrame.ipynb @@ -0,0 +1,4830 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Pandas统计分析入门(2)\n", + "- 转载注明转自:https://github.com/liupengyuan/\n", + "- ## 二维数据统计分析(DataFrame基础)\n", + "\n", + "---" + ] + }, + { + "cell_type": "code", + "execution_count": 181, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "from pandas import Series, DataFrame\n", + "import pandas as pd\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import seaborn as sns" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 二、二维数据统计分析(DataFrame基础)\n", + "\n", + "- 数据的描述、分析、可视化展示、概括性度量、输入与输出\n", + "df:多维条形图,多维折线图,多层图" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "### 1. DataFrame对象及数据展示\n", + "\n", + "- DataFrame是pandas最重要最基础的数据对象之一,可用来表示数据表\n", + "- 如果将Series视为表格中的一列,则DataFrame可以视为表中多列,或者是具有相同index的多个Series\n", + "- 如果将Series视为向量(带索引),则DataFrame即可视为矩阵(带索引)。\n", + "- 本小节仍将以一个词频统计结果作为实例,进行介绍。\n", + "- 教程中的各个代码段,请自行建立新的python程序,依次键入并顺序执行,观察执行结果。" + ] + }, + { + "cell_type": "code", + "execution_count": 182, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "words_freq = np.array([200,300,400,350,390,600,900,400,300,120])\n", + "freq_dict = {'boy':words_freq,'girl':words_freq*2,'children':words_freq+100, 'child': words_freq+300}\n", + "total_words_freq = [12345000,23456000,22333000,45632000,11144000,65433000,44444000,55555000,34522000,55566000]\n", + "years = pd.date_range('2006', periods=10, freq='A')" + ] + }, + { + "cell_type": "code", + "execution_count": 183, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      boychildchildrengirl
      0200500300400
      1300600400600
      2400700500800
      3350650450700
      4390690490780
      56009007001200
      6900120010001800
      7400700500800
      8300600400600
      9120420220240
      \n", + "
      " + ], + "text/plain": [ + " boy child children girl\n", + "0 200 500 300 400\n", + "1 300 600 400 600\n", + "2 400 700 500 800\n", + "3 350 650 450 700\n", + "4 390 690 490 780\n", + "5 600 900 700 1200\n", + "6 900 1200 1000 1800\n", + "7 400 700 500 800\n", + "8 300 600 400 600\n", + "9 120 420 220 240" + ] + }, + "execution_count": 183, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = DataFrame(freq_dict)\n", + "df" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用dict创建一个DataFrame对象,其index默认为从0开始的整数" + ] + }, + { + "cell_type": "code", + "execution_count": 184, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      boychildchildrengirl
      2006-12-31200500300400
      2007-12-31300600400600
      2008-12-31400700500800
      2009-12-31350650450700
      2010-12-31390690490780
      2011-12-316009007001200
      2012-12-31900120010001800
      2013-12-31400700500800
      2014-12-31300600400600
      2015-12-31120420220240
      \n", + "
      " + ], + "text/plain": [ + " boy child children girl\n", + "2006-12-31 200 500 300 400\n", + "2007-12-31 300 600 400 600\n", + "2008-12-31 400 700 500 800\n", + "2009-12-31 350 650 450 700\n", + "2010-12-31 390 690 490 780\n", + "2011-12-31 600 900 700 1200\n", + "2012-12-31 900 1200 1000 1800\n", + "2013-12-31 400 700 500 800\n", + "2014-12-31 300 600 400 600\n", + "2015-12-31 120 420 220 240" + ] + }, + "execution_count": 184, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = DataFrame(freq_dict, index = years)\n", + "df" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 与Series对象类似,可以在初始化DataFrame的时候,指定index\n", + "- 数据可视为3个有相同index的Series" + ] + }, + { + "cell_type": "code", + "execution_count": 185, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 185, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df.plot()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 与Series对象类似,DataFrame对象可以利用plot()函数直接绘制折线图" + ] + }, + { + "cell_type": "code", + "execution_count": 186, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 186, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAFMCAYAAADFg3cgAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xt8XHWZx/FPSqAFSUuBFARBYLXPIshlcaEqxbKgCF6q\nFAURBatcuiCgvECg5SpiBVvlUiptQUC8QLl4Qbm5FS1FFhdkaZF9kDty0YhpGylNKWT/OCclDUkz\nncmceeY33/frxYvMySTn02n65OTMnF+aurq6EBGRdA2pdYCIiFSXBr2ISOI06EVEEqdBLyKSOA16\nEZHEadCLiCSuudYBfWlr66joNZ8jR25Ae/uywcqp644IDVE6IjRE6YjQEKUjQsNgdbS2tjT1tT3J\nI/rm5nVqnQDE6IjQADE6IjRAjI4IDRCjI0IDVLcjyUEvIiJv0KAXEUmcBr2ISOI06EVEEqdBLyKS\nOA16EZHEadCLiCQu5AVTIiK9TZw6b1A/35Wn/seA9/nVr37B008/xaRJXx7UfRdNg15EAJg59a7V\nbk86dVxNOmTwadCLiKzBww8v5IQTJvHyyy8zceJRrLtuM7NmzWTo0KEMHz6C0047kx/96Bo23bSV\nCRM+zdKlSznxxP/kyiuvrXX6Khr0IiJrMGzYMC688CIWL27nqKOOAOCyy+bQ2jqK66//MVdffQWf\n/ORBnH32ZCZM+DR33nkbH/rQh2sb3UtJg97M9gC+5e7jzOwnwOb5u7YB7nX3Q8zsImBPoCN/33hg\nBXAtMCrffri7tw1iv4hIVe200y40NTUxcuTGDB06DIDW1lEA7LLLrlx++WVsueXb2GCDt/Dkk09w\n5523MXXq9Fomv8mAr7oxs1OAOcAwAHc/xN3HAZ8EFgNfye+6G7Cfu4/L/1sCTAIWuvtY4BpgyuD/\nEUREqueRR/4EwEsv/Z0VKzrp7FzO3//+dwAefPABttpqawA+/vFPcNVV2ZH+RhttVLPevpRyRP84\ncCDwg17bzwEucfcXzGwI8E5glpltBlzh7leSHeFfkN//VuCMwckWESlGZ2cnxx9/DK+8soxTTplM\nV1cXkyefzJAhTbS0DOf0088GYK+99uY737mAM874em2D+9DU1TXw0u9mtg3wE3cfk98eBfwG2Mnd\nXzOzFuAEYDqwTv6+ifntL7v7I/k3g2fc/W0D7W/lyte6oiwdKtIozj3pF6vdPnPax2pUUp9eeeUV\nDjvsMObOncuQITW7RKnP9ejLfTL2IOBH7v5afnsZcJG7LwMws3nAzsBSoCW/TwvZqZ4BDcLi+7S1\ndQx8xyqL0BGhIUpHhIYoHaU0FNFYL4/FQBYu/F8uvPB8vvCFI3nppZdr1tHa2tLn9nIH/b7AeT1u\njwauM7Ndyc777wlcTfYk7AHAfcD+wPwy9yciEta7370z11xzXa0z+lXuzxcGPNF9w90fITuHfy/w\nW+Aad38YmAnsYGZ3A0eRndcXEZEClXRE7+5PAWN63N6hj/tcCFzYa9sy4FOVJYqISCW0qJmISOI0\n6EVEEqclEESkLhw775RB/Xwz/uOCge/US3+rWZ511mlMmXIuF1zwDfbZ50OMGfO+Ve/r7Ozks589\niBtu+EXvT1cYDXoRkQqdc843a52wRhr0IiL96Oxczvnnn8OLL77Iq6++yt5778PDDy/kK185lsWL\n2/nEJw5i/PgDOeigj/HDH96w6uOWLVvGuedOoaOjgy23HPAa0arTOXoRkX789Kc3svnmW3D55d/n\nnHPOZ+jQoTQ3NzN9+qWcf/63mTv3x/1+3Lbb/gszZsxm/PgJBVe/mQa9iEg/nnnmaXbc8d0AbLXV\n1my4YQujR/8rTU1NbLzxJixfvrzPj3v22Wd417uyV6HvsMOONDfX9uSJBr2ISD/e/vZtV61e+dxz\nf+Hyy2fQ1NTncjKr2XbbbVm0aCEAjz76f6xcubKqnQPRoBcR6cf48Qfy/PPPcdxxR3HeeWdx8MGf\nLfHjJvD8888xadIXuemmuay77rpVLl2zklavLFpbW0dFUREWSorSEaEhSkeEhigdfTXU4nfGRn0s\n6rWjtbWlzx83dEQvIpI4DXoRkcRp0IuIJE6DXkQkcRr0IiKJ06AXEUmc1roRkbrw6JeOGNTPN3rO\nVWv9MVq9UkSkQWn1ShGROjXYq1ced9xRjBy5MUuXLuXCC7/LtGlT+ctfnuX111/n5JNPYrvt3sXh\nhx/CLrv8G48//hgAU6dOZ8MNN6zoz6Fz9CIi/ajG6pX77rsfF110Gb/85c8ZMWIjZsyYzdSp0zj3\n3HMBePnll9l33/249NJZtLaO4t57F1T859ARvYhIP5555ulV59u32mprFi4sffXK973v/cCbV6/c\neuu3A/D444/x0EN/5E9/WgTAypUrWbx4MQCjRxsAo0ZtxooVKyr+c5Q06M1sD+Bb7j7OzHYFbgH+\nnL97prtfZ2ZHAkcDK4Hz3P0WM1sfuBYYBXQAh7t7W8XVIiIF6F69cuzYcatWr/zwhz8y4Md1r145\nduy4N61eOWTIkPxzb8OoUaP4/Ocn0tm5nLlzr2X48OH5vQZeIXNtDHjqxsxOAeYAw/JNuwHT3X1c\n/t91ZrY5cDzwfmA/4JtmNhSYBCx097HANcCUQa0XEamiaq5eOX78gTz99FMcd9xRHHPMRLbccstV\n3wQG24CrV5rZBOAh4AfuPsbMZgJG9tPAn4ETgb2BA9z9mPxjbgbOB04DLnD3e81sBHCPu+8wUNTK\nla91NTevU8EfS0TW1rknrf7yvzOnfaxGJVKBPn8UGPDUjbvfaGbb9Nh0HzDH3e83s8nAWcCDwJIe\n9+kARgDDe2zv3jag9vZlpdytXyktO5pCQ5SOCA1ROkppKKKxXh6LeulobW3pc3s5Pyfc7O73d78N\n7AosBXruoQVY3Gt79zYRESlQOYP+djPbPX97H+B+sqP8sWY2LD9Fsz2wCFgAHJDfd39gfoW9IiKy\nlsp5eeUk4BIzexV4ETjK3Zea2cVkg3wIMNndl+fn8682s7uBFcChgxUuIiKlKWnQu/tTwJj87QfI\nXl3T+z6zgdm9ti0DPlVxpYiIlE1XxoqIJE5XxopIXej9y8srVe4vP7/oomkcfPBn2XzzzVdte+GF\n5znrrNOZNeuqwYkbZBr0IiJr4YQTTqp1wlrToBcR6Udn53K+/vWzeOmlNkaN2owHH/wjW221NSef\nfDq//vXtLFr0EK+88gqnnnpGrVPXSOfoRUT68bOf3cwWW2zBzJlXMnHi0bS3/2O197/97dvyve9d\nydChQ2tUWBoNehGRfjz99JPsuOPOQLYI2UYbjVzt/d0rUUanQS8i0o/ttvsXFi16CIDnnvsLS5as\nfnH/kCGDu8pktWjQi4j046MfHc+LL77AscceyZVXXs56661X66Sy6MlYEakL5b4cshKPPup89KPj\n2X33MTz77DMsXPgQl146C4AvfvHoVfd761u3CPvSStCgFxHp1xZbbMnZZ0/m+9+fxcqVK/nqV79W\n66SyaNCLiPRjk0025ZJLLq91RsV0jl5EJHEa9CIiidOgFxFJnAa9iEjiNOhFRBKnQS8ikjgNehGR\nxGnQi4gkToNeRCRxJV0Za2Z7AN9y93FmtgtwCfAa0Al83t3/amYXAXsCHfmHjQdWANcCo/Lth7t7\n2yD/GUREZA0GPKI3s1OAOcCwfNNFwJfdfRxwE9C9+MNuwH7uPi7/bwkwCVjo7mOBa4Apg9wvIiID\nKOXUzePAgT1uH+LuD+ZvNwPLzWwI8E5glpktMLOJ+fv3BG7L374V2HcQmkVEZC0MeOrG3W80s216\n3H4BwMzeBxwH7AW8hex0znRgHeA3ZvY/wHBgSf6hHcCIUqJGjtyA5uZ1Sv9T9KG1taWijx8sEToi\nNECMjggNEKNjoIaiGuvhsShKtTrKWr3SzA4GJgMfcfc2M1sHuMjdl+XvnwfsDCwFustbgMV9fb7e\n2tuXlZO1SmtrC21tHQPfscoidERoiNIRoSFKRykNRTTWy2NRLx39faNY60FvZocBRwPj3L37N+WO\nBq4zs13JTgftCVxN9iTsAcB9wP7A/LUuFxGRiqzVoM+P3C8GngFuMjOA37r7WWb2A+Be4FXgGnd/\n2MyeBK42s7vJXoFz6KDWi4jIgEoa9O7+FDAmv7lxP/e5ELiw17ZlwKcq6BMRkQrpgikRkcTpVwmK\n1NjMqXetdrsavwT72HmnrHb7+oNnDvo+JC4d0YuIJE6DXkQkcRr0IiKJ06AXEUmcBr2ISOI06EVE\nEqdBLyKSOA16EZHEadCLiCROg15EJHEa9CIiidOgFxFJnAa9iEjiNOhFRBKnQS8ikjgNehGRxGnQ\ni4gkToNeRCRxGvQiIokr6XfGmtkewLfcfZyZvQO4CugCFgHHuvvrZnYkcDSwEjjP3W8xs/WBa4FR\nQAdwuLu3VeHPISIi/RjwiN7MTgHmAMPyTdOBKe4+FmgCxpvZ5sDxwPuB/YBvmtlQYBKwML/vNcCU\nwf8jiIjImpRy6uZx4MAet3cDfpu/fSuwL7A7sMDdO919CfAYsBOwJ3Bbr/uKiEiBBjx14+43mtk2\nPTY1uXtX/nYHMAIYDizpcZ++tndvG9DIkRvQ3LxOKXftV2trS0UfP1gidERogBgdERpgzR1FNC4Y\nP+HNG99xROEdRe4negNUr6Okc/S9vN7j7RZgMbA0f3tN27u3Dai9fVkZWW9obW2hra2jos8xGCJ0\nRGiI0hGhoZSOCI1QTEeEv5MIDYPV0d83inJedfNHMxuXv70/MB+4DxhrZsPMbASwPdkTtQuAA3rd\nV0REClTOoD8JOMfMfg+sB9zg7i8CF5MN8nnAZHdfDswEdjCzu4GjgHMGJ1tEREpV0qkbd38KGJO/\n/SjwgT7uMxuY3WvbMuBTFVeKiEjZdMGUiEjiNOhFRBKnQS8ikjgNehGRxGnQi4gkToNeRCRxGvQi\nIokrZwkEEVkLx847ZbXb1x88s+r7nDh13mq319+96ruUwHRELyKSOA16EZHEadCLiCROg15EJHEa\n9CIiidOgFxFJnAa9iEjiNOhFRBKnQS8ikjgNehGRxGkJhAY0c+pdq92edOq4mnSI9KavzerQEb2I\nSOJ0RC8NTUeQ0gjKGvRmdgRwRH5zGLAL8F7gFuDP+faZ7n6dmR0JHA2sBM5z91sqCRYRkbVT1qB3\n96uAqwDMbAZwJbAbMN3dp3Xfz8w2B44H3kP2DeFuM7vT3TsryxYRkVJVdI7ezN4D7ODus8gG/UfM\n7HdmdoWZtQC7AwvcvdPdlwCPATtVXC0iIiWr9Bz96cA5+dv3AXPc/X4zmwycBTwILOlx/w5gxECf\ndOTIDWhuXqeisNbWloo+frBE6BiooahGPRal7SfC4wSN9Vik/piXPejNbCPA3P03+aab3X1x99vA\nJcDvgJ7lLcBiBtDevqzcLCB7sNraOir6HIMhQkcpDUU06rEofT+1fpy6Rfi6iNBQlMHo6O8bRSWn\nbvYC/qvH7dvNrPsXlu0D3E92lD/WzIaZ2Qhge2BRBfsUEZG1VMmpGwOe6HF7EnCJmb0KvAgc5e5L\nzexiYD7ZN5XJ7r68gn2KiMhaKnvQu/uFvW4/ALy/j/vNBmaXux8REamMrowVEUmcroxNzLHzTlnt\n9vUHz6xRyZo18hWpC8ZPWH3DO46oSUct1MvXZ2o06CVZGioiGZ26ERFJnAa9iEjiNOhFRBKnc/RS\nFTo/LhKHjuhFRBKnQS8ikjgNehGRxGnQi4gkToNeRCRxetXNIBrolSaNfNl/o5g4dd6btq2/ex93\nlJpZ23+nUP//VnVELyKSOA16EZHEadCLiCROg15EJHEa9CIiidOgFxFJnAa9iEjiNOhFRBJX9gVT\nZvYAsDS/+STwDeAqoAtYBBzr7q+b2ZHA0cBK4Dx3v6WiYhERWStlDXozGwY0ufu4Htt+Dkxx97vM\n7HvAeDP7PXA88B5gGHC3md3p7p2Vp4uISCnKPaLfGdjAzO7IP8fpwG7Ab/P33wp8CHgNWJAP9k4z\newzYCfhDRdUiIlKycgf9MuDbwBzgnWSDvcndu/L3dwAjgOHAkh4f1719jUaO3IDm5nVKjvn0dZNW\nu339wTNpbW0p+eOraU0dRTQuGD/hzRvfcUThHQPtJ0JDkR3RG6BGX58BvzYjdZSr3EH/KPBYPtgf\nNbOXyI7ou7UAi8nO4bf0sX2N2tuXlZn1hra2joo/x2BYU0c9NBa1nyIaSvmmF+HvJEIDxOiI8LVZ\nVEdra0vF++nvG0W5r7qZCEwDMLMtyI7c7zCzcfn79wfmA/cBY81smJmNALYne6JWREQKUu4R/RXA\nVWZ2N9mrbCYCfwdmm9l6wCPADe7+mpldTDb0hwCT3X35IHSLiEiJyhr07r4COLSPd32gj/vOBmaX\nsx8REamcfvGIFGKgJ91EpHp0ZayISOI06EVEEqdBLyKSOJ2jFxGpgYF+Sflg0hG9iEjiGuaIfubU\nu1a7PenUcVXfZxGvNJk4dd5qt9fffdB3IVKW3l+bEPPrsxFeEdYwg17Sp296In3TqRsRkcRp0IuI\nJE6DXkQkcRr0IiKJ05OxMij0RKhIXDqiFxFJnAa9iEjiNOhFRBKnQS8ikjgNehGRxCX5qps3rV0B\nWmdGpEHp36mO6EVEklfWEb2ZrQtcCWwDDAXOA54FbgH+nN9tprtfZ2ZHAkcDK4Hz3P2WSqNFRKR0\n5Z66OQx4yd0/Z2YbAw8C5wLT3X1a953MbHPgeOA9wDDgbjO70907K+wWEZESlTvo5wI35G83kR2t\n7waYmY0nO6o/EdgdWJAP9k4zewzYCfhDRdUiIlKysga9u/8TwMxayAb+FLJTOHPc/X4zmwycRXak\nv6THh3YAIwb6/CNHbkBz8zrlpJWstbWlqp+/XhogRkeEBojREaEBYnREaIDiOqq1n7JfdWNmWwE3\nA5e5+4/MbCN3X5y/+2bgEuB3QM/yFmAxA2hvX1ZuVsna2jqqvo96aIAYHREaIEZHhAaI0RGhAYrr\n6Lmfcn4rXn/fKMp61Y2ZbQbcAXzN3a/MN99uZt0vXNoHuB+4DxhrZsPMbASwPbConH2KiEh5yj2i\nPx0YCZxhZmfk274KfMfMXgVeBI5y96VmdjEwn+ybymR3X15ptIiIlK7cc/QnACf08a7393Hf2cDs\ncvYjItIoqvlLynXBlIhI4upyCQRd0iwiUjod0YuIJE6DXkQkcRr0IiKJ06AXEUmcBr2ISOI06EVE\nEqdBLyKSOA16EZHE1eUFUyIi9aT3RZ5Q7IWeOqIXEUmcBr2ISOI06EVEEqdBLyKSOA16EZHEadCL\niCROg15EJHEa9CIiidOgFxFJnAa9iEjiqr4EgpkNAS4DdgY6gS+5+2PV3q+IiGSKOKL/BDDM3d8L\nnApMK2CfIiKSK2LQ7wncBuDu9wLvKWCfIiKSa+rq6qrqDsxsDnCju9+a334G2M7dV1Z1xyIiAhRz\nRL8UaOm5Tw15EZHiFDHoFwAHAJjZGGBhAfsUEZFcEb945Gbgg2Z2D9AEfKGAfYqISK7q5+hFRKS2\ndMGUiEjiNOhFRBKnQS8ikrginowthJltAowAFrv7Pxq1IUpHhIYoHREaonREaIjSUWRD3T8Za2b/\nDswA1gH+Sfaa/SbgWHe/p1EaonREaIjSEaEhSkeEhigdtWhI4Yj+O8AEd3+2e4OZbQ3MBfZooIYo\nHREaonREaIjSEaEhSkfhDSmco1+35wOWexYo8keVCA1ROiI0ROmI0BClI0JDlI7CG1I4ov+lmf0a\nuANYQvZj0H7ArxqsIUpHhIYoHREaonREaIjSUXhD3Z+jBzCzXclWyWwhW1vnHnd/oNEaonREaIjS\nEaEhSkeEhigdRTekcOoG4HVgKLA+sB7ZkxyN2BClI0JDlI4IDVE6IjRE6Si0oe6P6M3sTLInMG4H\nOnjjx6AH3P2MRmmI0hGhIUpHhIYoHREaonTUpKGrq6uu/xs9evT8PrY1jR49+r8bqSFKR4SGKB0R\nGqJ0RGiI0lGLhhRO3axrZtv02rYN2Y9GjdQQpSNCQ5SOCA1ROiI0ROkovCGFV92cANxsZuuRPakx\nnOyXkE9qsIYoHREaonREaIjSEaEhSkfhDXV/jr6bmbWQPWBL3b2jURuidERoiNIRoSFKR4SGKB2F\nNhR5fqzK572mrOl2ozRE6YjQEKUjQkOUjggNUTqKbEjhHH23BQPcbpSGvvarx6L/243S0Nd+9Vj0\nfzuphpRO3TTUanTROyI0ROmI0BClI0JDlA6tXrkW1rAS3H+6++8bpSFKR4SGKB0RGqJ0RGiI0lGL\nhhReddOQq9EF7ojQEKUjQkOUjggNUTq0emUZGnI1usAdERqidERoiNIRoSFKh1avLENDrkYXuCNC\nQ5SOCA1ROiI0ROnQ6pXlaMTV6CJ3RGiI0hGhIUpHhIYoHVq9sjwNtxpd8I4IDVE6IjRE6YjQEKVD\nq1eujYZdjS5oR4SGKB0RGqJ0RGiI0qHVK8u7uqwhV6OL2hGhIUpHhIYoHREaonRo9cryNORqdIE7\nIjRE6YjQEKUjQkOUDq1eWYaGXI0ucEeEhigdERqidERoiNKh1SvL1XCr0QXviNAQpSNCQ5SOCA1R\nOrR6ZXnnvRpqNbroHREaonREaIjSEaEhSodWryxPQ61GN4AIHREa+tqvHov+bzdKQ1/7TfqxSOnU\nTUOtRhe9I0JDlI4IDVE6IjRE6dDqlWuhUVeji9oRoSFKR4SGKB0RGqJ0aPXK8jTkanSBOyI0ROmI\n0BClI0JDlA6tXlmGhlyNLnBHhIYoHREaonREaIjSodUry9CQq9EF7ojQEKUjQkOUjggNUTq0emU5\nGnE1usgdERqidERoiNIRoSFKh1avLE/DrUYXvCNCQ5SOCA1ROiI0ROnQ6pVro2FXowvaEaEhSkeE\nhigdERqidGj1yvKuLmvI1eiidkRoiNIRoSFKR4SGKB1avbI8DbkaXeCOCA1ROiI0ROmI0BClQ6tX\nlqG/leCOabCGKB0RGqJ0RGiI0hGhIUpH4Q11f46+W8OtRhe8I0JDlI4IDVE6IjRE6SiyIZlBLyIi\nfUvhHL2IiKyBBr2ISOI06EVEElf3r7oxs4eATXttbgK63H2LRmmI0hGhIUpHhIYoHREaonTUoqHu\nBz1wIPBjYC93f6WBG6J0RGiI0hGhIUpHhIYoHYU31P2pG3d/DLgI2LuRG6J0RGiI0hGhIUpHhIYo\nHbVo0MsrRUQSl8KpG8xsZ7JfyfUX4FSyS4mnufuyRmqI0hGhIUpHhIYoHREaonQU3VD3g97Mvkm2\nEtwI4AXgj2Qrws0BDm2UhigdERqidERoiNIRoSFKR00ailw5rkorwd2T/3/D0aNHP9lj+28aqSFK\nR4SGKB0RGqJ0RGiI0lGLhrp/MhYYYmZbu/s/gUMAzGwjYFiDNUTpiNAQpSNCQ5SOCA1ROgpvSGHQ\nnwzcaGZD3P2/820/B85vsIYoHREaonREaIjSEaEhSkfxDUX+2FTQj0VvVUOcjggNUToiNETpiNAQ\npaOIhhSO6Hv7Ya0DiNEAMToiNECMjggNEKMjQgPE6Kh6Q4qDvqnWAcRogBgdERogRkeEBojREaEB\nYnRUvSHFQX9DrQOI0QAxOiI0QIyOCA0QoyNCA8ToqHpD3V8Za2bDgC8By4Fr3H1Fvv1od7+8URqi\ndERoiNIRoSFKR4SGKB21aEjhiP4aYAtgNHC3mY3Mtx/cYA1ROiI0ROmI0BClI0JDlI7CG+r+ylhg\nlLt/GsDMDgR+bmb7Uuy5twgNUToiNETpiNAQpSNCQ5SOwhtSOKJfz8w2BXD3m4AbyZ7FHtpgDVE6\nIjRE6YjQEKUjQkOUjsIbUhj0ZwDzzWwzAHf/LtnaEbs1WEOUjggNUToiNETpiNAQpaP4hlpfLFDF\nixBGqSFOR4SGKB0RGqJ0RGiI0lHNhrp/1Y2IiKxZ3T8Za2Y/pJ8nMdy9qGVHa94QpSNCQ5SOCA1R\nOiI0ROmoRUPdD3qyiw2+AUxq8IYoHREaonREaIjSEaEhSkfhDUmcujGz7wIL3H1uIzdE6YjQEKUj\nQkOUjggNUTqKbkhi0IuISP9SeHnlaszsC2rIROiI0AAxOiI0QIyOCA0Qo6OIhuQGPfC5WgcQowFi\ndERogBgdERogRkeEBojRUfWGFAd9Qyw7WqIIHREaIEZHhAaI0RGhAWJ0aJniMnyx1gFkK9NFEOGx\niNAAMTqifF1E6Ijw9wExHouqN9T9k7FmdgDwDuAXwFXAO4FngGPc/cGCGp4HPufu/1XE/tbQMQo4\nBVgBXAHcBLQAX3L3eQU1bAp8E9gTWB94FlgAnJf/MuRCmNkmZJea7wsMBxYD84Fz3P1vRXVEYGZj\ngBnAK8Cp7n53vv1md/9kQQ1vBb4GtAM3k31trgS+4O6/L6Ih71iv16Y7gA8CTd3LBRfQ8A13n2xm\no4FrgbeS/Ts5wt0frcY+U3gd/dnAJ4BZwBnu/jsz2xn4HvDeghr+CpxoZp8nGyRPFLTf3q4Fricb\nbPOB/YA2skWTChn0wGzgUuDLwHhga+Bxsm88RS4FezXwA+BMoIPsG94BwI/Ihn/VRbg4JzcN+Ayw\nLvADMzvV3e8ANiqw4Wqyhbu2Bu4E9gJezrd9oMCOv5GtA7+M7O9mc+BRoAvYrqCG7rk0HfiKuy/I\nZ9YMsm86gy6FQd/p7s+bGe7+OwB3/18zK7Kh3d0/li85+hMzawduBZ5w958X2DHM3ecAmNkX3X1h\n/vbKAhs26fGTzXVmdpe7jzOzkwpsABju7tf1uL2U7O/m2AIbIlycA/Bq95Fi/hPwnWZ2KNlwK8pQ\nd786bxjn7p6//XqBDQBjgG8Dp7n7QjP7jbvvXXBDtw3cfQGsmlnrVmtHKQz6+83sUuAeM7sCuIXs\nyO1PBTY0waolR28ys+3Jjho/CBQ56P9pZlPJjuiHmtmRwBKgsFMmQIeZnUr2je7jwBP5qYOi/c3M\nzgRuI3sMuo/oXygqwN1vNrMPkK0/XsuLhJaa2fHA5e7+Yj7kr6fYpXnbzWwK8A133wfAzA4jO7ou\njLv/n5lwpHJyAAADgElEQVR9BphlZrdQ7De7bqPN7GfACDObQDYjTqSK/05TeDL2q8AfgB2BrYBP\nAw9S7FHUbT1vuPsj7n6Ju3+5wAaAQ4DngbnAgcCHyb7ZFPmE02HAJsD5ZIPkeGBj4PMFNnR3dJCd\nF74UOI3sH9LhRUa4+4m1vhKU7LHYmHyw5z/pTQAeKrDhUKDD3XsO1rdR8N8HgLt3uPtnyJ7b26oG\n+38b2dz6Ftlp32ayfzOHVWufdf9kLED+I8/OvPGk26Kinljp1bATMKJWDVE6Ivx9iMgb6n7Qm9lH\nyF7l8WeyI7YW4F+B0939pwU1HABMrWVD3hHhsah5Q97R+9UVqxT46oqaN0TpiNAQpaMWDSmco58M\n7OnuS7s3mNkI4NdAUYNlSoAGiPFYRGgAWAhsBvyD7DmUrh7/L+rVFREaonREaIjSUXhDCoN+XbKX\nSvX0CsU+yRKhIUpHhAbIXsd/O7CPu7cXvO9IDVE6IjRE6Si8IYVBPwt4wMzuJnt1xXCyB/LiBmuI\n0hGhAXdvy1/9829ATS5ki9AQpSNCQ5SOWjTU/Tl6gPyX7O5Odj54KfAHd/9rozVE6YjQICJvSOGI\nHrKLID7IG6/yWN/Mbuj1Uq5GaIjSEaEBMxtPdj1D9yuQ5gOFdkRoiNIRoSFKR9ENdT/ozWwG2fUA\nt/LGpe77k13+X8jrxyM0ROmI0BClI0JDlI4IDVE6atLQ1dVV1/+NHj36t/1sX9BIDVE6IjRE6YjQ\nEKUjQkOUjlo0pHBl7BAzG9tzg5ntBbzaYA1ROiI0ROmI0BClI0JDlI7CG+r+1A1wBDDdzH5M9lrU\n14A/Akc2WEOUjggNUToiNETpiNAQpaP4hiJ/bCr4R7ShaojTEaEhSkeEhigdERqidFSzoe5P3ZjZ\nx8zsaTN7zMx6rnd+ayM1ROmI0BClI0JDlI4IDVE6atFQ94Oe7JL7XYA9gKPNrHs1vCJ/F2SEhigd\nERqidERoiNIRoSFKR+ENKZyjX9F9GXH+2tR5ZvYMxV5yH6EhSkeEhigdERqidERoiNJReEMKR/RP\nmdl0M3uLu3eQrcM+g2zFxEZqiNIRoSFKR4SGKB0RGqJ0FN6QwqCfSPYLFLoA3P1ZYG+y36DTSA1R\nOiI0ROmI0BClI0JDlI7CG5JY60ZERPqXwhG9iIisgQa9iEjiNOhFRBKnQS8ikjgNehGRxP0/ZHrJ\nU2cX0CkAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df.plot(kind='bar')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 绘制柱状图(统计学中一般称为复式柱状图)" + ] + }, + { + "cell_type": "code", + "execution_count": 187, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 187, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAcEAAAD3CAYAAABl7+/sAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3X2cVNWd5/FPIwib2CCZNPJKMCHK+ktmFifojDARtAVW\nIUZRoyuLD8kkY5SByWjYiURgW0gbHAcdOlEwERkSoytqBhUTRhxRlvjErJoZje43gtkxuMQHFgUU\nmqfeP+5pLMuqLtDuqi7r+369fNn33HvO+d3bRf36nHurTl1bWxtmZma1qEelAzAzM6sUJ0EzM6tZ\nToJmZlaznATNzKxmOQmamVnN6lnpAOzA7N69p23z5rcrHcZ+69//I1RTvFB9MTverlVt8UL1xVyO\neBsa6usKlXskWGV69jyo0iEckGqLF6ovZsfbtaotXqi+mCsZr5OgmZnVLCdBMzOrWU6CZmZWs5wE\nzcysZvnp0CozZ9rySoewXyZPb6x0CGZmJXkkaGZmNctJ0MzMalaH06ER0QtYDAwGegPNku6NiCHA\nEqANeBaYImlvqtMAPAIcLWlHRNQBG4AXUrOPSfpOkf7OBM6RNCltjwGagV3Aq8CFkt7OqzMKmJdi\nWS3p8px9Q4BlkoYW6GsE0ALsBlZKmp3Km4BTU/mlktZWsl6+MeuWdLS7oo5atKTSIZjVrK9dvapT\n21s8fXSnttddlRoJng9skjQKGAdcn8qvA2am8jpgAkBEnAKsBAbmtHEk8JSkxvRfsQTYAszNi2kB\ncIakE8iS6F8UqDofmChpBHBcRAxL7V0A3A40FDm3G4FJwEhgeEQMi4hjgBOB4cBE4IZuUM/MrNv5\nxS+Ws3DhDyodxgdW6sGYO4G70s91ZKMVgGOB1ennFcDJwDJgLzAWeDKnjWOBT0bEQ8B24DJJKtDX\no8DdwMU5ZY2SXsmJdUeBesMl7Y6IQ4B+wLZUvpkswazPrxARfYHektan7ftT3K1ko7Q24KWI6JlG\ntkPJktf8ctST9FqB8wSgZdKAYrsqb9W3Kx3BPnecu/AD1W9oqO+kSMrD8Xataou3M5Q65/r6Pnzk\nIwd32rWp1DXuMAlK2gYQEfVkyXBm2lWX3rgBtpIlHyQ9kI7PbWYjMFfSnRExEvgp8KcF+loaEY15\nZRtTe2cBJwGzCtTbnaYabweeI5t6RdJ9BWJp1xfYkrO9FTiCLMluyivvJ2kVsCoiBpWjHlA0Cdr+\nee21re+7bkND/QeqX26Ot2tVW7ydpdQ5b926g3/5lyeZNOl83nrrLb72tW/Qq1dPfvSjhfTu3Zu+\nffvxne/8d2677Sd8/OMNfPnL/4UtW7Zw6aV/yeLFP31XW+W4xsWSbMmPSETE4WSjvAWSbkvFe3MO\nqQfe6KCJ/0UaQUr6ZUR8IiL+I3BT2n+LpJs76P8y4GxgXLrHODVtA5wn6WVJjwODI6IZmA40lTit\nLSnu/HPYWaS8UvXMzLqtPn368Hd/18Ibb2zmG9/4KgALFiyioWEAd9zxP/jxj2/mzDPP5sorZ/Dl\nL/8XHnjgnzj55HGVDTpPqQdjDiO7xzdV0oM5u56OiEZJDwPjgYc6aKaJbLRzTUT8MfA7SS8AjaWC\ni4gZZNOpYyVtB5B0PeneZETURcQa4HRJm8lGUn1KtStpS0TsjIgjgReBU4DZZMn6moiYBwwCekh6\nvVL1Ctm+tvNfQF15A7xW/4o2qwVHH/156urq6N//Y/Tunb31NjRkt2w+//lh/PCHC/jkJwfxkY98\nlN/+9kUeeOCfuPrq6yoZ8nuUGgleAfQHZkVE+1TkeGAacFNEHAw8zzv3DQu5GvhpRLQ/AfnV/Qks\nJeAm4ClgRZrWXCpp380eSW0pgayIiFayqddCD88UcglwK3AQ2X25J1K/a4DHyB7QmZLKRgMjJc0p\nRz0zs2rw/PPPAbBp0+vs3NlKW1sbr7/+Oh//+Mf51a+e4vDDPwXA6aefwZIl2Qjx0EMPrWTI71HX\n1tZW+ijrNk6bdk+n/8I8Eny3aovZ8XataosXyhPzL36xnH/+55Xs3r2L7dvf5uKLp9LW1saiRTfS\no0cd9fV9ueKKKzn00EPZtWsXZ545nlmzvsvw4X9WkXiLrSfor02rMsuvnVB1/yDN7MPni188jS9+\n8bT3lP/pnw5/T9mePXsYOPATBfdVmr8xxszMuswzz/wr3/jGVzjvvAvp0aP7pRyPBM3MrMsMHfrH\n/OQnSysdRlHdLy2bmZmViZOgmZnVLCdBMzOrWb4naGb2ITClk7+794bR13Rqe92VR4JmZvaBFVtV\noqnpO+zatYurrrqSxx9/9F37WltbOfvs937Mopw8EjQzsy4ze/bcSofQISdBMzM7YK2tO/je92bz\n+9//nl27dnHSSWP49a+f4bLLpvDGG5s544yzmTDhLM4++zRuvfWdb9Z8++23mTNnJlu3buWTnxxU\nwTPIeDrUzMwO2N13/4yBAz/BD3/4D8ye/T169+5Nz549ue666/ne9+Zx553/o2i9z3zmSG644SYm\nTPhymaN+L48Eq8ycacsrHYLth8nTGysdglmXeumlf2fEiC8AcPjhn+KZZ+o56qjPUldXx8c+9gfs\n2FFoDXT43e9e4gtfOB6AP/qj/0TPnpVNQx4JmpnZAfv0pz+zbxWJl1/ewA9/eAN1dQW/o/pdPvOZ\nz/Dss88A8Jvf/G92797dpXGWUmo9wV7AYmAw0BtolnRvRAwBlgBtwLPAFEl7U50G4BHgaEk7ctr6\nLPAEcFhueV5/ZwLnSJqUtscAzcAu4FXgQklv59UZBcxLsayWdHnOviHAMklDC/Q1AmghW95ppaTZ\nqbwJaF/26VJJaytZL9+YdUs62l3Tjlq0pFPaqcZVA8xyP9JQjtfwhAlnMXfuHKZO/QZ79uzh3HPP\n4803S68JPmHCl2lubmLy5K/z6U8PplevXl0aZymlxqHnA5skXRARHwN+BdwLXAfMlPRwRNwITACW\nRcQpZOsHDsxtJCL6AtcCrcU6iogWssVmf5VTvAA4QdIrETGXbK3A7+dVnQ+cLem3EfFQRAyT9HRE\nXAD8NdBQpMsbgS+TLXL784gYBtQBJwLDgcOBnwF/WuF6ZmbdTu/evbnyyquK7rvrruzWTfv/Z8y4\nct/+73736i6Pb3+VSoJ38s6CuXVkoxXIVntfnX5eAZwMLAP2AmOBJ9sbiIg64EdkC/Te00FfjwJ3\nAxfnlDVKeiUn1kIjyOGSdkfEIUA/YFsq30yWYNbnV0hJubek9Wn7/hR3K9korQ14KSJ6ppHtUGAk\nWcLt8nqSXuvgOpmZWSfpMAlK2gYQEfVkyXBm2lWX3rgBtpIlHyQ9kI7PbaYJ+Lmkf80rz+9raUQ0\n5pVtTO2dBZwEzCpQb3eaarwdeA7YkMrvKxBLu77AlpztrcARZEl2U155P0mrgFURMagc9YCiSbBl\n0oBiu6yTvzHjg7jj3IVl7a+hob6s/X1QjrfrVVvMlYq35GM5EXE42ShvgaTbUvHenEPqgY4mgs8H\nNkTE18mmSVdGxNeARWn/LZJu7qD/y4CzgXGSdkTE1LQNcJ6klyU9DgyOiGZgOlni7ciWFHf+Oews\nUl6pelalynlPsdruYTrerldtMZdpZfmC5aUejDkMWAlMlfRgzq6nI6JR0sPAeOChYm1IGpLT3v8B\nTk4PxjSWCjoiZpBNvY6VtD21dz1wfdpfFxFrgNMlbSYbSfUp1a6kLRGxMyKOJLtHdwowm2y695qI\nmAcMAnpIer1S9czMrGuVGgleAfQHZkVE+1TkeGAacFNEHAw8zzv3DTtNSsBNwFPAijStuVTSvnkm\nSW0pgayIiFZgI9nDM/vjEuBW4CCy+3JPpH7XAI+RfXxkSiobDYyUNKcc9Tqyfe24/Ty96rF4+uhK\nh/Au1fZXtJm9f3VtbW2lj7Ju47Rp93zofmFOgh+M4+1a1RLvb/7iq53aXmd95Gh/lGk6tOCHGP2N\nMVVm+bUTquIfZLtqeQMxsw/mF79Yzr//+/9h8uS/eld5U9N3mDlzDtdccxVjxpy871tmIFtF4rzz\nzmb16ofLHO07nATNzKzLeBUJMzP70OnsVSSmTv0G/ft/jC1btvB3fzefa6+9mg0bfsfevXu56KLJ\nHHPMn/CVr0zk858/hvXr1wFw9dXXccghh3yg8/B3h5qZ2QHrilUkxo49hZaWBfz85/fSr9+h3HDD\nTVx99bVcd132lXBvvfUWY8eewvXX/4iGhgE8/vgjH/g8PBI0M7MD1hWrSHzqU58GYP36dfzbvz3N\nc889C8CePbt5443sI9RHHZV9AcqAAYexc+fOD3weHgmamdkB64pVJHr06JHaHrxvxHfttd/npJPG\n0rdv33RU6T4OhEeCZmYfArkfaaj2VSQmTDiLv/3bZqZO/QZvvbWNM888Z1+C7Gz+nGD1aaumjxxU\n40ckqi1mx9u1qi1eqL6YK/k5QU+HmplZzXISNDOzmuUkaGZmNcsPxlSZOdOWVzoEq0KTpzdWOgSz\nbskjQTMzq1keCZqZfQgsvPrhTm2vVmYPSi2q2wtYDAwGegPNku6NiCHAEqANeBaYImlvqtMAPAIc\nnVaC/yhwG9m6hDuBr0h6uUh/ZwLnSJqUtscAzcAu4FXgQklv59UZBcxLsayWdHnOviHAMklDC/Q1\nAmghW9h2paTZqbwJODWVXyppbSXr5RuzbklHu60THH/Pz/x4udn70NJyLeeeex4DBw7cV7Zx4/+l\nqekKfvSjJZULrAOlpkPPBzZJGgWMI63oDlwHzEzldcAEgIg4hWwl+oE5bVwEPCnpBOCnwLcLdRQR\nLcDcvJgWAGekui9QeMHc+cBESSOA4yJiWGrvAuB2oKHIud0ITAJGAsMjYlhEHAOcCAwHJgI3dIN6\nZmZV4a//etq7EmA1KDUdeifvrBpfRzZaATgWWJ1+XgGcDCwD9gJjgSfbG5A0PyIOSpufAop9pcCj\nwN3AxTlljZJeyYm10JfRDZe0OyIOAfoB21L5ZrIEsz6/QkT0BXpLWp+2709xt5KN0tqAlyKiZxrZ\nDiVLXvPLUU/Sa0WukZlZt9DauoPvfreJTZteY8CAw/jVr57m8MM/xd/8zRX88z/fz7PP/hvbt29n\n+vRZlQ61Qx0mQUnbACKiniwZzky76tIbN8BWsuSDpAfS8fnt7ImIVWRJ4T8X6WtpRDTmlW1M7Z0F\nnAS852qmBDiCbNT3HLAhld9XKJakL7AlZ3srcARZkt2UV95P0ipgVUQMKkc9oGgSbJk0oNgu6yQt\nSydXOoR97jh34X4d19BQ38WRdC7H2/2VOucf//gfOfLIwfzwhwtYv349X/rSlzjyyCPo3/8jfPSj\nvfnsZ49i5syZbNiwgV69DirZXqWucckHYyLicLJR3gJJt6XivTmH1FN8dLePpNER8Vng52nadFHa\ndYukmzvo/zLgbGBcusc4NW0DnCfpZUmPA4MjohmYDjSVCGdLijv/HHYWKa9UPatx+3Ovr9ruCTre\n6lDqnH/96//N8OFf4LXXttK37wAOPbQ/O3fuZvPmt3nrrVYaGj7Ba69t5f/9v7fYtWtPh+2V6WvT\nCpaXejDmMLJ7fFMlPZiz6+mIaJT0MDAeeKiDNr4DbJB0C9lU5R5J64DGUkFHxAyyqdexkrYDSLqe\ndG8yIuoiYg1wuqTNZCOpPqXalbQlInZGxJHAi8ApwGyy6d5rImIeMAjoIen1StUrZPvacaVOr2Yt\nnj66U9qp1Tc9swNxxBFH8uyz/8YJJzTy8ssb0pdnf3rf/h49One1h65SaiR4BdlTnbMion0qcjww\nDbgpIg4Gnued+4aFLAZ+HBFfBw4C/nx/AksJuAl4CliRpjWXSto3PySpLSWQFRHRCmyk8MMzhVwC\n3JpiWinpidTvGuAxsgd0pqSy0cBISXPKUc/M7EDlfqShHH/IfelLE7jqqtlMmXIRAwcO5OCDD+7S\n/rqKV5GoMqdNu8e/sCJqdSToeLtWtcUL5Yn5mWf+le3bt3PccSP43e9eYtq0v+KOO+55X21VchUJ\nf1i+yiy/dkJV/YOsxjcQMyvtE5/4JFdeOYN/+IcfsXv3br71rctLV+qGnATNzOyA/cEffJwf/OCH\nlQ7jA/N3h5qZWc1yEjQzs5rlJGhmZjXLSdDMzGqWk6CZmdUsJ0EzM6tZToJmZlaznATNzKxmOQma\nmVnN8jfGVJk505ZXOgQzs7LL/YLwzuSRoJmZ1SwnQTMzq1mlFtXtRbYe4GCgN9As6d6IGAIsAdqA\nZ4EpkvamOg3AI8DRaSX4fsBPgb7AwcC3JD1WpL8zgXMkTUrbY4BmYBfwKnChpLfz6owC5qVYVku6\nPGffEGCZpKEF+hoBtJAtbLtS0uxU3gScmsovlbS2kvXyjVm3pKPdZt3e8ff8rKpWFqnGlVCqLeZK\nxltqJHg+sEnSKGAcaUV34DpgZiqvAyYARMQpZCvRD8xp41vAg5JOBL4K3FCoo4hoAebmxbQAOEPS\nCcALFF4wdz4wUdII4LiIGJbauwC4HWgocm43ApOAkcDwiBgWEccAJwLDgYlFYi13PTMz6yKlHoy5\nk3dWja8jG60AHAusTj+vAE4GlgF7gbHAkzlt/D3QmtPfjiJ9PQrcDVycU9Yo6ZUSdYdL2h0RhwD9\ngG2pfDNZglmfXyEi+gK9Ja1P2/enuFvJRmltwEsR0TONbIeSJa/55agn6bUi14iWSQOK7TKrCi1L\nJ1c6hHe549yFJY9paKgvQySdq9pirlS8HSZBSdsAIqKeLBnOTLvq0hs3wFay5IOkB9LxuW28kcoG\nkk2LXlqkr6UR0ZhXtjHVPQs4CZhVoN7uNNV4O/AcsCGV35cfS46+wJac7a3AEWRJdlNeeT9Jq4BV\nETGoHPWAoknQzDpXqWm4aptahOqLuUwryxcsL/kRiYg4nGyUt0DSbal4b84h9cAbJdoYSpak/puk\n1ele3aK0+xZJN3dQ9zLgbGBcusc4NW0DnCfpZUmPA4MjohmYDjSVOK0tKe78c9hZpLxS9czMrAuV\nejDmMLJ7fFMlPZiz6+mIaJT0MDAeeKiDNv6QbFr1XEn/CiBpHdBYKriImEE29TpW0vZU93rSvcmI\nqIuINcDpkjaTjaT6lGpX0paI2BkRRwIvAqcAs8mme6+JiHnAIKCHpNcrVa+Q7WvHlTo9sy6xePro\nTmmn2kYp9uFWaiR4BdAfmBUR7VOR44FpwE0RcTDwPO/cNyxkLlliaklTk29KmlAqsJSAm4CngBWp\n7lJJ+ybwJbWlBLIiIlqBjRR+eKaQS4BbgYPI7ss9kfpdAzxG9oDOlFQ2GhgpaU456pmZWXnUtbW1\nlT7Kuo3Tpt3jX5hVRK2OBKstXqi+mMt0T7CuULm/Nq3KLL92gl/cXazaYq62eM26E39jjJmZ1Swn\nQTMzq1lOgmZmVrOcBM3MrGY5CZqZWc1yEjQzs5rlJGhmZjXLSdDMzGqWk6CZmdUsJ0EzM6tZ/tq0\nKjNn2vJKh2D2oTJ5emOlQ7AK8kjQzMxqlkeCVWbMuiWVDsHK6KhFS0oeU21foF1t8dqHW6lFdXsB\ni4HBQG+gWdK9aWX4JUAb8CwwRdLeVKcBeAQ4WtKOnLbOBM6RNKmD/t51TESMAZqBXcCrwIWS3s6r\nMwqYl2JZLenynH1DgGWShhboawTQQraw7UpJs1N5E3BqKr9U0tpK1jMzs65Tajr0fGCTpFHAONKK\n7sB1wMxUXgdMAIiIU8hWoh+Y20hEtJAtrlu0vyLHLADOkHQC8AKFF8ydD0yUNAI4LiKGpfYuAG4H\nGop0eSMwCRgJDI+IYRFxDHAiMByYCNzQDeqZmVkXKTUdeifvrBpfRzZaATgWWJ1+XgGcDCwD9gJj\ngSfz2nkUuBu4uIO+Ch3TKOmVnFh3vKcWDJe0OyIOAfoB21L5ZrIEsz6/QkT0BXpLWp+2709xt5KN\n0tqAlyKiZxrZDiVLXvPLUU/Sa8UuUsukAcV22YfRqm9XOoJ97jh3Yae11dBQ32ltlUO1xQvVF3Ol\n4u0wCUraBhAR9WTJcGbaVZfeuAG2kiUfJD2Qjs9vZ2lENJbo6z3HSNqY2jsLOAmYVaDe7jTVeDvw\nHLAhld9XKJakL7AlZ3srcARZkt2UV95P0ipgVUQMKkc9oGgSNKuUzrqPV233BKstXqi+mMu0snzB\n8pIPxkTE4WSjvAWSbkvFe3MOqQfeOJBg0r26RWnzFkk3d3DsZcDZwDhJOyJiatoGOE/Sy5IeBwZH\nRDMwHWgqEcKWFHf+OewsUl6pemZm1oVKPRhzGNk9vqmSHszZ9XRENEp6GBgPPHQgnUpaBzSWOi4i\nZpBNvY6VtD3VvZ50bzIi6iJiDXC6pM1kI6k++9H/lojYGRFHAi8CpwCzyaZ7r4mIecAgoIek1ytV\nr5Dta8eVOj3rBhZPH122vqrtr36z7qTUSPAKoD8wKyLapyLHA9OAmyLiYOB53rlv2GlSAm4CngJW\npGnNpZL23ZiQ1JYSyIqIaAU2UvjhmUIuAW4FDiK7L/dE6ncN8BjZAzpTUtloYKSkOeWoZ2Zm5VHX\n1tZW+ijrNk6bdo9/YVXAI8HiHG/Xq7aYy3RPsK5QuT8sX2WWXzvBL+4uVo0xm9n7469NMzOzmuUk\naGZmNctJ0MzMapaToJmZ1SwnQTMzq1lOgmZmVrOcBM3MrGY5CZqZWc1yEjQzs5rlJGhmZjXLX5tW\nZeZMW17pEKwKTJ7eWOkQzKqCR4JmZlazSq0n2AtYDAwGegPNku5Ni+IuAdqAZ4EpkvamOg3AI8DR\naRHc/wD8FBhAtt7fVyQVXDk9Is4EzpE0KW2PAZqBXcCrwIWS3s6rMwqYl2JZLenynH1DgGWShhbo\nawTQQram30pJs1N5E3BqKr9U0tpK1ss3Zt2SjnbbB3DUoiVA9X2BdrXFa9adlBoJng9skjQKGEda\nzBa4DpiZyuuACQARcQrZIrwDc9qYDDyTjv0JMLNQRxHRAszNi2kBcIakE4AXKLxW4HxgoqQRwHER\nMSy1dwFwO9BQ5NxuBCYBI4HhETEsIo4BTgSGAxOBG7pBPTMz6yKl7gneyTsL5taRjVYgW+19dfp5\nBXAysAzYC4wFnsxpYyRwTc6xsyjsUeBu4OKcskZJr+TEuqNAveGSdkfEIUA/YFsq30yWYNbnV4iI\nvkBvSevT9v0p7layUVob8FJE9Ewj26HpPOaXo16xkbKZmXWuDpOgpG0AEVFPlgzbR3F16Y0bsinO\nfun4B9Lxuc30Bd7MP7ZAX0sjojGvbGNq7yzgJAok0JQAR5CN+p4DNqTy+wrEkhvTlpztrcARZEl2\nU155P0mrgFURMagc9YCiSbBl0oBiu+yDWvXtSkewzx3nLjyg4xsa6rsokq7heLtetcVcqXhLPh0a\nEYeTjfIWSLotFe/NOaQeeKODJrakY/Ydm+7VLUplt0i6uYP+LwPOBsale4xT0zbAeZJelvQ4MDgi\nmoHpQFOJ08qNKfccdhYpr1Q9q1EHco+v2u4JOt6uV20xl2ll+YLlpR6MOYzsHt9USQ/m7Ho6Ihol\nPQyMBx7qoJlHgC8Ca9OxayStAxpLBR0RM8imXsdK2g4g6XrSvcmIqIuINcDpkjaTjaT6lGpX0paI\n2BkRRwIvAqcAs8mme6+JiHnAIKCHpNcrVc/MzLpWqZHgFUB/YFZEtE9FjgemATdFxMHA87xz37CQ\nhcCPI+KXZCOfSfsTWErATcBTwIo0rblU0r55IkltKYGsiIhWYCOFH54p5BLgVuAgsvtyT6R+1wCP\nkT2gMyWVjQZGSppTjnod2b523H6eXu1YPH10p7ZXbX9Fm9n7V9fW1lb6KOs2Tpt2j39heWo9CTre\nrlVt8UL1xVym6dC6QuX+xpgqs/zaCX5xm5l1En9jjJmZ1SwnQTMzq1lOgmZmVrOcBM3MrGY5CZqZ\nWc1yEjQzs5rlJGhmZjXLSdDMzGqWk6CZmdUsJ0EzM6tZ/tq0KjNn2vJKh2BlNHl6Y6VDMPtQ80jQ\nzMxqlpOgmZnVrFKL6vYCFgODgd5As6R708rwS4A24FlgiqS9EXERcDHZYrHNku6LiI8BPwX6ApuA\niyS9WqS/M4FzJE1K22OAZmAX8CpwoaS38+qMAualWFZLujxn3xBgmaShBfoaAbSkWFdKmp3Km4BT\nU/mlktZWsl6+MeuWdLTbSjhq0ZKSx3jlC7PaUWokeD6wSdIoYBxpRXfgOmBmKq8DJkTEQOCbwPFk\nK6fPjYjeZAvz/lLSSOAHwPcKdRQRLcDcvJgWAGdIOgF4gcIL5s4HJkoaARwXEcNSexcAtwMNRc7t\nRrIFfkcCwyNiWEQcA5wIDAcmAjd0g3pmZtZFSj0YcyfvrBpfRzZaATgWWJ1+XgGcDOwBHpHUCrRG\nxDrgaOAPgRnp2Ed4J5HmexS4m2wk2a5R0is5se4oUG+4pN0RcQjQD9iWyjeTJZj1+RUioi/QW9L6\ntH0/MBZoJRultQEvRUTPiGgAhpIlr/nlqCfptSLXyMzMOlGHSVDSNoCIqCdLhjPTrrr0xg2wlSz5\n9AXezKneXv4r4HTg6fT/jxTpa2lENOaVbUz9nwWcBMwqUG93mmq8HXgO2JDK70t1C3XXF9iSF+sR\nZEl2U/45SFoFrIqIQeWoBxRNgi2TBhTbZftj1bcrHcE+d5y7sNPaamio77S2ysHxdr1qi7lS8Zb8\niEREHA4sAxZIui0V7805pB54g+xNvr5A+Vzg+xHxP4GfA79L9+oWpeNukXRzB/1fBpwNjJO0IyKm\npm2A8yS9LOlxYHBENAPTgaYSp1Us1p1FyitVzz7EOuu+Y7Xdw3S8Xa/aYi5HvMWSbKkHYw4DVgJT\nJT2Ys+vpiGiU9DAwHngIWAtcFRF9yB6i+RzZQzNjgJskPRoRXyabMl0HNJYKOiJmkE29jpW0HUDS\n9aQp1Yioi4g1wOmSNpONpPqUalfSlojYGRFHAi+S3cOcTTbde01EzAMGAT0kvV6peoVsXzuu1Ol9\nKC2ePrpsfVXbG4iZvX+lRoJXAP2BWRHRPhU5HpgG3BQRBwPPA3dJ2hMR3wfWkD3cMiON3AT8JE1L\nvgx8fX8e2aLfAAAQqElEQVQCSwm4CXgKWJHqL5W0bw5JUltKICsiohXYSOGHZwq5BLgVOIjsvtwT\nqd81wGPpHKakstHASElzylHPzMzKo66tra30UdZtnDbtnpr8hXkkWJzj7VrVFi9UX8xlmg6tK1Tu\nr02rMsuvneAXt5lZJ/E3xpiZWc1yEjQzs5rlJGhmZjXLSdDMzGqWk6CZmdUsJ0EzM6tZToJmZlaz\nnATNzKxmOQmamVnNchI0M7Oa5a9NqzJzpi2vdAhWhSZPb6x0CGbdkkeCZmZWs5wEzcysZpVaVLcX\nsBgYTLZQbrOke9PK8EuANrKFc6dI2hsRFwEXky0W2yzpvojoB9wOHAK0AudL+n2R/s4EzpE0KW2P\nAZqBXcCrwIWS3s6rMwqYl2JZLenynH1DgGWShhboawTQkmJdKWl2Km8CTk3ll0paW8l6+casW9LR\nbusEx9/zs6pa+cIrdZi9f6VGgucDmySNAsaRVnQHrgNmpvI6YEJEDAS+CRxPtnL63IjoDXwVeCYd\nuxT4m0IdRUQLMDcvpgXAGZJOAF6g8IK584GJkkYAx0XEsNTeBWTJt6HIud0ITAJGAsMjYlhEHAOc\nCAwHJgI3dIN6ZmbWRUo9GHMncFf6uY5stAJwLLA6/bwCOBnYAzwiqRVojYh1wNHAM8Bn07F9yUZ1\nhTwK3E02kmzXKOmVnFh3FKg3XNLuiDgE6AdsS+WbyRLM+vwKEdEX6C1pfdq+HxhLNlJdKakNeCki\nekZEAzCULHnNL0c9Sa8VuUa0TBpQbJd1kpalkysdwj53nLtwv45raKjv4kg6l+PtetUWc6Xi7TAJ\nStoGEBH1ZMlwZtpVl964AbaSJZ++wJs51dvLXwNOjojngI8Bo4r0tTQiGvPKNqb+zwJOAmYVqLc7\nTTXeDjwHbEjl96W6hbrrC2zJi/UIsiS7Kf8cJK0CVkXEoHLUI7tmZvs1zVlt06GOt+tVW8xlWlm+\nYHnJB2Mi4nDgIeAWSbel4r05h9QDb5C9ydcXKG8CrpH0h2Qjxp9FxJCIeDj99/US/V8GTAPGSdoR\nEVNz6n4SQNLjkgYDTwHTS51TB7EWK69UPTMz60KlHow5DFgJTJX0YM6upyOiUdLDwHiyJLkWuCoi\n+pA9RPM5sodmNvPOCPFVoK+kdUBjqeAiYgbZ1OtYSdsBJF1PujcZEXURsQY4XdJmspFUn1LtStoS\nETsj4kjgRbJ7mLPJpnuviYh5wCCgh6TXK1WvkO1rx5U6vZq1eProTmmn2v6KNrP3r9Q9wSuA/sCs\niGifihxPNjK7KSIOBp4H7pK0JyK+D6whG2HOSCO3WcCiiPhLoBdw0f4ElhJwE9nobkWa1lwqad9N\nEkltKYGsiIhWYCOFH54p5BLgVuAgsvtyT6R+1wCPpXOYkspGAyMlzSlHPTMzK4+6tra20kdZt3Ha\ntHv8CyuiVkeCjrdrVVu8UH0xl+meYF2hcn9tWpVZfu0Ev7jNzDqJvzHGzMxqlpOgmZnVLCdBMzOr\nWU6CZmZWs5wEzcysZjkJmplZzXISNDOzmuUkaGZmNctJ0MzMapaToJmZ1Sx/bVqVmTNteaVDsP0w\neXpjpUMws/3gkaCZmdUsjwSrzJh1SyodQrd11KIlndKOv/TbrHaUWlS3F7AYGEy2UG6zpHsjYgiw\nBGgjWzh3iqS9EXERcDHZYrHNku6LiOlA+0qwhwIDJQ0s0t+ZwDmSJqXtMUAzsItsQd4LJb2dV2cU\nMC/FslrS5Tn7hgDLJA0t0NcIoCXFulLS7FTeBJyayi+VtLaS9czMrOuUmg49H9gkaRRZIrs+lV8H\nzEzldcCEiBgIfBM4nmzl9LkR0VvS1ZIaJTUCG4ALC3UUES3A3LyYFgBnSDoBeIHCC+bOByZKGgEc\nFxHDUnsXALcDDUXO7UZgEjASGB4RwyLiGOBEYDgwEbihG9QzM7MuUmo69E7grvRzHdloBeBYYHX6\neQVwMrAHeERSK9AaEeuAo4F/AYiIs4DNklYW6etR4G6ykWS7Rkmv5MS6o0C94ZJ2R8QhQD9gWyrf\nTJZg1udXiIi+QG9J69P2/cBYoJVslNYGvBQRPSOiARhKlrzml6OepNeKXCNaJg0otstWfbvSEexz\nx7kLy9pfQ0N9Wfv7oBxv16u2mCsVb4dJUNI2gIioJ0uGM9OuuvTGDbCVLPn0Bd7Mqd5e3u47wH/t\noK+lEdGYV7Yx9X8WcBIwq0C93Wmq8XbgObLRJpLuS3ULddcX2JIX6xFkSXZT/jlIWgWsiohB5agH\nFE2CVh3KeU+x2u5hOt6uV20xl2ll+YLlJR+MiYjDgWXAAkm3peK9OYfUA2+QvcnXFygnIv4QeEPS\nurQ9BFiUjrtF0s0d9H8ZcDYwTtKOiJiatgHOk/SypMeBwRHRDEwHmkqcVrFYdxY7hwrVMzOzLlTq\nwZjDgJXAVEkP5ux6OiIaJT0MjAceAtYCV0VEH7KHaD5H9tAMZFN/K9orp2TYWCq4iJhBNvU6VtL2\nVPd60r3JiKiLiDXA6ZI2k42k+pRqV9KWiNgZEUcCL5Ldw5xNNt17TUTMAwYBPSS9Xql6hWxfO66j\n3VVp8fTRlQ7hXartr2gze/9KjQSvAPoDsyKifSpyPDANuCkiDgaeB+6StCcivg+sIXu4ZYak9nt4\nATxwIIGlBNwEPAWsSNOaSyXtu9kiqS0lkBUR0QpspPDDM4VcAtwKHER2X+6J1O8a4LF0DlNS2Whg\npKQ55ahnZmblUdfW1lb6KOs2Tpt2z4fuF+aR4AfjeLtWtcUL1Rdzme4J1hUq94flq8zyayf4xW1m\n1kn8tWlmZlaznATNzKxmOQmamVnNchI0M7Oa5SRoZmY1y0nQzMxqlpOgmZnVLCdBMzOrWU6CZmZW\ns/yNMVVmzrTllQ6h25o8vbHSIZhZlfFI0MzMapaToJmZ1axS6wn2AhYDg8nWCGyWdG9aFHcJ0Ea2\nZuAUSXsj4iLgYrJ18pol3RcRBwHXAX+S2riyfdX3Av2dCZwjaVLaHgM0A7uAV4ELJb2dV2cUMC/F\nslrS5Tn7hgDLJA0t0NcIoCXFulLS7FTeBJyayi+VtLaS9fKNWbeko91V6ahFSyodgpnVqFIjwfOB\nTZJGAeNIi9mSJbWZqbwOmBARA4FvAseTLRo7NyJ6AxcAvSQdD0wAhhTqKCJagLl5MS0AzpB0AvAC\nhdcKnA9MlDQCOC4ihqX2LgBuBxqKnNuNwCRgJDA8IoZFxDHAicBwYCJwQzeoZ2ZmXaTUgzF3Anel\nn+vIRiuQrfa+Ov28AjgZ2AM8IqkVaI2IdcDRZAnx2Yj4eWrjr4r09ShwN9lIsl2jpFdyYt3xnlow\nXNLuiDgE6AdsS+WbyRLM+vwKEdEX6C1pfdq+HxgLtJKN0tqAlyKiZ0Q0AEPJktf8ctST9FqRa2Rm\nZp2owyQoaRtARNSTJcOZaVddeuMG2EqWfPoCb+ZUby//ONno70vACcA/pP/n97U0Ihrzyjam/s8C\nTgJmFai3O0013g48B2xI5feluoVOrS+wJS/WI8iS7Kb8c5C0ClgVEYPKUQ8omgRbJg0otqt6rfp2\npSN4lzvOXUhDQ32lwzggjrdrVVu8UH0xVyrekh+RiIjDgWXAAkm3peK9OYfUA2+QvcnXFyjfBNyX\nkubqiDgq3atblI67RdLNHfR/GXA2ME7SjoiYmrYBzpP0sqTHgcER0QxMB5pKnFaxWHcWKa9UPauQ\naloIuNoWLna8Xa/aYi7TyvIFy0s9GHMYsBKYKunBnF1PR0SjpIeB8cBDwFrgqojoQ/YAzOfIHpr5\nJfBF4GcR8cfAS5LWAY2lgo6IGWRTr2MlbQeQdD3p3mRE1EXEGuB0SZvJRlJ9SrUraUtE7IyII4EX\nyaZsZ5NN914TEfOAQUAPSa9Xqp6ZmXWtUiPBK4D+wKyIaJ+KHA9MA26KiIOB54G7JO2JiO8Da8ge\nbpmRRm43AQsj4nGye4KX7E9gKQE3AU8BK9K05lJJC9uPkdSWEsiKiGgFNlL44ZlCLgFuBQ4iuy/3\nROp3DfBYOocpqWw0MFLSnHLU68j2teP28/S63uLpo0seU21/kZpZbalra2srfZR1G6dNu6fb/MI+\nrEmw2mJ2vF2r2uKF6ou5TNOhdYXK/bVpVWb5tROq6sVtZtad+RtjzMysZjkJmplZzXISNDOzmuUk\naGZmNctJ0MzMapY/ImFmZjXLI0EzM6tZToJmZlaznATNzKxmOQmamVnNchI0M7Oa5SRoZmY1y0nQ\nzMxqlleRqBIR0QNYAPwx0Ar8RVqcuKIiohewGBhMtphyM/A74D7ghXTYQklLI+Ii4GKyxYSbJd1X\n/ogzEfEUsCVt/ha4ClgCtJEtBj1F0t7uEHNEfBX4atrsA3we+DO64TWOiOHA30pqjIgh7Oc1jYj/\nAPwUGEC2OPZXJL1W5ng/D/wA2EP2b+xCSa9ERAswMsUFMAHYWYl4C8Q8jP18HXSTa3w7MDDtGgw8\nLmliJa+xR4LV4wygj6Q/A6YD11Y4nnbnA5skjQLGAdcDxwLXSWpM/y2NiIHAN4HjgVOAuRHRuxIB\nR0QfoC4nvj8HrgNmpvOoAyZ0l5glLWmPFXgyxdTtrnFEfBtYRJao4cCu6WTgmXTsT4CZFYi3Bfir\ndJ3/Ebg8lR8LnJJzrd+sRLxFYj6Q10HFr7Gkien6ngm8AVyWcx4VucZOgtVjJPBPAJIeB/6ksuHs\ncycwK/1cR/aX57HAqRHxPyPi5oioB44DHpHUml7g64CjKxJxNpr+SESsjIhVETEixbw67V8BjKV7\nxUxE/AnwR5J+RPe8xuuBs3K2D+Sa7nt95xxb7ngnSvpV+rknsCPNwPxH4EcR8UhEfC3tr0S8UPga\n7+/roDtc43azgR9I2ljpa+wkWD36Am/mbO+JiIpPZ0vaJmlr+sd3F9lfa2uBv5F0AvAi0MR7498K\n9Ct3vMnbwDyyv5IvAW4lGxm2f4dge2zdKWaAK8jePKAbXmNJPwN25RQdyDXNLS9L3PnxStoIEBFf\nAKYCfw98lGyK9HyymY6/jIijKxFvoZg5sNdBxa8xQEQMAMaQTZVDha+xk2D12ALU52z3kLS7UsHk\niojDgYeAWyTdBiyT9GTavQwYxnvjryebDqmE3wA/ldQm6TfAJuCwnP3tsXWbmCPiUCAkPZSKuvs1\nBtib83Opa5pbXsnrfC5wI3Bquv/0NtAi6W1JW4FVZDMJ3SJeDux10F1iPhu4TdKetF3Ra+wkWD0e\nAb4IkKbvnqlsOJmIOAxYCVwuaXEqvj8ijks/jyG7j7UWGBURfSKiH/A5soclKuFrpHuqEfEJsr84\nV0ZEY9o/HlhD94r5BODBnO3ufo0Bnj6Aa7rv9Z1zbFlFxPlkI8BGSS+m4qOARyLioPQQ2Ejgqe4Q\nb3Igr4PuEvNYsunNdhW9xhWfTrP9tgz4zxHxKNm9tz+vcDztrgD6A7Miov3e4LeAv4+IXcDvgW9I\n2hIR3yd7IfcAZkjaUZGI4WZgSUT8kuzJxa8BrwM3RcTBwPPAXZL2dKOYg2y6q91k4Afd+BoDTGM/\nr2lELAR+nH4nO4FJ5Qw0Ig4Cvg+8BPxjRACsltQUEbcAj5NN6/1E0q8j4reVjDfHfr8OKn2Nc7zr\ntSzp+UpeYy+lZGZmNcvToWZmVrOcBM3MrGY5CZqZWc1yEjQzs5rlJGhmZjXLSdDMzGqWk6CZmdWs\n/w/2F5GoCKIVigAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df.plot(kind='barh')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 绘制条形图" + ] + }, + { + "cell_type": "code", + "execution_count": 188, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 188, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\nQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df.plot(kind = 'area')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 绘制(面积)堆积图" + ] + }, + { + "cell_type": "code", + "execution_count": 189, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 189, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df.plot(kind='box')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 绘制箱型图" + ] + }, + { + "cell_type": "code", + "execution_count": 190, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "D:\\Anaconda\\lib\\site-packages\\seaborn\\categorical.py:2171: UserWarning: The boxplot API has been changed. Attempting to adjust your arguments for the new API (which might not work). Please update your code. See the version 0.6 release notes for more info.\n", + " warnings.warn(msg, UserWarning)\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 190, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\nrkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "sns.boxplot(df)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用seaborn绘制箱型图" + ] + }, + { + "cell_type": "code", + "execution_count": 191, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 191, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\ngg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df.plot(kind='scatter', x='boy',y='girl')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 当plot()函数kind为scatter时,可绘制散点图\n", + "- 散点图展现的是2组数据(2个变量)之间的关系\n", + "- 可见当前`boy`与`girl`两组数据之间是一种线性关系" + ] + }, + { + "cell_type": "code", + "execution_count": 192, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 192, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df.plot(kind='scatter', x='boy',y='girl',s=df['child'].values)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 对散点图,如果设置s参数,将一组list类型的数据传入,代表对应点的大小,则绘制出气泡图\n", + "- 气泡图展示的是三组数据(三个变量)之间的关系。上图可以解释为:当男孩数量增加时,女孩增加,同时小孩儿的数量增加。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2. DataFrame汇总与描述统计" + ] + }, + { + "cell_type": "code", + "execution_count": 193, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "boy 3960\n", + "child 6960\n", + "children 4960\n", + "girl 7920\n", + "dtype: int64" + ] + }, + "execution_count": 193, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.sum()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- Series对象的各类求值及描述统计函数,DataFrame对象均可以使用\n", + "- 默认参数是axis=0,表示以行方向为数据轴(基准),取每列做为一个Series对象对其进行统计" + ] + }, + { + "cell_type": "code", + "execution_count": 194, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "2006-12-31 1400\n", + "2007-12-31 1900\n", + "2008-12-31 2400\n", + "2009-12-31 2150\n", + "2010-12-31 2350\n", + "2011-12-31 3400\n", + "2012-12-31 4900\n", + "2013-12-31 2400\n", + "2014-12-31 1900\n", + "2015-12-31 1000\n", + "Freq: A-DEC, dtype: int64" + ] + }, + "execution_count": 194, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.sum(axis=1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 参数如果指定axis=1,表示以列方向为数据轴(基准),取每行做为一个Series对象对其进行统计" + ] + }, + { + "cell_type": "code", + "execution_count": 195, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "boy 120\n", + "child 420\n", + "children 220\n", + "girl 240\n", + "dtype: int32" + ] + }, + "execution_count": 195, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.min()" + ] + }, + { + "cell_type": "code", + "execution_count": 196, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "boy 396.0\n", + "child 696.0\n", + "children 496.0\n", + "girl 792.0\n", + "dtype: float64" + ] + }, + "execution_count": 196, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.mean()" + ] + }, + { + "cell_type": "code", + "execution_count": 197, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "boy 47871.111111\n", + "child 47871.111111\n", + "children 47871.111111\n", + "girl 191484.444444\n", + "dtype: float64" + ] + }, + "execution_count": 197, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.var()" + ] + }, + { + "cell_type": "code", + "execution_count": 198, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "boy 218.794678\n", + "child 218.794678\n", + "children 218.794678\n", + "girl 437.589356\n", + "dtype: float64" + ] + }, + "execution_count": 198, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.std()" + ] + }, + { + "cell_type": "code", + "execution_count": 199, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "boy 0.552512\n", + "child 0.314360\n", + "children 0.441118\n", + "girl 0.552512\n", + "dtype: float64" + ] + }, + "execution_count": 199, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.std()/df.mean()" + ] + }, + { + "cell_type": "code", + "execution_count": 200, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "boy 370.0\n", + "child 670.0\n", + "children 470.0\n", + "girl 740.0\n", + "dtype: float64" + ] + }, + "execution_count": 200, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.median()" + ] + }, + { + "cell_type": "code", + "execution_count": 201, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      boychildchildrengirl
      2006-12-31200500300400
      2007-12-3150011007001000
      2008-12-31900180012001800
      2009-12-311250245016502500
      2010-12-311640314021403280
      2011-12-312240404028404480
      2012-12-313140524038406280
      2013-12-313540594043407080
      2014-12-313840654047407680
      2015-12-313960696049607920
      \n", + "
      " + ], + "text/plain": [ + " boy child children girl\n", + "2006-12-31 200 500 300 400\n", + "2007-12-31 500 1100 700 1000\n", + "2008-12-31 900 1800 1200 1800\n", + "2009-12-31 1250 2450 1650 2500\n", + "2010-12-31 1640 3140 2140 3280\n", + "2011-12-31 2240 4040 2840 4480\n", + "2012-12-31 3140 5240 3840 6280\n", + "2013-12-31 3540 5940 4340 7080\n", + "2014-12-31 3840 6540 4740 7680\n", + "2015-12-31 3960 6960 4960 7920" + ] + }, + "execution_count": 201, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.cumsum()" + ] + }, + { + "cell_type": "code", + "execution_count": 202, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "boy 2.680685\n", + "child 2.680685\n", + "children 2.680685\n", + "girl 2.680685\n", + "dtype: float64" + ] + }, + "execution_count": 202, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.kurt()" + ] + }, + { + "cell_type": "code", + "execution_count": 203, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "boy 1.406834\n", + "child 1.406834\n", + "children 1.406834\n", + "girl 1.406834\n", + "dtype: float64" + ] + }, + "execution_count": 203, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.skew()" + ] + }, + { + "cell_type": "code", + "execution_count": 204, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      boychildchildrengirl
      count10.00000010.00000010.00000010.000000
      mean396.000000696.000000496.000000792.000000
      std218.794678218.794678218.794678437.589356
      min120.000000420.000000220.000000240.000000
      25%300.000000600.000000400.000000600.000000
      50%370.000000670.000000470.000000740.000000
      75%400.000000700.000000500.000000800.000000
      max900.0000001200.0000001000.0000001800.000000
      \n", + "
      " + ], + "text/plain": [ + " boy child children girl\n", + "count 10.000000 10.000000 10.000000 10.000000\n", + "mean 396.000000 696.000000 496.000000 792.000000\n", + "std 218.794678 218.794678 218.794678 437.589356\n", + "min 120.000000 420.000000 220.000000 240.000000\n", + "25% 300.000000 600.000000 400.000000 600.000000\n", + "50% 370.000000 670.000000 470.000000 740.000000\n", + "75% 400.000000 700.000000 500.000000 800.000000\n", + "max 900.000000 1200.000000 1000.000000 1800.000000" + ] + }, + "execution_count": 204, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.describe()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3. 查看DataFrame数据" + ] + }, + { + "cell_type": "code", + "execution_count": 205, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      boychildchildrengirl
      2006-12-31200500300400
      2007-12-31300600400600
      2008-12-31400700500800
      2009-12-31350650450700
      2010-12-31390690490780
      \n", + "
      " + ], + "text/plain": [ + " boy child children girl\n", + "2006-12-31 200 500 300 400\n", + "2007-12-31 300 600 400 600\n", + "2008-12-31 400 700 500 800\n", + "2009-12-31 350 650 450 700\n", + "2010-12-31 390 690 490 780" + ] + }, + "execution_count": 205, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 206, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      boychildchildrengirl
      2012-12-31900120010001800
      2013-12-31400700500800
      2014-12-31300600400600
      2015-12-31120420220240
      \n", + "
      " + ], + "text/plain": [ + " boy child children girl\n", + "2012-12-31 900 1200 1000 1800\n", + "2013-12-31 400 700 500 800\n", + "2014-12-31 300 600 400 600\n", + "2015-12-31 120 420 220 240" + ] + }, + "execution_count": 206, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.tail(4)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 与Series类似,一样可以利用head()与tail()查看数据的前几行与后几行。" + ] + }, + { + "cell_type": "code", + "execution_count": 207, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "DatetimeIndex(['2006-12-31', '2007-12-31', '2008-12-31', '2009-12-31',\n", + " '2010-12-31', '2011-12-31', '2012-12-31', '2013-12-31',\n", + " '2014-12-31', '2015-12-31'],\n", + " dtype='datetime64[ns]', freq='A-DEC')" + ] + }, + "execution_count": 207, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.index" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 查看index属性,index也可称为行索引" + ] + }, + { + "cell_type": "code", + "execution_count": 208, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 200, 500, 300, 400],\n", + " [ 300, 600, 400, 600],\n", + " [ 400, 700, 500, 800],\n", + " [ 350, 650, 450, 700],\n", + " [ 390, 690, 490, 780],\n", + " [ 600, 900, 700, 1200],\n", + " [ 900, 1200, 1000, 1800],\n", + " [ 400, 700, 500, 800],\n", + " [ 300, 600, 400, 600],\n", + " [ 120, 420, 220, 240]])" + ] + }, + "execution_count": 208, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.values" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 查看values属性,可见DataFrame对象的values是一个numpy的ndarray类型。" + ] + }, + { + "cell_type": "code", + "execution_count": 209, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['boy', 'child', 'children', 'girl'], dtype='object')" + ] + }, + "execution_count": 209, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.columns" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 查看columns属性,columns也可称为列索引。此时列标签是pandas的Index对象,类似list,其中有个三个元素,类型为`object`,在pandas中,非数字类型一般均为object类型。" + ] + }, + { + "cell_type": "code", + "execution_count": 210, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      2006-12-31 00:00:002007-12-31 00:00:002008-12-31 00:00:002009-12-31 00:00:002010-12-31 00:00:002011-12-31 00:00:002012-12-31 00:00:002013-12-31 00:00:002014-12-31 00:00:002015-12-31 00:00:00
      boy200300400350390600900400300120
      child5006007006506909001200700600420
      children3004005004504907001000500400220
      girl40060080070078012001800800600240
      \n", + "
      " + ], + "text/plain": [ + " 2006-12-31 2007-12-31 2008-12-31 2009-12-31 2010-12-31 \\\n", + "boy 200 300 400 350 390 \n", + "child 500 600 700 650 690 \n", + "children 300 400 500 450 490 \n", + "girl 400 600 800 700 780 \n", + "\n", + " 2011-12-31 2012-12-31 2013-12-31 2014-12-31 2015-12-31 \n", + "boy 600 900 400 300 120 \n", + "child 900 1200 700 600 420 \n", + "children 700 1000 500 400 220 \n", + "girl 1200 1800 800 600 240 " + ] + }, + "execution_count": 210, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dft = df.T\n", + "dft" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 可将DataFrame对象转置。\n", + "- 注意,转置并不改变原DataFrame对象,而是新生成一个DataFrame对象。" + ] + }, + { + "cell_type": "code", + "execution_count": 211, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['boy', 'child', 'children', 'girl'], dtype='object')" + ] + }, + "execution_count": 211, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dft.index" + ] + }, + { + "cell_type": "code", + "execution_count": 212, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "DatetimeIndex(['2006-12-31', '2007-12-31', '2008-12-31', '2009-12-31',\n", + " '2010-12-31', '2011-12-31', '2012-12-31', '2013-12-31',\n", + " '2014-12-31', '2015-12-31'],\n", + " dtype='datetime64[ns]', freq='A-DEC')" + ] + }, + "execution_count": 212, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dft.columns" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 转置后,index与columns的值互换" + ] + }, + { + "cell_type": "code", + "execution_count": 213, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      boychildchildrengirl
      2015-12-31120420220240
      2014-12-31300600400600
      2013-12-31400700500800
      2012-12-31900120010001800
      2011-12-316009007001200
      2010-12-31390690490780
      2009-12-31350650450700
      2008-12-31400700500800
      2007-12-31300600400600
      2006-12-31200500300400
      \n", + "
      " + ], + "text/plain": [ + " boy child children girl\n", + "2015-12-31 120 420 220 240\n", + "2014-12-31 300 600 400 600\n", + "2013-12-31 400 700 500 800\n", + "2012-12-31 900 1200 1000 1800\n", + "2011-12-31 600 900 700 1200\n", + "2010-12-31 390 690 490 780\n", + "2009-12-31 350 650 450 700\n", + "2008-12-31 400 700 500 800\n", + "2007-12-31 300 600 400 600\n", + "2006-12-31 200 500 300 400" + ] + }, + "execution_count": 213, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.sort_index(ascending = False) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 根据索引进行排序,默认是升序,并对行索引进行排序。定义逐行变化方向为0轴方向:axis=0\n", + "- `ascending = False`,使之降序排列" + ] + }, + { + "cell_type": "code", + "execution_count": 214, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      girlchildrenchildboy
      2006-12-31400300500200
      2007-12-31600400600300
      2008-12-31800500700400
      2009-12-31700450650350
      2010-12-31780490690390
      2011-12-311200700900600
      2012-12-31180010001200900
      2013-12-31800500700400
      2014-12-31600400600300
      2015-12-31240220420120
      \n", + "
      " + ], + "text/plain": [ + " girl children child boy\n", + "2006-12-31 400 300 500 200\n", + "2007-12-31 600 400 600 300\n", + "2008-12-31 800 500 700 400\n", + "2009-12-31 700 450 650 350\n", + "2010-12-31 780 490 690 390\n", + "2011-12-31 1200 700 900 600\n", + "2012-12-31 1800 1000 1200 900\n", + "2013-12-31 800 500 700 400\n", + "2014-12-31 600 400 600 300\n", + "2015-12-31 240 220 420 120" + ] + }, + "execution_count": 214, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.sort_index(axis = 1, ascending = False) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 将参数axis设为1,排序即按照列索引进行排序" + ] + }, + { + "cell_type": "code", + "execution_count": 215, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      boychildchildrengirl
      2015-12-31120420220240
      2006-12-31200500300400
      2007-12-31300600400600
      2014-12-31300600400600
      2009-12-31350650450700
      2010-12-31390690490780
      2008-12-31400700500800
      2013-12-31400700500800
      2011-12-316009007001200
      2012-12-31900120010001800
      \n", + "
      " + ], + "text/plain": [ + " boy child children girl\n", + "2015-12-31 120 420 220 240\n", + "2006-12-31 200 500 300 400\n", + "2007-12-31 300 600 400 600\n", + "2014-12-31 300 600 400 600\n", + "2009-12-31 350 650 450 700\n", + "2010-12-31 390 690 490 780\n", + "2008-12-31 400 700 500 800\n", + "2013-12-31 400 700 500 800\n", + "2011-12-31 600 900 700 1200\n", + "2012-12-31 900 1200 1000 1800" + ] + }, + "execution_count": 215, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.sort_values(by='boy')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 根据值进行排序,如是根据某对应列的值进行排序,需要在参数by中指定数据列索引" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 4. 选择DataFrame数据\n", + "**4.1 列选择**" + ] + }, + { + "cell_type": "code", + "execution_count": 216, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "2006-12-31 200\n", + "2007-12-31 300\n", + "2008-12-31 400\n", + "2009-12-31 350\n", + "2010-12-31 390\n", + "2011-12-31 600\n", + "2012-12-31 900\n", + "2013-12-31 400\n", + "2014-12-31 300\n", + "2015-12-31 120\n", + "Freq: A-DEC, Name: boy, dtype: int32" + ] + }, + "execution_count": 216, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df['boy']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用列索引选择一列,将返回该列,且为Series对象。也可以用`df.boy`来访问,效果相同。" + ] + }, + { + "cell_type": "code", + "execution_count": 217, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      boy
      2006-12-31200
      2007-12-31300
      2008-12-31400
      2009-12-31350
      2010-12-31390
      2011-12-31600
      2012-12-31900
      2013-12-31400
      2014-12-31300
      2015-12-31120
      \n", + "
      " + ], + "text/plain": [ + " boy\n", + "2006-12-31 200\n", + "2007-12-31 300\n", + "2008-12-31 400\n", + "2009-12-31 350\n", + "2010-12-31 390\n", + "2011-12-31 600\n", + "2012-12-31 900\n", + "2013-12-31 400\n", + "2014-12-31 300\n", + "2015-12-31 120" + ] + }, + "execution_count": 217, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[['boy']]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 指定一个列标签,放入list中,可以获取对应colums标签的列,返回DataFrame对象。" + ] + }, + { + "cell_type": "code", + "execution_count": 218, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      boychildren
      2006-12-31200300
      2007-12-31300400
      2008-12-31400500
      2009-12-31350450
      2010-12-31390490
      2011-12-31600700
      2012-12-319001000
      2013-12-31400500
      2014-12-31300400
      2015-12-31120220
      \n", + "
      " + ], + "text/plain": [ + " boy children\n", + "2006-12-31 200 300\n", + "2007-12-31 300 400\n", + "2008-12-31 400 500\n", + "2009-12-31 350 450\n", + "2010-12-31 390 490\n", + "2011-12-31 600 700\n", + "2012-12-31 900 1000\n", + "2013-12-31 400 500\n", + "2014-12-31 300 400\n", + "2015-12-31 120 220" + ] + }, + "execution_count": 218, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[['boy','children']]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用指定多个列标签colums的list,可以获取对应colums标签的列,返回DataFrame对象。" + ] + }, + { + "cell_type": "code", + "execution_count": 219, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      boychildren
      2006-12-31200300
      2007-12-31300400
      2008-12-31400500
      2009-12-31350450
      2010-12-31390490
      2011-12-31600700
      2012-12-319001000
      2013-12-31400500
      2014-12-31300400
      2015-12-31120220
      \n", + "
      " + ], + "text/plain": [ + " boy children\n", + "2006-12-31 200 300\n", + "2007-12-31 300 400\n", + "2008-12-31 400 500\n", + "2009-12-31 350 450\n", + "2010-12-31 390 490\n", + "2011-12-31 600 700\n", + "2012-12-31 900 1000\n", + "2013-12-31 400 500\n", + "2014-12-31 300 400\n", + "2015-12-31 120 220" + ] + }, + "execution_count": 219, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[[0,2]]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用代表列整数索引的list,可以获取对应colums标签的列,返回DataFrame对象。" + ] + }, + { + "cell_type": "code", + "execution_count": 220, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "2006-12-31 200\n", + "2007-12-31 300\n", + "2008-12-31 400\n", + "2009-12-31 350\n", + "2010-12-31 390\n", + "2011-12-31 600\n", + "2012-12-31 900\n", + "2013-12-31 400\n", + "2014-12-31 300\n", + "2015-12-31 120\n", + "Freq: A-DEC, Name: boy, dtype: int32" + ] + }, + "execution_count": 220, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + " df.loc[:,'boy']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 也可以利用DataFrame的loc属性进行列选取\n", + "- loc属性主要通过标签进行数据选取\n", + "- 其中第一个位置参数表示行方向(即axis=0)元素,为`:`即为全部选取\n", + "- 第二个位置参数表示列方向(即axis=1)元素,选取当前指定列标签的数据\n", + "- 返回一个Series对象" + ] + }, + { + "cell_type": "code", + "execution_count": 221, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      boy
      2006-12-31200
      2007-12-31300
      2008-12-31400
      2009-12-31350
      2010-12-31390
      2011-12-31600
      2012-12-31900
      2013-12-31400
      2014-12-31300
      2015-12-31120
      \n", + "
      " + ], + "text/plain": [ + " boy\n", + "2006-12-31 200\n", + "2007-12-31 300\n", + "2008-12-31 400\n", + "2009-12-31 350\n", + "2010-12-31 390\n", + "2011-12-31 600\n", + "2012-12-31 900\n", + "2013-12-31 400\n", + "2014-12-31 300\n", + "2015-12-31 120" + ] + }, + "execution_count": 221, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + " df.loc[:,['boy']]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 与前类似,如在list中指定列标签,则返回一个DataFrame对象" + ] + }, + { + "cell_type": "code", + "execution_count": 222, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      boygirl
      2006-12-31200400
      2007-12-31300600
      2008-12-31400800
      2009-12-31350700
      2010-12-31390780
      2011-12-316001200
      2012-12-319001800
      2013-12-31400800
      2014-12-31300600
      2015-12-31120240
      \n", + "
      " + ], + "text/plain": [ + " boy girl\n", + "2006-12-31 200 400\n", + "2007-12-31 300 600\n", + "2008-12-31 400 800\n", + "2009-12-31 350 700\n", + "2010-12-31 390 780\n", + "2011-12-31 600 1200\n", + "2012-12-31 900 1800\n", + "2013-12-31 400 800\n", + "2014-12-31 300 600\n", + "2015-12-31 120 240" + ] + }, + "execution_count": 222, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.loc[:,['boy', 'girl']]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 与前类似,可以选择多个列,返回一个DataFrame对象" + ] + }, + { + "cell_type": "code", + "execution_count": 223, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      boychildchildrengirl
      2006-12-31200500300400
      2007-12-31300600400600
      2008-12-31400700500800
      2009-12-31350650450700
      2010-12-31390690490780
      2011-12-316009007001200
      2012-12-31900120010001800
      2013-12-31400700500800
      2014-12-31300600400600
      2015-12-31120420220240
      \n", + "
      " + ], + "text/plain": [ + " boy child children girl\n", + "2006-12-31 200 500 300 400\n", + "2007-12-31 300 600 400 600\n", + "2008-12-31 400 700 500 800\n", + "2009-12-31 350 650 450 700\n", + "2010-12-31 390 690 490 780\n", + "2011-12-31 600 900 700 1200\n", + "2012-12-31 900 1200 1000 1800\n", + "2013-12-31 400 700 500 800\n", + "2014-12-31 300 600 400 600\n", + "2015-12-31 120 420 220 240" + ] + }, + "execution_count": 223, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.loc[:,'boy': 'girl']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 可以利用列索引进行切片选取\n", + "- 注意切片是两端包含\n", + "- 注意切片不需要在list中" + ] + }, + { + "cell_type": "code", + "execution_count": 224, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "2006-12-31 200\n", + "2007-12-31 300\n", + "2008-12-31 400\n", + "2009-12-31 350\n", + "2010-12-31 390\n", + "2011-12-31 600\n", + "2012-12-31 900\n", + "2013-12-31 400\n", + "2014-12-31 300\n", + "2015-12-31 120\n", + "Freq: A-DEC, Name: boy, dtype: int32" + ] + }, + "execution_count": 224, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.iloc[:,0]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 还可以利用DataFrame的iloc属性进行列选取\n", + "- iloc属性也称为位置(position)属性,主要通过位置(即对应整数索引)进行数据选取\n", + "- 其中第一个位置参数仍然表示行方向(即axis=0)元素,为`:`即为全部选取\n", + "- 第二个位置参数仍然表示列方向(即axis=1)元素,选取当前指定列标签的数据\n", + "- 返回一个Series对象" + ] + }, + { + "cell_type": "code", + "execution_count": 225, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      child
      2006-12-31500
      2007-12-31600
      2008-12-31700
      2009-12-31650
      2010-12-31690
      2011-12-31900
      2012-12-311200
      2013-12-31700
      2014-12-31600
      2015-12-31420
      \n", + "
      " + ], + "text/plain": [ + " child\n", + "2006-12-31 500\n", + "2007-12-31 600\n", + "2008-12-31 700\n", + "2009-12-31 650\n", + "2010-12-31 690\n", + "2011-12-31 900\n", + "2012-12-31 1200\n", + "2013-12-31 700\n", + "2014-12-31 600\n", + "2015-12-31 420" + ] + }, + "execution_count": 225, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.iloc[:,[1]]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 与前类似,如在list中指定列位置,则返回一个DataFrame对象" + ] + }, + { + "cell_type": "code", + "execution_count": 226, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      childchildren
      2006-12-31500300
      2007-12-31600400
      2008-12-31700500
      2009-12-31650450
      2010-12-31690490
      2011-12-31900700
      2012-12-3112001000
      2013-12-31700500
      2014-12-31600400
      2015-12-31420220
      \n", + "
      " + ], + "text/plain": [ + " child children\n", + "2006-12-31 500 300\n", + "2007-12-31 600 400\n", + "2008-12-31 700 500\n", + "2009-12-31 650 450\n", + "2010-12-31 690 490\n", + "2011-12-31 900 700\n", + "2012-12-31 1200 1000\n", + "2013-12-31 700 500\n", + "2014-12-31 600 400\n", + "2015-12-31 420 220" + ] + }, + "execution_count": 226, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.iloc[:,[1,2]]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 与前类似,可以根据位置选择多个列,返回一个DataFrame对象" + ] + }, + { + "cell_type": "code", + "execution_count": 227, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      boychild
      2006-12-31200500
      2007-12-31300600
      2008-12-31400700
      2009-12-31350650
      2010-12-31390690
      2011-12-31600900
      2012-12-319001200
      2013-12-31400700
      2014-12-31300600
      2015-12-31120420
      \n", + "
      " + ], + "text/plain": [ + " boy child\n", + "2006-12-31 200 500\n", + "2007-12-31 300 600\n", + "2008-12-31 400 700\n", + "2009-12-31 350 650\n", + "2010-12-31 390 690\n", + "2011-12-31 600 900\n", + "2012-12-31 900 1200\n", + "2013-12-31 400 700\n", + "2014-12-31 300 600\n", + "2015-12-31 120 420" + ] + }, + "execution_count": 227, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.iloc[:,0:2]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 与前类似,可以通过列位置进行切片选择多个列,返回一个DataFrame对象" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**4.2 行选择**" + ] + }, + { + "cell_type": "code", + "execution_count": 228, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "boy 200\n", + "child 500\n", + "children 300\n", + "girl 400\n", + "Name: 2006-12-31 00:00:00, dtype: int32" + ] + }, + "execution_count": 228, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.loc[years[0]]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用DataFrame的loc属性也可以进行行选取\n", + "- loc属性主要通过标签进行数据选取\n", + "- 其中第一个位置参数表示行方向(即axis=0)元素\n", + "- 第二个位置参数表示列方向(即axis=1)元素,不指定时,默认为全部选取\n", + "- 返回一个Series对象" + ] + }, + { + "cell_type": "code", + "execution_count": 229, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      boychildchildrengirl
      2006-12-31200500300400
      \n", + "
      " + ], + "text/plain": [ + " boy child children girl\n", + "2006-12-31 200 500 300 400" + ] + }, + "execution_count": 229, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.loc[[years[0]]]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 与前类似,如在list中指定行标签,则可选择该行,并返回一个DataFrame对象" + ] + }, + { + "cell_type": "code", + "execution_count": 230, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      boychildchildrengirl
      2006-12-31200500300400
      2008-12-31400700500800
      \n", + "
      " + ], + "text/plain": [ + " boy child children girl\n", + "2006-12-31 200 500 300 400\n", + "2008-12-31 400 700 500 800" + ] + }, + "execution_count": 230, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.loc[[years[0], years[2]]]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 与前类似,如在list中指定多个行标签,则可选择多行,并返回一个DataFrame对象" + ] + }, + { + "cell_type": "code", + "execution_count": 231, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      boychildchildrengirl
      2006-12-31200500300400
      2007-12-31300600400600
      2008-12-31400700500800
      \n", + "
      " + ], + "text/plain": [ + " boy child children girl\n", + "2006-12-31 200 500 300 400\n", + "2007-12-31 300 600 400 600\n", + "2008-12-31 400 700 500 800" + ] + }, + "execution_count": 231, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.loc[years[0]: years[2]]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 与前类似,还可以利用标签切片来选择多行,并返回一个DataFrame对象" + ] + }, + { + "cell_type": "code", + "execution_count": 232, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "boy 200\n", + "child 500\n", + "children 300\n", + "girl 400\n", + "Name: 2006-12-31 00:00:00, dtype: int32" + ] + }, + "execution_count": 232, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.iloc[0]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 还可以利用DataFrame的iloc属性进行行选取\n", + "- iloc属性也称为位置(position)属性,主要通过位置(即对应整数索引)进行数据选取\n", + "- 其中第一个位置参数仍然表示行方向(即axis=0)元素\n", + "- 第二个位置参数仍然表示列方向(即axis=1)元素,不指定时,默认为全部选取\n", + "- 返回一个Series对象" + ] + }, + { + "cell_type": "code", + "execution_count": 233, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      boychildchildrengirl
      2006-12-31200500300400
      \n", + "
      " + ], + "text/plain": [ + " boy child children girl\n", + "2006-12-31 200 500 300 400" + ] + }, + "execution_count": 233, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.iloc[[0]]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 与前类似,如在list中指定行位置,则返回一个DataFrame对象" + ] + }, + { + "cell_type": "code", + "execution_count": 234, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      boychildchildrengirl
      2006-12-31200500300400
      2007-12-31300600400600
      2008-12-31400700500800
      \n", + "
      " + ], + "text/plain": [ + " boy child children girl\n", + "2006-12-31 200 500 300 400\n", + "2007-12-31 300 600 400 600\n", + "2008-12-31 400 700 500 800" + ] + }, + "execution_count": 234, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.iloc[[0,1,2]]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 与前类似,可以根据位置选择多个行,返回一个DataFrame对象" + ] + }, + { + "cell_type": "code", + "execution_count": 235, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      boychildchildrengirl
      2007-12-31300600400600
      2008-12-31400700500800
      \n", + "
      " + ], + "text/plain": [ + " boy child children girl\n", + "2007-12-31 300 600 400 600\n", + "2008-12-31 400 700 500 800" + ] + }, + "execution_count": 235, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.iloc[1:3]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 与前类似,可以根据位置进行切片选择多个行,返回一个DataFrame对象" + ] + }, + { + "cell_type": "code", + "execution_count": 236, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      boychildchildrengirl
      2006-12-31200500300400
      2007-12-31300600400600
      2008-12-31400700500800
      \n", + "
      " + ], + "text/plain": [ + " boy child children girl\n", + "2006-12-31 200 500 300 400\n", + "2007-12-31 300 600 400 600\n", + "2008-12-31 400 700 500 800" + ] + }, + "execution_count": 236, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[0:3]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 可以利用行切片,选取多行数据,返回一个DataFrame对象\n", + "- 个人觉得容易与选取列数据的混淆,不建议使用" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**4.3 选择区块**" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**4.3.1 利用loc**" + ] + }, + { + "cell_type": "code", + "execution_count": 237, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "200" + ] + }, + "execution_count": 237, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.loc[years[0],'boy']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用loc,可以选择指定行标签、列标签的数据" + ] + }, + { + "cell_type": "code", + "execution_count": 238, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "boy 200\n", + "Name: 2006-12-31 00:00:00, dtype: int32" + ] + }, + "execution_count": 238, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.loc[years[0],['boy']]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用loc,指定行标签,在list中指定一个列标签,可以选择指定行列的数据\n", + "- 返回一个Series" + ] + }, + { + "cell_type": "code", + "execution_count": 239, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      boy
      2006-12-31200
      \n", + "
      " + ], + "text/plain": [ + " boy\n", + "2006-12-31 200" + ] + }, + "execution_count": 239, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.loc[[years[0]],['boy']]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用loc,在list中指定一个行标签,在list中指定一个列标签,可以选择指定行列的数据\n", + "- 返回一个DataFrame对象" + ] + }, + { + "cell_type": "code", + "execution_count": 240, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "boy 200\n", + "girl 400\n", + "Name: 2006-12-31 00:00:00, dtype: int32" + ] + }, + "execution_count": 240, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.loc[years[0],['boy', 'girl']]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用loc,指定行标签,在list中指定多个列标签,可以选择指定行的多个列的数据\n", + "- 返回一个Series" + ] + }, + { + "cell_type": "code", + "execution_count": 241, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "boy 200\n", + "child 500\n", + "children 300\n", + "girl 400\n", + "Name: 2006-12-31 00:00:00, dtype: int32" + ] + }, + "execution_count": 241, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.loc[years[0],'boy':'girl']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 与前类似,还可以切片选择给定行的多列数据\n", + "- 返回一个Series" + ] + }, + { + "cell_type": "code", + "execution_count": 242, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      boychildchildrengirl
      2006-12-31200500300400
      \n", + "
      " + ], + "text/plain": [ + " boy child children girl\n", + "2006-12-31 200 500 300 400" + ] + }, + "execution_count": 242, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.loc[[years[0]],'boy':'girl']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 与前类似,但是将返回一个DataFrame对象" + ] + }, + { + "cell_type": "code", + "execution_count": 243, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      boychildchildrengirl
      2006-12-31200500300400
      2007-12-31300600400600
      2008-12-31400700500800
      \n", + "
      " + ], + "text/plain": [ + " boy child children girl\n", + "2006-12-31 200 500 300 400\n", + "2007-12-31 300 600 400 600\n", + "2008-12-31 400 700 500 800" + ] + }, + "execution_count": 243, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.loc[years[0]:years[2],'boy':'girl']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 行列标签切片,选择对应数据\n", + "- 利用loc方式的行与列均可以如上类似处理" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**4.3.2 利用iloc**\n", + "\n", + "利用iloc进行区域选择的方式与loc基本类似,只是利用位置而非标签信息进行选取,请参照前面理解" + ] + }, + { + "cell_type": "code", + "execution_count": 244, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "200" + ] + }, + "execution_count": 244, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.iloc[0,0]" + ] + }, + { + "cell_type": "code", + "execution_count": 245, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "boy 200\n", + "child 500\n", + "children 300\n", + "Name: 2006-12-31 00:00:00, dtype: int32" + ] + }, + "execution_count": 245, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.iloc[0,[0,1,2]]" + ] + }, + { + "cell_type": "code", + "execution_count": 246, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "2006-12-31 200\n", + "2007-12-31 300\n", + "2008-12-31 400\n", + "Freq: A-DEC, Name: boy, dtype: int32" + ] + }, + "execution_count": 246, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.iloc[[0,1,2],0]" + ] + }, + { + "cell_type": "code", + "execution_count": 247, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      childchildren
      2006-12-31500300
      2007-12-31600400
      2008-12-31700500
      \n", + "
      " + ], + "text/plain": [ + " child children\n", + "2006-12-31 500 300\n", + "2007-12-31 600 400\n", + "2008-12-31 700 500" + ] + }, + "execution_count": 247, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.iloc[[0,1,2],[1, 2]]" + ] + }, + { + "cell_type": "code", + "execution_count": 248, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      childchildren
      2006-12-31500300
      2007-12-31600400
      \n", + "
      " + ], + "text/plain": [ + " child children\n", + "2006-12-31 500 300\n", + "2007-12-31 600 400" + ] + }, + "execution_count": 248, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.iloc[0:2,[1, 2]]" + ] + }, + { + "cell_type": "code", + "execution_count": 249, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      boychildchildren
      2006-12-31200500300
      2007-12-31300600400
      2008-12-31400700500
      2009-12-31350650450
      2010-12-31390690490
      \n", + "
      " + ], + "text/plain": [ + " boy child children\n", + "2006-12-31 200 500 300\n", + "2007-12-31 300 600 400\n", + "2008-12-31 400 700 500\n", + "2009-12-31 350 650 450\n", + "2010-12-31 390 690 490" + ] + }, + "execution_count": 249, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.iloc[0:5,0:3]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**4.3.3 利用iat选择单个元素**" + ] + }, + { + "cell_type": "code", + "execution_count": 250, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "600" + ] + }, + "execution_count": 250, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.iat[1,1]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 在以上进行行、列选取的各类方法中,推荐使用loc及iloc方法,虽然稍显繁琐,但是逻辑较为严密,且性能更优。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 5. 条件选择DataFrame数据(布尔索引)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 对DataFrame按照条件来选择数据较为方便记忆的方式是:`对象[布尔索引]`,其中对象可以是整个DataFrame对象,也可以是DataFrame经过前一部分选择出的列、行或者区块。注意布尔索引要与选择出的数据对齐。\n", + "### 达到数据选择结果的方法较为多样,但为避免造成记忆及使用的混乱,其他条件选择数据的方式本教程不予介绍。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 5.1 列" + ] + }, + { + "cell_type": "code", + "execution_count": 251, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "2006-12-31 False\n", + "2007-12-31 False\n", + "2008-12-31 False\n", + "2009-12-31 False\n", + "2010-12-31 False\n", + "2011-12-31 True\n", + "2012-12-31 True\n", + "2013-12-31 False\n", + "2014-12-31 False\n", + "2015-12-31 False\n", + "Freq: A-DEC, Name: boy, dtype: bool" + ] + }, + "execution_count": 251, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.boy > 400" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 与Series中的类似,是每个元素比较后的布尔值\n", + "- 返回一个Series" + ] + }, + { + "cell_type": "code", + "execution_count": 252, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      boychildchildrengirl
      2011-12-316009007001200
      2012-12-31900120010001800
      \n", + "
      " + ], + "text/plain": [ + " boy child children girl\n", + "2011-12-31 600 900 700 1200\n", + "2012-12-31 900 1200 1000 1800" + ] + }, + "execution_count": 252, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + " df[df.boy > 400]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 可利用DataFrame对象的某一列数据,进行布尔运算,根据布尔运算的结果过滤数据\n", + "- 返回一个DataFrame对象" + ] + }, + { + "cell_type": "code", + "execution_count": 253, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      boychildchildrengirl
      2011-12-316009007001200
      2012-12-31900120010001800
      \n", + "
      " + ], + "text/plain": [ + " boy child children girl\n", + "2011-12-31 600 900 700 1200\n", + "2012-12-31 900 1200 1000 1800" + ] + }, + "execution_count": 253, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[(df.boy >300) & (df.girl > 900)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 可利用DataFrame对象的多列数据,进行多个布尔运算,注意用括号括起每个部分,表示`and`操作用`&`,'or'用`|`,`not`用`~`。\n", + "- 返回一个DataFrame对象" + ] + }, + { + "cell_type": "code", + "execution_count": 254, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "2008-12-31 800\n", + "2009-12-31 700\n", + "2010-12-31 780\n", + "2011-12-31 1200\n", + "2012-12-31 1800\n", + "2013-12-31 800\n", + "Freq: A-DEC, Name: girl, dtype: int32" + ] + }, + "execution_count": 254, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df['girl'][df.boy >300]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 选择df中的一列,再根据布尔索引进行过滤选择\n", + "- 返回一个Series" + ] + }, + { + "cell_type": "code", + "execution_count": 255, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      girl
      2008-12-31800
      2009-12-31700
      2010-12-31780
      2011-12-311200
      2012-12-311800
      2013-12-31800
      \n", + "
      " + ], + "text/plain": [ + " girl\n", + "2008-12-31 800\n", + "2009-12-31 700\n", + "2010-12-31 780\n", + "2011-12-31 1200\n", + "2012-12-31 1800\n", + "2013-12-31 800" + ] + }, + "execution_count": 255, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[['girl']][df.boy >300]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 与前类似,但返回一个DataFrame对象" + ] + }, + { + "cell_type": "code", + "execution_count": 256, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      girlchild
      2011-12-311200900
      2012-12-3118001200
      \n", + "
      " + ], + "text/plain": [ + " girl child\n", + "2011-12-31 1200 900\n", + "2012-12-31 1800 1200" + ] + }, + "execution_count": 256, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[['girl', 'child']][(df.boy >300) & (df.girl > 900)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 选择多列,并用组合的布尔索引进行数据选择" + ] + }, + { + "cell_type": "code", + "execution_count": 257, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "2006-12-31 False\n", + "2007-12-31 False\n", + "2008-12-31 True\n", + "2009-12-31 True\n", + "2010-12-31 False\n", + "2011-12-31 False\n", + "2012-12-31 False\n", + "2013-12-31 True\n", + "2014-12-31 False\n", + "2015-12-31 False\n", + "Freq: A-DEC, Name: girl, dtype: bool" + ] + }, + "execution_count": 257, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df['girl'].isin([700,800])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 对Series对象应用`isin()`函数,是判断该Series中的values是否在给定的数据表中\n", + "- 返回一个都是布尔值的Series" + ] + }, + { + "cell_type": "code", + "execution_count": 258, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      boychildchildrengirl
      2008-12-31400700500800
      2009-12-31350650450700
      2013-12-31400700500800
      \n", + "
      " + ], + "text/plain": [ + " boy child children girl\n", + "2008-12-31 400 700 500 800\n", + "2009-12-31 350 650 450 700\n", + "2013-12-31 400 700 500 800" + ] + }, + "execution_count": 258, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[df['girl'].isin([700,800])]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用isin()函数,选择某列数据进行数据过滤" + ] + }, + { + "cell_type": "code", + "execution_count": 259, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      girlchildren
      2008-12-31800500
      2009-12-31700450
      2013-12-31800500
      \n", + "
      " + ], + "text/plain": [ + " girl children\n", + "2008-12-31 800 500\n", + "2009-12-31 700 450\n", + "2013-12-31 800 500" + ] + }, + "execution_count": 259, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[['girl', 'children']][df['girl'].isin([700,800])]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 选择后利用isin生成的布尔索引进行数据选择" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 5.2 行\n", + "\n", + "- pandas以布尔索引选择行数据的功能至今较弱" + ] + }, + { + "cell_type": "code", + "execution_count": 260, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "boy False\n", + "child True\n", + "children False\n", + "girl True\n", + "Name: 2007-12-31 00:00:00, dtype: bool" + ] + }, + "execution_count": 260, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.loc[years[1]]>500" + ] + }, + { + "cell_type": "code", + "execution_count": 261, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "child 500\n", + "girl 400\n", + "Name: 2006-12-31 00:00:00, dtype: int32" + ] + }, + "execution_count": 261, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.loc[years[0]][df.loc[years[1]]>500]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 但是暂时还无法将以往行对象选择后,应用`对象[行条件]`的方式进行条件数据选取,个人认为是pandas设计没有考虑周全的地方。虽然布尔索引选择行数据的应用场景较少。" + ] + }, + { + "cell_type": "code", + "execution_count": 262, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      childgirl
      2006-12-31500400
      2007-12-31600600
      \n", + "
      " + ], + "text/plain": [ + " child girl\n", + "2006-12-31 500 400\n", + "2007-12-31 600 600" + ] + }, + "execution_count": 262, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.T[[years[0],years[1]]][df.loc[years[2]]>500].T" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 如确有需求,可以对DataFrame对象进行转置,然后利用列布尔选择,再转置" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.0" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/chapter4/pandas+Tutorial+Series.ipynb b/chapter4/pandas+Tutorial+Series.ipynb new file mode 100644 index 000000000..e97ad8ad7 --- /dev/null +++ b/chapter4/pandas+Tutorial+Series.ipynb @@ -0,0 +1,3726 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Pandas统计分析入门(1)\n", + "- 转载注明转自:https://github.com/liupengyuan/\n", + "- ## Pandas及相关python库简介\n", + "- ## 一维数据统计分析(Series基础)\n", + "- ## 二维数据统计分析(DataFrame基础)\n", + "- ## Visualization基础\n", + "---\n", + "## Pandas 简介\n", + "\n", + " pandas is a Python package providing fast, flexible, and expressive data structures designed to make working with “relational” or “labeled” data both easy and intuitive. It aims to be the fundamental high-level building block for doing practical, real world data analysis in Python. Additionally, it has the broader goal of becoming the most powerful and flexible open source data analysis / manipulation tool available in any language. It is already well on its way toward this goal.\n", + "\n", + "## Numpy 简介\n", + "\n", + " NumPy is the fundamental package for scientific computing with Python. It contains among other things:\n", + "- a powerful N-dimensional array object\n", + "- sophisticated (broadcasting) functions\n", + "- tools for integrating C/C++ and Fortran code\n", + "- useful linear algebra, Fourier transform, and random number capabilities\n", + "\n", + "## Matplotlib 简介\n", + "\n", + "Matplotlib是一个Python的2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。\n", + "通过Matplotlib,开发者可以仅需要几行代码,便可以生成绘图,直方图,功率谱,条形图,错误图,散点图等。\n", + "\n", + "## Seaborn 简介\n", + "\n", + "Seaborn is a library for making attractive and informative statistical graphics in Python. It is built on top of matplotlib and tightly integrated with the PyData stack, including support for numpy and pandas data structures and statistical routines from scipy and statsmodels.\n", + "\n", + "---" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- ## 程序头部引入" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "from pandas import Series, DataFrame\n", + "import pandas as pd\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import seaborn as sns" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "以上引入各类利用pandas做数据分析可视化的模块,一般可作为每次数据分析项目/任务的起始代码,其中:\n", + "- `%matplotlib inline`是jupyter notebook的一个魔法命令,能够使基于matplotlib的绘图直接显示在网页中\n", + "- `from pandas import Series, DataFrame`,从pandas中引入最为常用的两个对象:Series及DataFrame\n", + "\n", + "**注意**,在以上的引入中,类似`pd`、`np`、`plt`及`sns`均为约定俗成的习惯性名称,**不建议**更改。\n", + "\n", + "---" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 一、一维数据统计分析(Series基础)\n", + "\n", + "- 数据的描述、分析、可视化展示、概括性度量、输入与输出" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1. Series对象及数据最基本展示\n", + "\n", + "- 将以一个词频统计结果的实例,进行介绍。\n", + "- 教程中的各个代码段,请自行建立新的python程序,依次键入并顺序执行,观察执行结果。\n", + "- Series是pandas最重要最基础的数据对象,可用来表示数据表中的一列或一行。" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "words_freq = [200,300,400,350,390,600,900,400,300,120]\n", + "freq_dict = {'天长地久':words_freq}\n", + "total_words_freq = [12345000,23456000,22333000,45632000,11144000,65433000,44444000,55555000,34522000,55566000]\n", + "years = [2006,2007,2008,2009,2010,2011,2012,2013,2014,2015]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "以上代码中:\n", + "- `words_freq`,是“天长地久”在2006-2015年10年之间的频次list\n", + "- `freq_dict`,键为“天长地久”,值为其历时频次的list\n", + "- `total_words_freq`,是每年统计文本语料的总字数list\n", + "- `years`,是年份list" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0 200\n", + "1 300\n", + "2 400\n", + "3 350\n", + "4 390\n", + "5 600\n", + "6 900\n", + "7 400\n", + "8 300\n", + "9 120\n", + "dtype: int64" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s = Series(words_freq)\n", + "s" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "利用list来初始化Series对象。Series是pandas内置的处理一维数据的数据类型。\n", + "- 第一列为Series对象的索引(index),默认为数字索引;\n", + "- 第二列为Series对象的值(value)\n", + "- 最后一行说明,Series对象的值为int64类型" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "2006 200\n", + "2007 300\n", + "2008 400\n", + "2009 350\n", + "2010 390\n", + "2011 600\n", + "2012 900\n", + "2013 400\n", + "2014 300\n", + "2015 120\n", + "dtype: int64" + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s = Series(freq_dict['天长地久'], index = years)\n", + "s" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "可以在初始化Series对象时,同时指定索引(index)" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "year\n", + "2006 200\n", + "2007 300\n", + "2008 400\n", + "2009 350\n", + "2010 390\n", + "2011 600\n", + "2012 900\n", + "2013 400\n", + "2014 300\n", + "2015 120\n", + "Name: 2006-2015, dtype: int64" + ] + }, + "execution_count": 44, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s.name = '2006-2015'\n", + "s.index.name = 'year'\n", + "s" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "还可以指定Series对象的名称(name),指定其索引(index)的名称(name)" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 45, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\nbiels+1rEIIAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "s.plot()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Series对象可利用pandas内置的plot()直接绘图,默认为折线图。\n", + "\n", + "**折线图**多用于展示**数值型数据**,特别是用于展示历时数据。\n", + "\n", + "统计学中,依据计量尺度,一般可将数据分为三种类型:\n", + "- 分类数据\n", + "- 顺序数据(定序数据)\n", + "- 数值型数据(定量数据)" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 46, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "s.plot(kind='bar')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "plot()函数的参数`kind`,可以指定plot()函数所绘制图形的种类,`'bar'`为柱状图。也可以采用这种形式:`s.plot.bar()`,效果与指定kind参数为bar类似。\n", + "\n", + "**柱状图**用宽度相同的柱的高度或长短来表示数据多少。\n", + "\n", + "柱状图一般用于展示**分类数据**,展示不同类别数据的多少(可将以上数据的每个年份理解为不同类别)。" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 47, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "s.plot(kind='barh')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "'barh'为条形图,与柱状图类似。" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "s.plot('pie',figsize=(6,6))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "'pie'为饼图。\n", + "**饼图**使用圆形及圆内扇形的角度表示数值大小的图形。\n", + "\n", + "一般也用于展示**分类数据**,用来表示各分类部分数据占全部数据的比例(频率分布)。" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 49, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "s.plot('pie',figsize=(6,6))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "可利用plot()函数的`figsize`参数,设定图形的大小(长与宽)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2. 数据基本分析、度量与展示\n", + "\n", + "**2.1 归一化**\n", + "\n", + "**归一化**一般要使数值的绝对值变成**相对值**,将数值映射到[0,1]区间上。\n", + "\n", + "在本例中,由于每个年度的语料大小不同,单纯观察每个年度某个词汇出现的频次(绝对值),无法确定其出现的相对高低(相对值)。\n", + "\n", + "因此可将频次归一化,即某词汇每年出现的次数/每年语料的总字数。这样,该词汇就可以利用频次归一化的数值进行横向比较了。\n", + "\n", + "在实际中,也可以将频次归一化的结果乘以一个较大的整数。在本例中,可乘以10000000,表示语料中每10000000字出现该词汇的频次。" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "#python实现\n", + "def norm_freq(freqs, total_freqs, per = 1):\n", + " return [per * freq/total_freq for freq, total_freq in zip(freqs, total_freqs)]\n", + "\n", + "per = 10000000\n", + "s_norm = norm_freq(freq_dict['天长地久'], total_words_freq, per = 10000000)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "上面的代码用python实现了将每年的频次归一化为每年每一千万字该词汇出现的频次。" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "2006 162.008910\n", + "2007 127.899045\n", + "2008 179.107151\n", + "2009 76.700561\n", + "2010 349.964106\n", + "2011 91.696850\n", + "2012 202.502025\n", + "2013 72.000720\n", + "2014 86.901107\n", + "2015 21.595940\n", + "dtype: float64" + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s_norm = Series(s_norm, index = years)\n", + "s_norm" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "利用归一化处理后的结果初始化一个Series对象s_norm。注意,此时value的数据类型自动转换为float。" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "year\n", + "2006 162.008910\n", + "2007 127.899045\n", + "2008 179.107151\n", + "2009 76.700561\n", + "2010 349.964106\n", + "2011 91.696850\n", + "2012 202.502025\n", + "2013 72.000720\n", + "2014 86.901107\n", + "2015 21.595940\n", + "Name: 2006-2015, dtype: float64" + ] + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#pandas的Series运算\n", + "s_norm = per * s / total_words_freq\n", + "s_norm" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "也可以直接利用pandas的序列运算进行归一化。运算结果与python编写代码一直,但是更简洁。\n", + "- `s_norm = per * s / total_words_freq`,其中`s`为Series类型,`total_words_freq`为list类型,直接相除运算的结果是将s中每个对应的值除以list中每个值。这种向量/矩阵运算是numpy及pandas中非常常见的情况,一般被称为**矢量化操作**。" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 53, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\nRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "s_norm.plot()\n", + "s.plot()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "再次绘图,并将两根折线展示在一个图上。\n", + "\n", + "可以看出,归一化前,峰值出现在2012年;归一化后,峰值出现在2010年。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**1.2 求平均值**" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "396.0" + ] + }, + "execution_count": 54, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#python实现\n", + "freq_mean = sum(freq_dict['天长地久'])/len(freq_dict['天长地久'])\n", + "freq_mean" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "计算均值的python代码。\n", + "\n", + "除非特别指出,一般平均值指的就是**算数平均值**。" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "396.0" + ] + }, + "execution_count": 55, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#pandas内置求均值函数\n", + "s.mean()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "利用内置均值函数mean()更为简洁。" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "2006 396.0\n", + "2007 396.0\n", + "2008 396.0\n", + "2009 396.0\n", + "2010 396.0\n", + "2011 396.0\n", + "2012 396.0\n", + "2013 396.0\n", + "2014 396.0\n", + "2015 396.0\n", + "dtype: float64" + ] + }, + "execution_count": 56, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s_mean = Series([freq_mean]*10, index = years)\n", + "s_mean" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "声明一个每年数值均为均值的Series对象s_mean。" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 57, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "s.plot()\n", + "s_mean.plot()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "将频次均值与各年频次画在一个图中" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**1.3 样本方差、标准差、标准分及变异系数**" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "**方差**(variance)是在概率论和统计方差衡量随机变量或一组数据时离散程度的度量。\n", + "- 统计中的方差(样本方差)是每个样本值与全体样本值的平均数之差的平方值的平均数。\n", + "\n", + "**总体**:包含所研究的全部个体(数据)的集合。\n", + "\n", + "**样本**:从总体中抽取的一部分元素的集合。\n", + "\n", + "**样本容量**:构成样本的元素的数量称为样本容量(size)。\n", + "\n", + "样本方差计算公式为:\n", + "$$s^2 = \\frac{1}{n-1}\\sum_{i=1}^{n}(x_i-\\widetilde x)^2$$\n", + "\n", + "注意样本方差的公式中,分母为`n-1`。" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "47871.11111111111" + ] + }, + "execution_count": 58, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#python实现方差\n", + "def variance(freqs):\n", + " mean = sum(freqs)/len(freqs)\n", + " return sum([(freq-mean)**2 for freq in freqs])/(len(freqs)-1)\n", + "\n", + "freq_var = variance(freq_dict['天长地久'])\n", + "freq_var" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "上述代码用python实现了求样本方差。" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "47871.11111111111" + ] + }, + "execution_count": 59, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#pandas内置方差\n", + "s.var()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "而pandas内置求方差的函数var()更为简洁。· " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "**标准差**:标准差是方差的算术平方根。" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "218.7946779771188" + ] + }, + "execution_count": 60, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#pandas内置标准差\n", + "s.std()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Pandas内置std()函数,可得到序列s的标准差。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**标准分**:变量值与平均数的差除以标准差后的值,也称为**z分数**(z score)。\n", + "\n", + "标准分的计算公式为:\n", + "$$z_i=\\frac{x_i-\\widetilde x}{s}$$" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "year\n", + "2006 -0.895817\n", + "2007 -0.438768\n", + "2008 0.018282\n", + "2009 -0.210243\n", + "2010 -0.027423\n", + "2011 0.932381\n", + "2012 2.303530\n", + "2013 0.018282\n", + "2014 -0.438768\n", + "2015 -1.261457\n", + "Name: 2006-2015, dtype: float64" + ] + }, + "execution_count": 61, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(s-s.mean())/s.std()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "上述代码可得到s中所有数值的标准分,存放在一个Series对象中。\n", + "标准差的**经验法则**(当一组数据对称分布时):\n", + "- 约68%的数据在均值附近正负1个标准差内\n", + "- 约95%的数据在均值附近正负2个标准差内\n", + "- 约99%的数据在均值附近正负3个标准差内\n", + "在正负3个标准差以外的数据,称为**离群点(outlier)**。\n", + "\n", + "**切比雪夫不等式**:对任意分布的一组数据,至少有(1-1/k^2)的数据落在正负k个标准差以内(k>1)。" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "**变异系数**(离散系数):一组数据的标准差与该组数据均值之比。公式为:\n", + "$$v_i=\\frac{s}{\\widetilde x}$$\n", + "\n", + "该系数是测度离散程度的相对统计量,主要用于比较不同演变数据的离散程度(特别对均值差异较大的数据组)。" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0.5525118130735324" + ] + }, + "execution_count": 62, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#变异系数\n", + "s.std()/s.mean()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "变异系数可由标准差/均值直接得到。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**1.4 中位数、分位数、轴距与箱型图**" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**中位数**(median):中数是按顺序排列的一组数据中居于中间位置的数,即在这组数据中,有一半的数据比他大,有一半的数据比他小。如果观察值有偶数个,通常取最中间的两个数值的平均数作为中位数。" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "109.7979476168295" + ] + }, + "execution_count": 63, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s_norm.median()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Pandas内置了median()函数,即求中位数函数。" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false + }, + "source": [ + "**分位数**是将总体的全部数据按大小顺序排列后,处于各等分位置的变量值。\n", + "- 将全部数据分成相等的两部分,它就是中位数;如果分成四等分,就是四分位数;八等分就是八分位数。\n", + "- 四分位数也称为四分位点,它是将全部数据分成相等的四部分,其中每部分包括25%的数据,处在各分位点的数值就是四分位数。\n", + "- 四分位数有三个,第一个四分位数就是通常所说的四分位数,称为下四分位数,第二个四分位数就是中位数,第三个四分位数称为上四分位数,分别用Q1、Q2、Q3表示。" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "79.25069739255241" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s_norm.quantile(0.25)" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "174.83259076226759" + ] + }, + "execution_count": 65, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s_norm.quantile(0.75)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Pandas内置的quantile()函数可以求任意分位数,参数为0.25即Q1,参数为0.75即Q3。" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 66, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\ndUkqyP8A2wsQ0nwHpoQAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "s_norm.plot(kind='box')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "参数kind为`box`时,对应的就是**箱型图**。\n", + "\n", + "箱型图中间的箱型一般由三根线组成,由下至上分别对应Q1,Q2,Q3;而箱型以外的上下两根线,分别对应最大值与最小值(不含离群点)\n", + "\n", + "箱型图一般用于展示数值型数据,有助于对数据的整体分布有只管了解,特别有利于对离群点/异常点的观察。" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 67, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "#Series箱型图离群点/异常点显示,利用seaborn\n", + "sns.boxplot(s_norm)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "由于pandas内置的箱型图默认不含离群点,可直接利用seaborn中的boxplot函数,为Series对象绘制带离群点的箱型图。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**1.5 样本的累积和**(累积频数与累积频率)\n", + "\n", + "**累积频数**(cumulative frequencies),将各有序类别或组的频数逐级累加起来的频数。\n", + "\n", + "**累积频率**(cumulative percentages),将各有序类别或组的百分比逐级累加起来。" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "year\n", + "2006 200\n", + "2007 500\n", + "2008 900\n", + "2009 1250\n", + "2010 1640\n", + "2011 2240\n", + "2012 3140\n", + "2013 3540\n", + "2014 3840\n", + "2015 3960\n", + "Name: 2006-2015, dtype: int64" + ] + }, + "execution_count": 68, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s.cumsum()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Pandas内置了cumsum()函数,可以直接得到累积频数。" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 69, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\nQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "s.cumsum().plot()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "利用cumsum()得到的仍然是Series对象,可以直接绘图。" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 70, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "s_ratio = s/s.sum()\n", + "s_ratio.cumsum().plot()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "累积频率(累积百分比)可以类似的得到。\n", + "\n", + "`sum()`为内置的求Series对象中value和的函数。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**1.6 最大值、最小值、众数及总体描述**" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "900" + ] + }, + "execution_count": 71, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s.max()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "内置最大值函数max()" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "120" + ] + }, + "execution_count": 72, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s.min()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "内置最小值函数min()" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0 300\n", + "1 400\n", + "dtype: int64" + ] + }, + "execution_count": 73, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s.mode()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**众数**(mode):一组数据中出现次数最多的数据值。一般用于测度分类数据的集中趋势,在数据量较大的时候有意义。\n", + "Pandas内置mode()函数,可以直接得到众数,注意众数可能不唯一,如此时s的众数有两个。" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "count 10.000000\n", + "mean 396.000000\n", + "std 218.794678\n", + "min 120.000000\n", + "25% 300.000000\n", + "50% 370.000000\n", + "75% 400.000000\n", + "max 900.000000\n", + "Name: 2006-2015, dtype: float64" + ] + }, + "execution_count": 74, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s.describe()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "Pandas的descibe()函数,可以给出汇总与描述统计的常用值。其中count为数据个数。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**1.7 随机数、直方图、峰度与偏度**(公式以后有时间补充)" + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "np.random.seed(66)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "调用np中random模块的seed()方法,生成一个随机数种子,在这个种子下,每次第一次生成的随机数均相同。" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 1.41561436, -1.0852864 , -0.61630804, ..., 0.08479998,\n", + " -1.16755255, 1.13461007])" + ] + }, + "execution_count": 76, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr1 = np.random.randn(10000)\n", + "arr1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "利用random的randn()函数,生成一个numpy的array类型的对象,大小为10000,可理解为长度为10000的数组(所有数据元素类型相同)。\n", + "\n", + "数组内数据分布为正态分布。randn即random normal。" + ] + }, + { + "cell_type": "code", + "execution_count": 77, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 2.28112862, 0.51138372, 0.68988585, 0.67582702, 0.63808164,\n", + " -1.0410448 , -0.91601431, -1.64294384, 2.16465592, -0.67004449,\n", + " 0.46737616, 0.90362682, -0.34551556, -0.05367347, 0.46465691,\n", + " 1.37674635, -0.21249989, -2.14939938, -0.25040615, 1.43040674,\n", + " 0.27824394, 0.20567202, -0.68650085, 0.75210394, -1.12895709,\n", + " 0.68402948, -0.28490141, 0.29969392, 0.14210905, -0.11570231,\n", + " -0.48913203, -0.74924755, -1.52762847, -0.99353886, 1.81620157,\n", + " -1.20129803, -0.93263586, -0.36954506, 0.08467705, 0.61107937,\n", + " 0.50382233, -1.12408078, 0.398812 , 1.497698 , 0.78490215,\n", + " 0.55041055, -0.25888733, 0.39002582, -1.41102818, -2.09786379])" + ] + }, + "execution_count": 77, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr2 = np.random.randn(50)\n", + "arr2" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "与前类似,生成了一个长度为50的array,数据为正态分布。" + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "s_1 = Series(arr1)\n", + "s_2 = Series(arr2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Numpy的array类型可以直接初始化为Series类型的对象。" + ] + }, + { + "cell_type": "code", + "execution_count": 79, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 79, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "s_1.plot(kind='hist')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**直方图**(histogram):又称质量分布图,是数值数据分布的精确图形表示。\n", + "- 将值的范围分段,即将整个值的范围分成一系列间隔(一般要相等)\n", + "- 计算每个间隔中有多少值\n", + "\n", + "当plot()函数的kind参数为hist时,即代表直方图。\n", + "\n", + "此外,Pandas内置hist()函数,可对Series对象直接绘制直方图:`s_norm.hist()`。" + ] + }, + { + "cell_type": "code", + "execution_count": 80, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 80, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYMAAAD3CAYAAAD/oDhxAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAEzpJREFUeJzt3X2QXXV9x/H3JpsQYzeZdVxhFApV67foiFZQ0RgSHR5b\nEXW0dnwEWsQaiw84gBD+i0VaRMmoRZdGwI61GBQhNooj5SmiUKqOKHxpEOnY2nbFkKyGBJNs/zhn\n5WbZu3vvZc+9Z3ffr5nMnHvuPZvPJnfvZ3/ndx76xsbGkCTNbwt6HUCS1HuWgSTJMpAkWQaSJCwD\nSRLQ3+sAnRgZGW37EKjBwaVs27azijgzos75zNYZs3Wmztmg3vmmyzY0NNDX7Ll5MzLo71/Y6whT\nqnM+s3XGbJ2pczaod74nk23elIEkqTnLQJJkGUiSLANJEpaBJAnLQJKEZSBJwjKQJGEZSJKYpZej\nkOrq9I/d1PS5Dee9potJpPY4MpAkWQaSJMtAkoRlIEnCMpAkYRlIkrAMJElYBpIkLANJEpaBJAnL\nQJKEZSBJwgvVSR2Z6oJ00mxUaRlExEeA1wGLgc8AtwBXAmPAPcCazNwXEWcAZwJ7gHWZuanKXJKk\n/VVWBhGxGnglsAJYCnwYuBRYm5k3R8TlwCkRcQdwFnAUsAS4PSK+lZm7q8omtcoRgOaLKucMTgB+\nBHwVuAHYBBxJMToA2AwcC7wM2JKZuzNzO7AVOKLCXJKkCarcTfR04FDgtcAfANcDCzJzrHx+FFgO\nLAO2N2w3vr6pwcGl9PcvbDvQ0NBA29t0U53zme3Jq1vOuuVpVOdsUO98nWarsgweBu7LzMeAjIhd\nwCENzw8AjwA7yuWJ65vatm1n22GGhgYYGRlte7tuqXM+s82Mk8/+2qTre3EHtDr/u9U5G9Q733TZ\npiqKKncT3Q6cGBF9EfFM4KnAt8u5BICTgNuAO4GVEbEkIpYDh1NMLkuSuqSykUFmboqIYyg+7BcA\na4AHgeGIWAzcC2zMzL0RsZ6iGBYAF2TmrqpySZKeqNJDSzPznElWr5rkdcPAcJVZJEnNeQayJMky\nkCRZBpIkLANJEl6oTuq5Zpe86MX5B5q/HBlIkiwDSZJlIEnCMpAkYRlIkrAMJEl4aKkEeEczyZGB\nJMkykCRZBpIkLANJEpaBJAnLQJKEZSBJwjKQJOFJZ5pnPLlMmpwjA0mSZSBJsgwkSVQ8ZxAR/w7s\nKB8+CHwUuBIYA+4B1mTmvog4AzgT2AOsy8xNVeaSZjPvmawqVFYGEbEE6MvM1Q3rrgfWZubNEXE5\ncEpE3AGcBRwFLAFuj4hvZebuqrJJs4GT3eqmKkcGLwKWRsSN5d9zPnAkcEv5/GbgeGAvsKX88N8d\nEVuBI4C7mn3hwcGl9PcvbDvQ0NBA29t0U53zma3+2v13qPO/W52zQb3zdZqtyjLYCVwCXAH8IcWH\nf19mjpXPjwLLgWXA9obtxtc3tW3bzrbDDA0NMDIy2vZ23VLnfGabHdr5d6jzv1uds0G9802Xbaqi\nqLIM7ge2lh/+90fEwxQjg3EDwCMUcwoDk6yXJHVJlUcTnQ58HCAinkkxArgxIlaXz58E3AbcCayM\niCURsRw4nGJyWZLUJVWODP4BuDIibqc4euh04JfAcEQsBu4FNmbm3ohYT1EMC4ALMnNXhbkkSRNU\nVgaZ+Rjw1kmeWjXJa4eB4aqySJKm5klnkiTLQJJkGUiSsAwkSVgGkiQsA0kS3ulMmjO8mqmeDEcG\nkiTLQJLkbiLNUd4LQGqPIwNJkmUgSbIMJElYBpIkLANJEpaBJAkPLZXmPM9MViscGUiSLANJkmUg\nScIykCTR4gRyRPwL8Hngusz8bbWRpNadfPbXeh1BmhNaHRl8DDgR+I+I+HREvLTCTJKkLmtpZJCZ\ntwK3RsRTgDcB10bEDuAK4O8zc/dk20XEM4C7geOAPcCVwBhwD7AmM/dFxBnAmeXz6zJz05P7liRJ\n7Wp5ziAiVgOfAv4G+AbwfuAg4Pomr18EfBZ4tFx1KbA2M1cCfcApEXEQcBawAjgBuCgiDujoO5Ek\ndazVOYOHgJ9SzBu8LzMfLdffDNzVZLNLgMuBj5SPjwRuKZc3A8cDe4Et5chid0RsBY6Y4mtKkirQ\n6hnIrwFGM/P/IuIpEfHczNyamXuBl0x8cUScCoxk5jcjYrwM+jJzrFweBZYDy4DtDZuOr5/S4OBS\n+vsXthj9cUNDA21v0011zlfnbOpMnf9P65wN6p2v02ytlsGfAqdSfPA/A7ghIj6RmZ9r8vrTgbGI\nOBZ4MXB1ud24AeARYEe5PHH9lLZt29li7McNDQ0wMjLa9nbdUud8dc6mztX1/7Tu77c655su21RF\n0eqcwbuBlQCZ+RDFLp+/bvbizDwmM1dl5mrgB8A7gc3lvAPAScBtwJ3AyohYEhHLgcMpJpclSV3U\n6shgEdB4xNBjFEcFteNsYDgiFgP3Ahszc29ErKcohgXABZm5q82vK0l6klotg+uAmyLimvLxG2ly\nFNFE5ehg3KpJnh8GhlvMIUmqQEu7iTLzXGA9EMCzgfWZubbKYJKk7mnn2kT3AtdQjBJ+FRHHVBNJ\nktRtrZ5n8GngZOCBhtVjFIecSpJmuVbnDI4HYvxkM0nS3NLqbqKfUlxCQpI0B7U6MvgV8JOI+A7w\nu0M/M/P0SlJJkrqq1TL4RvlHkjQHtXoJ66si4jDgBcA3gUMy88Eqg0mSuqelOYOIeAtwA3AZ8DTg\njoh4e5XBJEnd0+oE8rnAKymvXAr8MY9fmlqSNMu1OmewNzNHIwKAzPxFROyrLpakqp3+sZsmXb/h\nPE8fmo9aLYMfR8T7gEUR8WLgvRRXI5UkzQGt7iZaAzyL4haWGyjuQ/DeqkJJkrqr1aOJfkMxR+A8\ngSTNQa1em2gfT7x/wS8y8+CZjyRJ6rZWRwa/250UEYuA1wOvqCqUJKm72rmENQCZ+dvM/DJesVSS\n5oxWdxO9s+FhH8WZyI9VkkiS1HWtHlr66oblMeCXwFtmPo40uWbHxEuaGa3OGZxWdRBJUu+0upvo\nQZ54NBEUu4zGMvPZM5pKUs94ZvL81Opuoi8Cu4Fh4LfA24CXAhdUlEuS1EWtlsEJmXlUw+PLIuLu\nzHyoilCSpO5q9dDSvog4dvxBRLyW4pIUkqQ5oNWRwbuBqyPiIIq5g/uAd021QUQspNitFOU276G4\nZeaV5eN7gDWZuS8izgDOBPYA6zJzU/vfiiSpUy2NDDLz7sx8AcUH+2GZ+arMfGCazU4ut10BrAU+\nClwKrM3MlRSTz6eUBXMWsAI4AbgoIg7o6LuRJHWk1TudHRoR3wLuAH4vIm4qb4PZVGZeRzGiADgU\neAQ4ErilXLcZOBZ4GbAlM3dn5nZgK3BEu9+IJKlzre4m+izwd8DFwP8C/wRcDRwz1UaZuScirgLe\nALwJOC4zxw9RHQWWA8uA7Q2bja9vanBwKf39C1uM/rihoYG2t+mmOuerczZ1RzffA3V/v9U5X6fZ\nWi2Dp2fmjRFxcflhPhwRa1rZMDPfFRHnAt8DntLw1ADFaGFHuTxxfVPbtu1sMfbjhoYGGBkZbXu7\nbqlzvjpnU/d06z1Q9/dbnfNNl22qomj1aKJHI+JgyhPPIuJVFOcdNBUR74iI8fsf7AT2Af8WEavL\ndScBtwF3AisjYklELAcOp5hcliR1Sasjgw8Cm4DnRMQPgKcBb55mm68An4+IW4FFwAeAeylGFYvL\n5Y2ZuTci1lMUwwLggszc1f63IknqVKtlcCDFGcfPAxYC92XmlFctLe+O9meTPLVqktcOUxyGKknq\ngVbL4G8z8+vAj6sMI0nqjVbL4IGI2EAxCfzo+MrMvLqSVJq3vFS11BtTTiBHxLPKxYcpThI7muLe\nBq8GVleaTJLUNdONDG4AXpKZp0XE2Zn58W6EkiR113SHlvY1LL+tyiCSpN6Zrgwab2jT1/RVkqRZ\nrdWTzmDyO51JkuaA6eYMXhARPy2Xn9Ww7O0uJWkOma4MnteVFJKknpqyDLytpSTND+3MGUiS5ijL\nQJJkGUiSWr82kTSjvAaRVC+ODCRJloEkyTKQJGEZSJJwAllSi5pN+m847zVdTqIqODKQJFkGkiTL\nQJKEZSBJwjKQJFHR0UQRsQjYABwGHACsA34CXElxx7R7gDWZuS8izgDOBPYA6zJzUxWZJEnNVTUy\neDvwcGauBE4EPgVcCqwt1/UBp0TEQcBZwArgBOCiiDigokySpCaqOs/gy8DGcrmP4rf+I4FbynWb\ngeOBvcCWzNwN7I6IrcARwF1TffHBwaX09y9sO9TQ0EDb23RTnfPVOZt6q4r3Rt3fb3XO12m2Ssog\nM38NEBEDFKWwFrgkM8fKl4wCy4FlwPaGTcfXT2nbtp1tZxoaGmBkZLTt7bqlzvnqnE29N9Pvjbq/\n3+qcb7psUxVFZRPIEXEI8K/AFzLzi8C+hqcHgEeAHeXyxPWSpC6qpAwi4kDgRuDczNxQrv5+RKwu\nl08CbgPuBFZGxJKIWA4cTjG5LEnqoqrmDM4HBoELI+LCct37gfURsRi4F9iYmXsjYj1FMSwALsjM\nXRVlkiQ1UdWcwfspPvwnWjXJa4eB4SpySJJa41VLJT0pXs10bvAMZEmSZSBJsgwkSVgGkiScQFbF\nmk0uau6b6v/eyeX6cWQgSbIMJEmWgSQJy0CShGUgScIykCRhGUiSsAwkSVgGkiQsA0kSXo5CM8TL\nTkizm2Ugqeu8IU79uJtIkmQZSJIsA0kSloEkCctAkkTFRxNFxMuBizNzdUQ8F7gSGAPuAdZk5r6I\nOAM4E9gDrMvMTVVmkiQ9UWUjg4g4B7gCWFKuuhRYm5krgT7glIg4CDgLWAGcAFwUEQdUlUmSNLkq\ndxM9ALyx4fGRwC3l8mbgWOBlwJbM3J2Z24GtwBEVZpIkTaKy3USZeW1EHNawqi8zx8rlUWA5sAzY\n3vCa8fVTGhxcSn//wrYzDQ0NtL1NN9U5X52zae4Yf5/V/f1W53ydZuvmGcj7GpYHgEeAHeXyxPVT\n2rZtZ9t/+dDQACMjo21v1y11zjeezUtOqGojI6O1/lmA2fGzOtXzzXTzaKLvR8Tqcvkk4DbgTmBl\nRCyJiOXA4RSTy5KkLurmyOBsYDgiFgP3Ahszc29ErKcohgXABZm5q4uZJElUXAaZ+TPg6HL5fmDV\nJK8ZBoarzCFJmppXLZVUG17NtHc8A1mSZBlIktxNpEl4CKk0/zgykCRZBpIky0CShGUgScIykCRh\nGUiS8NBSSbOAZyZXzzKYxzyfQNI4dxNJkhwZzAeOACRNx5GBJMmRgaTZy4nlmWMZzCHuDpLUKXcT\nSZIsA0mSu4kkzSPOMTRnGcxCzg1ImmmWgaQ5x1+Y2mcZSJr33H1kGdSav91I6pZalEFELAA+A7wI\n2A38ZWZu7W2qmedvH9LsMp9+ZmtRBsDrgSWZ+YqIOBr4OHBKjzN1jSMAaXaZiyVRlzJ4FfANgMz8\nbkQcVdVfNJP/iX6IS2rUjc+Eqgqnb2xsrJIv3I6IuAK4NjM3l4//E3h2Zu7pbTJJmh/qcgbyDmCg\n4fECi0CSuqcuZbAF+BOAcs7gR72NI0nzS13mDL4KHBcR3wH6gNN6nEeS5pVazBlIknqrLruJJEk9\nZBlIkiwDSVJ9JpC7JiL+CPgecGBm7up1HoCIeCrwRWAQeAx4V2b+V29TPS4ilgP/CCwDFgMfysw7\neptqfxHxBuDNmfnWGmSp/eVVIuLlwMWZubrXWcZFxCJgA3AYcACwLjOv72moUkQsBIaBAMaA92Tm\nPb1Ntb+IeAZwN3BcZt7X7vbzamQQEcsoLnWxu9dZJjgDuDszj6H40D2nx3km+hDw7cxcBZwKfLq3\ncfYXEZcBF1Gf9/PvLq8CnEfxnquNiDgHuAJY0ussE7wdeDgzVwInAp/qcZ5GJwNk5gpgLfDR3sbZ\nX1mknwUe7fRr1OWHp3IR0Qd8Djgf2NnjOPvJzE/y+Jvr94FHehhnMp+geKNBMZqsxYiqwXeAv+p1\niAb7XV4FqOzyKh16AHhjr0NM4svAheVyH1CbE08z8zrg3eXDQ6nfz+glwOXAf3f6BebkbqKI+Avg\ngxNWPwR8KTN/GBE9SFVoku20zLwrIm4CXggc1/1khWnyHUQxcvlA95NNme2fI2J1DyI1swzY3vB4\nb0T01+Ws+sy8NiIO63WOiTLz1wARMQBspPgNvDYyc09EXAW8AXhTr/OMi4hTgZHM/GZEfKTTrzNv\nzjOIiK3Az8uHRwN3lrtlaqWc0/h6Zj6n11kaRcQLgS8BHx6/hlSdlGXwnsz88xpkuRT4bmZeUz7+\neWYe3ONY+ynL4EuZeXSvszSKiEMoTkL9TGZu6HWeyZS/FH0PeH5m/qYGeW6lmMcYA14M3A+8LjP/\np52vMydHBpPJzOeOL0fEz4DjexZmgrLNf56ZXwB+DeztcaT9RMTzKYbwb8nMH/Y6zyywhWIf8zVe\nXqV1EXEgcCPwvsz8dq/zNIqIdwAHZ+ZFFLuZ95V/eq7xl9qIuJnil6K2igDmURnU3AbgqnI3yELq\ndzmOiygmGy8rd7Ftz8x5c7+JDnh5lc6cT3FE3YURMT53cFJmdjwpOoO+Any+/C18EfCBmuSaMfNm\nN5Ekqbl5czSRJKk5y0CSZBlIkiwDSRKWgSQJy0CShGUgSQL+H2pui1facR1rAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "s_1.plot(kind='hist',bins=50)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Plot()函数有一个重要参数`bins`,指定了间隔个数。此处将间隔数设为50." + ] + }, + { + "cell_type": "code", + "execution_count": 81, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 81, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n01gAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "s_1.plot(kind='kde')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**核密度估计图**(Kernel Density Estimation, KDE):采用平滑的峰值函数(“核函数”)来拟合观察到的数据点,从而对真实的概率分布曲线进行模拟。\n", + "Pandas的plot()函数中,参数kind的值为kde时,即可绘制KDE图。" + ] + }, + { + "cell_type": "code", + "execution_count": 82, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 82, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\nkykMAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "sns.distplot(s_1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Seaborn中内置的distplot()函数,可以直接对Series对象绘制直方图及KDE图的合一图。" + ] + }, + { + "cell_type": "code", + "execution_count": 83, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 83, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n3lJSMAAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "sns.distplot(s_2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "类似地,可以为s_2绘制histogram及kde图。" + ] + }, + { + "cell_type": "code", + "execution_count": 84, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(-0.0063696106929140347,\n", + " 0.027355468589977068,\n", + " -0.020933532783578457,\n", + " -0.20411177773807099)" + ] + }, + "execution_count": 84, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s_1.skew(),s_2.skew(),s_1.kurt(),s_2.kurt()," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**偏度**(Skewness)、偏态、偏态系数,是统计数据分布偏斜方向和程度的度量,是统计数据分布非对称程度的数字特征。正态分布的偏度为零。\n", + "- Skewness=0 分布形态与正态分布偏度相同\n", + "- Skewness>0 正偏差数值较大,为正偏或右偏。长尾巴拖在右边。\n", + "- Skewness<0 负偏差数值较大,为负偏或左偏。长尾巴拖在左边。\n", + "\n", + "**峰度**(Kurtosis)、峰态、峰态系数,是描述总体中所有取值分布形态陡缓程度的统计量。正态分布的峰度为3(也有很多将计算得到的峰度-3,而使正态分布峰度为零的做法)。\n", + "- Kurtosis=3(或0) 分布形态与正态分布峰度相同\n", + "- Kurtosis>3(或0) 正偏差数值较大,尖峰,厚尾。\n", + "- Kurtosis<3(或0) 负偏差数值较大,扁峰,薄尾。\n", + "\n", + "本例中,s_1比s_2更接近于正态分布。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3. Series类型基本操作整理\n", + "**3.1 创建与查看**\n", + "\n", + "创建一个Series的基本方法是:s = Series(data, index=index)。其中,data指代许多不同的数据类型:\n", + "- a Python dict\n", + "- an ndarray\n", + "- a scalar value (like 6)\n", + "\n", + "index指一个标签序列,一般用list类型。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**3.1.1 利用list创建Series**" + ] + }, + { + "cell_type": "code", + "execution_count": 85, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0 0\n", + "1 1\n", + "2 4\n", + "3 9\n", + "4 16\n", + "5 25\n", + "6 36\n", + "7 49\n", + "8 64\n", + "9 81\n", + "10 100\n", + "11 121\n", + "12 144\n", + "13 169\n", + "14 196\n", + "15 225\n", + "16 256\n", + "17 289\n", + "18 324\n", + "19 361\n", + "20 400\n", + "21 441\n", + "22 484\n", + "23 529\n", + "24 576\n", + "25 625\n", + "26 676\n", + "27 729\n", + "28 784\n", + "29 841\n", + " ... \n", + "70 4900\n", + "71 5041\n", + "72 5184\n", + "73 5329\n", + "74 5476\n", + "75 5625\n", + "76 5776\n", + "77 5929\n", + "78 6084\n", + "79 6241\n", + "80 6400\n", + "81 6561\n", + "82 6724\n", + "83 6889\n", + "84 7056\n", + "85 7225\n", + "86 7396\n", + "87 7569\n", + "88 7744\n", + "89 7921\n", + "90 8100\n", + "91 8281\n", + "92 8464\n", + "93 8649\n", + "94 8836\n", + "95 9025\n", + "96 9216\n", + "97 9409\n", + "98 9604\n", + "99 9801\n", + "dtype: int64" + ] + }, + "execution_count": 85, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s = Series([x*x for x in range(100)])\n", + "s" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 第一行利用一个list,创建了一个Series对象s\n", + "- 第二行查看该对象。\n", + "- 该对象由两部分组成,第一列为index,第二列为values。" + ] + }, + { + "cell_type": "code", + "execution_count": 86, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0 0\n", + "1 1\n", + "2 4\n", + "3 9\n", + "4 16\n", + "dtype: int64" + ] + }, + "execution_count": 86, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "数据太长,可用head()函数查看前几个数据。" + ] + }, + { + "cell_type": "code", + "execution_count": 87, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "90 8100\n", + "91 8281\n", + "92 8464\n", + "93 8649\n", + "94 8836\n", + "95 9025\n", + "96 9216\n", + "97 9409\n", + "98 9604\n", + "99 9801\n", + "dtype: int64" + ] + }, + "execution_count": 87, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s.tail(10)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "也可用tail()函数查看最后几个数据,head()及tail()函数内可放整型参数,代表列出的数据个数。" + ] + }, + { + "cell_type": "code", + "execution_count": 88, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100,\n", + " 121, 144, 169, 196, 225, 256, 289, 324, 361, 400, 441,\n", + " 484, 529, 576, 625, 676, 729, 784, 841, 900, 961, 1024,\n", + " 1089, 1156, 1225, 1296, 1369, 1444, 1521, 1600, 1681, 1764, 1849,\n", + " 1936, 2025, 2116, 2209, 2304, 2401, 2500, 2601, 2704, 2809, 2916,\n", + " 3025, 3136, 3249, 3364, 3481, 3600, 3721, 3844, 3969, 4096, 4225,\n", + " 4356, 4489, 4624, 4761, 4900, 5041, 5184, 5329, 5476, 5625, 5776,\n", + " 5929, 6084, 6241, 6400, 6561, 6724, 6889, 7056, 7225, 7396, 7569,\n", + " 7744, 7921, 8100, 8281, 8464, 8649, 8836, 9025, 9216, 9409, 9604,\n", + " 9801], dtype=int64)" + ] + }, + "execution_count": 88, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s.values" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "查看序列s的值" + ] + }, + { + "cell_type": "code", + "execution_count": 89, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "numpy.ndarray" + ] + }, + "execution_count": 89, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(s.values)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 查看s.values的类型\n", + "- Series对象的values的类型确实为numpy的array(数组)类型,即ndarray(n维数组)" + ] + }, + { + "cell_type": "code", + "execution_count": 90, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "RangeIndex(start=0, stop=100, step=1)" + ] + }, + "execution_count": 90, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s.index" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 查看s的index(索引)的值" + ] + }, + { + "cell_type": "code", + "execution_count": 91, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "pandas.indexes.range.RangeIndex" + ] + }, + "execution_count": 91, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(s.index)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 查看s.index的类型\n", + "- Series对象的索引在未指定时,为pandas内置的RangeIndex类型,类似于python的range类型。" + ] + }, + { + "cell_type": "code", + "execution_count": 92, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "e 0\n", + "d 1\n", + "n 4\n", + "b 9\n", + "w 16\n", + "dtype: int64" + ] + }, + "execution_count": 92, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s2 = Series([x*x for x in range(26)], index=set('abcdefghijklmnopqrstuvwxyz'))\n", + "s2.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用list创建Series对象时,可用index参数指定一个list或set对应索引。" + ] + }, + { + "cell_type": "code", + "execution_count": 93, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(pandas.indexes.base.Index,\n", + " Index(['e', 'd', 'n', 'b', 'w', 'o', 'm', 't', 'i', 'p', 'a', 'l', 'z', 'y',\n", + " 'u', 'x', 'k', 'j', 'f', 'v', 'c', 's', 'q', 'r', 'g', 'h'],\n", + " dtype='object'))" + ] + }, + "execution_count": 93, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(s2.index), s2.index" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 指定索引后,Series对象的索引是pandas内置的Index类型" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**3.1.2 利用dict创建Series**" + ] + }, + { + "cell_type": "code", + "execution_count": 94, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "喜欢 3000\n", + "恨 500\n", + "爱 7000\n", + "讨厌 1000\n", + "dtype: int64" + ] + }, + "execution_count": 94, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data = {'喜欢':3000,'爱':7000,'讨厌':1000,'恨':500}\n", + "s3 = Series(data)\n", + "s3" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 可用dict创建Series对象,则字典的键自动成为index" + ] + }, + { + "cell_type": "code", + "execution_count": 95, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "a NaN\n", + "b NaN\n", + "c NaN\n", + "爱 7000.0\n", + "dtype: float64" + ] + }, + "execution_count": 95, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s3 = Series(data, index = ['a','b','c','爱'])\n", + "s3" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 初始化时,也可以额外指定index。但是如果指定的index找不到对应的值,则该index对应值设为NaN(Not a Number)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**3.1.3 利用标量创建Series对象**" + ] + }, + { + "cell_type": "code", + "execution_count": 96, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "a 5\n", + "b 5\n", + "c 5\n", + "d 5\n", + "e 5\n", + "dtype: int64" + ] + }, + "execution_count": 96, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s0 = Series(5, index = ['a','b','c','d','e'])\n", + "s0" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用标量创建Series对象时,对象的值将均为标量的值" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**3.1.4 利用Series对象创建Series对象**" + ] + }, + { + "cell_type": "code", + "execution_count": 97, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "a NaN\n", + "b NaN\n", + "c NaN\n", + "爱 7000.0\n", + "dtype: float64" + ] + }, + "execution_count": 97, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s4 = Series(s3)\n", + "s4" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 这是最简单的利用Series对象创建Series对象的代码" + ] + }, + { + "cell_type": "code", + "execution_count": 98, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "喜欢 NaN\n", + "爱 7000.0\n", + "讨厌 NaN\n", + "中 NaN\n", + "dtype: float64" + ] + }, + "execution_count": 98, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s5 = Series(s4, index = ['喜欢','爱','讨厌','中'])\n", + "s5" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 与利用dict初始化类似,也可以额外指定index。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**3.2 访问Series对象的元素**" + ] + }, + { + "cell_type": "code", + "execution_count": 99, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(nan, 7000.0, 7000.0)" + ] + }, + "execution_count": 99, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s4[0], s4['爱'], s4.爱" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用位置索引或者index均可以访问对应元素\n", + "- 还可以利用index的值作为属性来访问对应元素" + ] + }, + { + "cell_type": "code", + "execution_count": 100, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "a NaN\n", + "b NaN\n", + "dtype: float64" + ] + }, + "execution_count": 100, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s4[0:2]" + ] + }, + { + "cell_type": "code", + "execution_count": 101, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "爱 7000.0\n", + "dtype: float64" + ] + }, + "execution_count": 101, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s4['喜欢':'爱']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 位置索引及index的切片访问也适用,但利用index切片是包含末端的" + ] + }, + { + "cell_type": "code", + "execution_count": 102, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['a', 'b', 'c', '爱'], dtype='object')" + ] + }, + "execution_count": 102, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s4.index" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 可以利用index属性访问Series对象的索引" + ] + }, + { + "cell_type": "code", + "execution_count": 103, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ nan, nan, nan, 7000.])" + ] + }, + "execution_count": 103, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s4.values" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 可以利用values属性访问Series对象的值" + ] + }, + { + "cell_type": "code", + "execution_count": 104, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "a nan\n", + "b nan\n", + "c nan\n", + "爱 7000.0\n" + ] + } + ], + "source": [ + "for k, v in s4.items():\n", + " print(k, v)" + ] + }, + { + "cell_type": "code", + "execution_count": 105, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "a\n", + "b\n", + "c\n", + "爱\n" + ] + } + ], + "source": [ + "for k in s4.keys():\n", + " print(k)" + ] + }, + { + "cell_type": "code", + "execution_count": 106, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "nan\n", + "nan\n", + "nan\n", + "7000.0\n" + ] + } + ], + "source": [ + "for v in s4:\n", + " print(v)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 可以类似dict一样迭代访问Series对象的各个元素" + ] + }, + { + "cell_type": "code", + "execution_count": 107, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "a\n", + "b\n", + "c\n", + "爱\n" + ] + } + ], + "source": [ + "for k in s4.index:\n", + " print(k)" + ] + }, + { + "cell_type": "code", + "execution_count": 108, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "nan\n", + "nan\n", + "nan\n", + "7000.0\n" + ] + } + ], + "source": [ + "for v in s4.values:\n", + " print(v)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 也可以利用index与values属性迭代访问" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**3.3 修改、删除、排序等基本运算**" + ] + }, + { + "cell_type": "code", + "execution_count": 109, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "a 10000.0\n", + "b NaN\n", + "c NaN\n", + "爱 7000.0\n", + "dtype: float64" + ] + }, + "execution_count": 109, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s4[0] = 10000\n", + "s4" + ] + }, + { + "cell_type": "code", + "execution_count": 110, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "a 10000.0\n", + "b NaN\n", + "c NaN\n", + "爱 4078.0\n", + "dtype: float64" + ] + }, + "execution_count": 110, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s4['爱'] = 4078\n", + "s4" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- Series对象内的值可以直接根据位置或index被赋值(修改)" + ] + }, + { + "cell_type": "code", + "execution_count": 111, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "a 666.0\n", + "b 666.0\n", + "c 666.0\n", + "爱 4078.0\n", + "dtype: float64" + ] + }, + "execution_count": 111, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s4[0:3] = 666\n", + "s4" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 可以切片式赋值" + ] + }, + { + "cell_type": "code", + "execution_count": 112, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "a 666.0\n", + "b 666.0\n", + "c 666.0\n", + "d 4078.0\n", + "dtype: float64" + ] + }, + "execution_count": 112, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s4.index = ['a', 'b', 'c', 'd']\n", + "s4" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- Series对象的index可以直接被赋值(修改),注意新的index的长度要与Series对象中index的长度一致。" + ] + }, + { + "cell_type": "code", + "execution_count": 113, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "喜欢 NaN\n", + "爱 4078.0\n", + "讨厌 NaN\n", + "中 NaN\n", + "e NaN\n", + "dtype: float64" + ] + }, + "execution_count": 113, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s4 = s3.reindex(['喜欢','爱','讨厌','中', 'e'])\n", + "s4" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 可用reindex方法来更改index,找不到对应值的index,则其值为NaN。" + ] + }, + { + "cell_type": "code", + "execution_count": 114, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "喜欢 NaN\n", + "爱 4078.0\n", + "讨厌 NaN\n", + "中 NaN\n", + "e NaN\n", + "dtype: float64" + ] + }, + "execution_count": 114, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s5 = s4.drop('e')\n", + "s4" + ] + }, + { + "cell_type": "code", + "execution_count": 115, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "喜欢 NaN\n", + "爱 4078.0\n", + "讨厌 NaN\n", + "中 NaN\n", + "dtype: float64" + ] + }, + "execution_count": 115, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s5" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 可利用drop函数删除指定索引及值,生成新的Series对象,但原series对象不变。" + ] + }, + { + "cell_type": "code", + "execution_count": 116, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "e NaN\n", + "中 NaN\n", + "喜欢 NaN\n", + "爱 8156.0\n", + "讨厌 NaN\n", + "dtype: float64" + ] + }, + "execution_count": 116, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s4+s5" + ] + }, + { + "cell_type": "code", + "execution_count": 117, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "e NaN\n", + "中 NaN\n", + "喜欢 NaN\n", + "爱 0.0\n", + "讨厌 NaN\n", + "dtype: float64" + ] + }, + "execution_count": 117, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s4-s5" + ] + }, + { + "cell_type": "code", + "execution_count": 118, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "e NaN\n", + "中 NaN\n", + "喜欢 NaN\n", + "爱 16630084.0\n", + "讨厌 NaN\n", + "dtype: float64" + ] + }, + "execution_count": 118, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s4*s5" + ] + }, + { + "cell_type": "code", + "execution_count": 119, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "e NaN\n", + "中 NaN\n", + "喜欢 NaN\n", + "爱 1.0\n", + "讨厌 NaN\n", + "dtype: float64" + ] + }, + "execution_count": 119, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s4/s5" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- Serires对象可以直接进行四则运算,运算规则是对应索引的值进行运算,整体运算结果仍然是Series对象。\n", + "- 如果索引值无法对应,则结果为NaN。" + ] + }, + { + "cell_type": "code", + "execution_count": 120, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "爱 4078.0\n", + "喜欢 NaN\n", + "讨厌 NaN\n", + "中 NaN\n", + "e NaN\n", + "dtype: float64" + ] + }, + "execution_count": 120, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s4.sort_values()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 按照values(值)进行排序,按值排序时,NaN将排在尾端" + ] + }, + { + "cell_type": "code", + "execution_count": 121, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "e NaN\n", + "中 NaN\n", + "喜欢 NaN\n", + "爱 4078.0\n", + "讨厌 NaN\n", + "dtype: float64" + ] + }, + "execution_count": 121, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s4.sort_index()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 按照index(索引)进行排序" + ] + }, + { + "cell_type": "code", + "execution_count": 122, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "爱 4078.0\n", + "喜欢 NaN\n", + "讨厌 NaN\n", + "中 NaN\n", + "e NaN\n", + "dtype: float64" + ] + }, + "execution_count": 122, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s4.sort_values(ascending=False)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 将ascending参数指定为False,则变为倒序排序" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**3.4 处理NaN值**" + ] + }, + { + "cell_type": "code", + "execution_count": 123, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "喜欢 1.0\n", + "爱 4078.0\n", + "讨厌 1.0\n", + "中 1.0\n", + "e 1.0\n", + "dtype: float64" + ] + }, + "execution_count": 123, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s5 = s4.fillna(1)\n", + "s5" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 可以利用内置fillna()函数,将NaN值替换为指定数值" + ] + }, + { + "cell_type": "code", + "execution_count": 124, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "喜欢 NaN\n", + "爱 4078.0\n", + "不讨厌 0.0\n", + "中 NaN\n", + "dtype: float64" + ] + }, + "execution_count": 124, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s6 = s4.reindex(['喜欢','爱','不讨厌','中'], fill_value = 0)\n", + "s6" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 可在reindex方法内利用fill_value参数,指定值来替换在重新索引时新出现的NaN值,\n", + "- 注意,fill_value参数与不会对原有NaN值进行替换。" + ] + }, + { + "cell_type": "code", + "execution_count": 125, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "e NaN\n", + "不讨厌 NaN\n", + "中 NaN\n", + "喜欢 NaN\n", + "爱 8156.0\n", + "讨厌 NaN\n", + "dtype: float64" + ] + }, + "execution_count": 125, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s4.add(s6)" + ] + }, + { + "cell_type": "code", + "execution_count": 126, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "e NaN\n", + "不讨厌 0.0\n", + "中 NaN\n", + "喜欢 NaN\n", + "爱 8156.0\n", + "讨厌 NaN\n", + "dtype: float64" + ] + }, + "execution_count": 126, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s4.add(s6, fill_value=0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 两个Series对象相加可用add方法,设置fill_value参数的值,替换非对齐index部分的NaN值。fill_value参数不会对运算前的NaN进行填充。\n", + "- 类似还有sub,div,mul方法,分别对应减法、除法及乘法。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**3.5 过滤**" + ] + }, + { + "cell_type": "code", + "execution_count": 127, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0 False\n", + "1 False\n", + "2 False\n", + "3 False\n", + "4 False\n", + "5 False\n", + "6 False\n", + "7 False\n", + "8 False\n", + "9 False\n", + "10 False\n", + "11 False\n", + "12 False\n", + "13 False\n", + "14 False\n", + "15 False\n", + "16 False\n", + "17 False\n", + "18 False\n", + "19 False\n", + "20 False\n", + "21 False\n", + "22 False\n", + "23 False\n", + "24 False\n", + "25 False\n", + "26 False\n", + "27 False\n", + "28 False\n", + "29 False\n", + " ... \n", + "70 True\n", + "71 True\n", + "72 True\n", + "73 True\n", + "74 True\n", + "75 True\n", + "76 True\n", + "77 True\n", + "78 True\n", + "79 True\n", + "80 True\n", + "81 True\n", + "82 True\n", + "83 True\n", + "84 True\n", + "85 True\n", + "86 True\n", + "87 True\n", + "88 True\n", + "89 True\n", + "90 True\n", + "91 True\n", + "92 True\n", + "93 True\n", + "94 True\n", + "95 True\n", + "96 True\n", + "97 True\n", + "98 True\n", + "99 True\n", + "dtype: bool" + ] + }, + "execution_count": 127, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s > 1000" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- Series对象进行比较等逻辑运算,结果仍然是一个Series对象,每一维度的值根据运算结果为True或False" + ] + }, + { + "cell_type": "code", + "execution_count": 128, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "32 1024\n", + "33 1089\n", + "34 1156\n", + "35 1225\n", + "36 1296\n", + "37 1369\n", + "38 1444\n", + "39 1521\n", + "40 1600\n", + "41 1681\n", + "42 1764\n", + "43 1849\n", + "44 1936\n", + "45 2025\n", + "46 2116\n", + "47 2209\n", + "48 2304\n", + "49 2401\n", + "50 2500\n", + "51 2601\n", + "52 2704\n", + "53 2809\n", + "54 2916\n", + "55 3025\n", + "56 3136\n", + "57 3249\n", + "58 3364\n", + "59 3481\n", + "60 3600\n", + "61 3721\n", + " ... \n", + "70 4900\n", + "71 5041\n", + "72 5184\n", + "73 5329\n", + "74 5476\n", + "75 5625\n", + "76 5776\n", + "77 5929\n", + "78 6084\n", + "79 6241\n", + "80 6400\n", + "81 6561\n", + "82 6724\n", + "83 6889\n", + "84 7056\n", + "85 7225\n", + "86 7396\n", + "87 7569\n", + "88 7744\n", + "89 7921\n", + "90 8100\n", + "91 8281\n", + "92 8464\n", + "93 8649\n", + "94 8836\n", + "95 9025\n", + "96 9216\n", + "97 9409\n", + "98 9604\n", + "99 9801\n", + "dtype: int64" + ] + }, + "execution_count": 128, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s[s>1000]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 可以利用逻辑运算的结果Series,对Series对象进行过滤,得到满足条件的Series" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**3.6 时间序列(Time Series)**示例" + ] + }, + { + "cell_type": "code", + "execution_count": 129, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "DatetimeIndex(['2012-01-01 00:00:00', '2012-01-01 00:00:01',\n", + " '2012-01-01 00:00:02', '2012-01-01 00:00:03',\n", + " '2012-01-01 00:00:04', '2012-01-01 00:00:05',\n", + " '2012-01-01 00:00:06', '2012-01-01 00:00:07',\n", + " '2012-01-01 00:00:08', '2012-01-01 00:00:09',\n", + " '2012-01-01 00:00:10', '2012-01-01 00:00:11',\n", + " '2012-01-01 00:00:12', '2012-01-01 00:00:13',\n", + " '2012-01-01 00:00:14', '2012-01-01 00:00:15',\n", + " '2012-01-01 00:00:16', '2012-01-01 00:00:17',\n", + " '2012-01-01 00:00:18', '2012-01-01 00:00:19',\n", + " '2012-01-01 00:00:20', '2012-01-01 00:00:21',\n", + " '2012-01-01 00:00:22', '2012-01-01 00:00:23',\n", + " '2012-01-01 00:00:24', '2012-01-01 00:00:25',\n", + " '2012-01-01 00:00:26', '2012-01-01 00:00:27',\n", + " '2012-01-01 00:00:28', '2012-01-01 00:00:29',\n", + " '2012-01-01 00:00:30', '2012-01-01 00:00:31',\n", + " '2012-01-01 00:00:32', '2012-01-01 00:00:33',\n", + " '2012-01-01 00:00:34', '2012-01-01 00:00:35',\n", + " '2012-01-01 00:00:36', '2012-01-01 00:00:37',\n", + " '2012-01-01 00:00:38', '2012-01-01 00:00:39',\n", + " '2012-01-01 00:00:40', '2012-01-01 00:00:41',\n", + " '2012-01-01 00:00:42', '2012-01-01 00:00:43',\n", + " '2012-01-01 00:00:44', '2012-01-01 00:00:45',\n", + " '2012-01-01 00:00:46', '2012-01-01 00:00:47',\n", + " '2012-01-01 00:00:48', '2012-01-01 00:00:49',\n", + " '2012-01-01 00:00:50', '2012-01-01 00:00:51',\n", + " '2012-01-01 00:00:52', '2012-01-01 00:00:53',\n", + " '2012-01-01 00:00:54', '2012-01-01 00:00:55',\n", + " '2012-01-01 00:00:56', '2012-01-01 00:00:57',\n", + " '2012-01-01 00:00:58', '2012-01-01 00:00:59',\n", + " '2012-01-01 00:01:00', '2012-01-01 00:01:01',\n", + " '2012-01-01 00:01:02', '2012-01-01 00:01:03',\n", + " '2012-01-01 00:01:04', '2012-01-01 00:01:05',\n", + " '2012-01-01 00:01:06', '2012-01-01 00:01:07',\n", + " '2012-01-01 00:01:08', '2012-01-01 00:01:09',\n", + " '2012-01-01 00:01:10', '2012-01-01 00:01:11',\n", + " '2012-01-01 00:01:12', '2012-01-01 00:01:13',\n", + " '2012-01-01 00:01:14', '2012-01-01 00:01:15',\n", + " '2012-01-01 00:01:16', '2012-01-01 00:01:17',\n", + " '2012-01-01 00:01:18', '2012-01-01 00:01:19',\n", + " '2012-01-01 00:01:20', '2012-01-01 00:01:21',\n", + " '2012-01-01 00:01:22', '2012-01-01 00:01:23',\n", + " '2012-01-01 00:01:24', '2012-01-01 00:01:25',\n", + " '2012-01-01 00:01:26', '2012-01-01 00:01:27',\n", + " '2012-01-01 00:01:28', '2012-01-01 00:01:29',\n", + " '2012-01-01 00:01:30', '2012-01-01 00:01:31',\n", + " '2012-01-01 00:01:32', '2012-01-01 00:01:33',\n", + " '2012-01-01 00:01:34', '2012-01-01 00:01:35',\n", + " '2012-01-01 00:01:36', '2012-01-01 00:01:37',\n", + " '2012-01-01 00:01:38', '2012-01-01 00:01:39'],\n", + " dtype='datetime64[ns]', freq='S')" + ] + }, + "execution_count": 129, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "rng = pd.date_range('1/1/2012', periods=100, freq='S')\n", + "rng" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- Pandas内置的date_range()函数,可以很方便的得到时间标签\n", + "- 第一个参数'1/1/2012'为时间字符串,表示开始时间\n", + "- 第二个参数periods为时间标签个数,此处设为100\n", + "- 第三个参数freq为时间频率间隔,此处的'S'表示间隔为秒,常用的为S,Min,H,D,M分别为秒、分、小时、天,月。" + ] + }, + { + "cell_type": "code", + "execution_count": 130, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "2012-01-01 00:00:00 18\n", + "2012-01-01 00:00:01 98\n", + "2012-01-01 00:00:02 182\n", + "2012-01-01 00:00:03 371\n", + "2012-01-01 00:00:04 193\n", + "Freq: S, dtype: int32" + ] + }, + "execution_count": 130, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ts = Series(np.random.randint(0, 500, len(rng)), index=rng)\n", + "ts.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 将时间标签作为Series对象的index,随机生成0-500间100个整数,作为Series对象的值。" + ] + }, + { + "cell_type": "code", + "execution_count": 131, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 131, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "ts.plot()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用plot()函数绘图" + ] + }, + { + "cell_type": "code", + "execution_count": 132, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "2012-01-01 00:00:00 244.950\n", + "2012-01-01 00:01:00 218.425\n", + "Freq: T, dtype: float64" + ] + }, + "execution_count": 132, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ts1 = ts.resample('Min').mean()\n", + "ts1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用resample()函数,可将时间序列重新抽样。\n", + "- 样本时间间隔根据resample()函数参数决定,本例中,样本时间间隔设为分钟(Min)\n", + "- 重新设定样本间隔后,可利用mean()函数,求得每个时间间隔内值的均值,作为新的index对应的值" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**3.7 输出**" + ] + }, + { + "cell_type": "code", + "execution_count": 133, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYAAAAD3CAYAAAAUl4NyAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xl01eW97/H3zjyQhAR2CIQZ5GEGhSqKILYqgiigxVpr\njx20aq319Jyz7rlt7Vq359jbe2y11drWnvZYxzqAYuuAsyjgVDVAgPBAGAKEISFkHvfwu3/sHUgs\nJGEnZE+f11osNr/9S/LdX3aez/6Nj8txHEREJP4khLsAEREJDwWAiEicUgCIiMQpBYCISJxSAIiI\nxKmkcBfQU16vz6mubgp3GREjNzcD9eME9eME9aKzeO+H253lOtVzUbMFkJSUGO4SIor60Zn6cYJ6\n0Zn6cWpREwAiItK3FAAiInGqR8cAjDHnAf9lrV1gjBkPPAI4wBbgdmut3xhzM3AL4AXutta+ZIxJ\nB54A8oF64EZrbaUxZg5wf3Dd1621P+3rFyYiIl3rdgvAGPO/gD8BacFF9wF3WWvnAS5gqTGmAPg+\nMBdYCPzcGJMK3AYUB9d9DLgr+D0eAq4HLgTOM8ac3XcvSUREeqInWwC7gKuBx4P/ngW8G3y8BrgM\n8AEbrLWtQKsxphSYTmCAv6fDuj8xxmQDqdbaXQDGmNeAS4Ci7gpxu7N68prihvrRmfpxgnrRmfpx\nct0GgLX2OWPM6A6LXNba9jvI1QM5QDZQ22Gdky3vuKzuc+uO7UmxlZX1PVktLrjdWepHB+rHCepF\nZ/Hej67CL5SDwP4Oj7OAGgIDelY3y7tbV0RE+lEoAVBkjFkQfLwIWAd8DMwzxqQZY3KASQQOEG8A\nFndc11pbB7QZY8YZY1wEjhms68VrEBGRk9hYerTL50MJgH8FfmqM+QBIAVZZaw8DDxAYyN8Gfmyt\nbQF+D0wxxqwHvgO0n+1zK/AkgeAostZ+FEIdIiJyClv3HuPB54q7XMcVRRPCOPG8H+/z4n2/5uep\nHyeoF53FYz/Kjzbyfx//FI/Xx+p7ror+W0GIiEj36prauH/lJppbvXxz8aQu11UAiIjECI/Xx4PP\nFXO0toWr5o7m/CkFXa6vABARiQF+x+F/Xi6htLyW8yYPYemFY7r9GgWAiEgMeGHdbj4uqeCs4Tl8\na/FEXK5T7vo/TgEgIhLl1m0+yEvvl5Gfm873rp5Gcg9vga0AEBGJYiV7j/HYq5bMtCR+sGIGWRkp\nPf5aBYCISJQqr2zgwdVbcLnge1dPY0hexml9vQJARCQK1TS08uvg6Z7fWjwJMzL3tL+HAkBEJMq0\ntHm5f+VmqupauXr+WOZ0c7rnqSgARESiiM/v56G/bqXsSD3zZwzlivNHhfy9FAAiIlHCcRyefGMn\nm3dVMWVMHjdcZnp0uuepKABERKLEKx+WsbaonBH5A/jusqkkJfZuCFcAiIhEgQ+3Hua5d3eTl53K\nP6+YQXpqj6Z075ICQEQkwpWUVfM/L5eQnho41z83K7VPvq8CQEQkgh2oaODB5zcD8L3lUyl0D+iz\n760AEBGJUMfqWvjVyk00t/r49pJJTBqd16ffXwEgIhKBmlo8/OrZTVTXt3LtxeOZMzm0c/27ogAQ\nEYkwHq+P3zxXTPnRRi6ZNZyF5444Iz9HASAiEkH8foc/vrgNu7+G2cbNdV86q1fn+ndFASAiEiEc\nx+GpN3fyia3EjBjIzVdOJiHhzAz+oAAQEYkYr3xYxlufHaDQnckd1/T8vv6hUgCIiESAdZsPHr/Q\n61+unUlGWvIZ/5kKABGRMNtYepRH1wQndbl2Zp9d6NUdBYCISBiVltfy0AtbSEp0ceeKGRQOzuy3\nn60AEBEJk/Kjjdy/chNen8Nty6YyvjCnX3++AkBEJAyqalu475mNNLZ4+ebiicwYP7jfa1AAiIj0\ns7qmNu59ZuPxq3znThsaljoUACIi/ai51cuvn93E4WNNXH7eSC4/b2TYalEAiIj0E4/Xz29XF7P3\ncD0XThvKigXjwlqPAkBEpB/4/Q7//eJWtu2tZub4wdy4qHfTOfYFBYCIyBnmOA6PvrqdT4O3eLht\n2RQSE8I//Ia/AhGRGLdq7S7WbT7EqCFZfP/L08/4LR56KqRJJY0xycCjwGjAB9wMeIFHAAfYAtxu\nrfUbY24Gbgk+f7e19iVjTDrwBJAP1AM3Wmsre/dSREQiz8sf7GXNR/sYkpfBD67tm7l8+0qoWwCL\ngSRr7QXAfwA/A+4D7rLWzgNcwFJjTAHwfWAusBD4uTEmFbgNKA6u+xhwV+9ehohI5HmnqPz4/X3+\n7Sszyc5MCXdJnYQaADuAJGNMApANeIBZwLvB59cAlwDnAhusta3W2lqgFJgOXAi8+rl1RURixodb\nD/PEa5asjGT+7bqzGZSTFu6S/kGo2yINBHb/bAcGA0uA+dZaJ/h8PZBDIBxqO3zdyZa3L+uW250V\nYrmxSf3oTP04Qb3orL/78fG2w/zp5RIy0pL4z1suYNzwgf3683sq1AD4AfCatfaHxpgRwNtAx22b\nLKAGqAs+7mp5+7JuVVbWh1hu7HG7s9SPDtSPE9SLzvq7HyV7j/GrlZtJSnBxxzXTyU5NDOv/R1fh\nF+ouoGpOfII/BiQDRcaYBcFli4B1wMfAPGNMmjEmB5hE4ADxBgLHETquKyIS1UrLa3nguWLA4XvX\nTGPCiMj85N8u1C2AXwEPG2PWEfjk/yPgE+CPxpgUoARYZa31GWMeIDDAJwA/tta2GGN+DzxqjFkP\ntAHX9/aFiIiE074j9fz62U14vH5uWzaVqWMGhbukbrkcx+l+rcjgaLP2BG3md6Z+nKBedNYf/ThU\n1cj/e/IzGpo83LRkMudPLTijP+90uN1Zp7zcWBeCiYj0QkV1E794qoj6Jg9fX2giavDvjgJARCRE\nx+pa+MVTG6lpaOO6L45nwdmF4S7ptCgARERCUNvQyi+eKqKqroXl88dy2bnhu61zqBQAIiKnqa6p\njV88vZEj1c1ccf4orrxgdLhLCokCQETkNDQ0e7j36Y0cPNrIpbNHcPX8seEuKWQKABGRHmpq8XLf\nMxvZX9HAxWcXct2Xxof9nv69oQAQEemB5lYvv1q58fhsXl+7bEJUD/6gABAR6VZLm5dfr9zErvI6\n5kwZwjcWTSQhygd/UACIiHSp1ePjgVWb2XmglnMn5fPtKyaRkBD9gz8oAERETqktOPhv31fDLOPm\npiWTI2Iqx74SO69ERKQPtXl8/Oa5zZSUBSZxv+WqKSQlxtaQGVuvRkSkD3i8Pn7zfDFb9wYG/+8u\nnxpzgz8oAEREOjk++O85xvRxg7htWWwO/qAAEBE5rn3w37I7MPjfvnwayUmxO0zG7isTETkNHQf/\naWMHcfvyqTE9+EPoE8KIiMQMj9fHb54rZsue9k/+U0lOSgx3WWecAkBE4lqbp/M+/1jf7dORAkBE\n4lb7RV4lZdVxN/iDAkBE4lRrm4/7V21i+74aZo4fzG3LYn+f/+cpAEQk7jS3erl/1WZ27K9h1gQ3\ntyyNvYu8ekIBICJxpaklcFfPXeV1zJ6Yz3eunByXgz8oAEQkjjS2eLjvmY3sOVTPnMlD+PaSSTF1\nb5/TpQAQkbhQ39TGvU9vZF9FA3OnFfDNRbFzV89QKQBEJObVNLRy79MbKT/ayIKZw7hhoYmJ+/n3\nlgJARGJaZXUz//XkZxypbuaS2cP56pfOivqZvPqKAkBEYlZFTTP3PbORiupmrjh/FFfPH6vBvwMF\ngIjEpINHG/nl00XUNLSxfP5YrrxgdLhLijgKABGJOWWH67n3mY00NHv49lVTmTs5P9wlRaT4Pf9J\nRGJS6YFa7nmqiMZmDzdeblh20bhwlxSxtAUgIjFj695j/Oa5zXi9DjdfOZk5UwrCXVJEUwCISEz4\n1Fbyh79tAeD25VM5e4I7zBVFPgWAiES9DcWH+PMr20lOSuCOa6YxeXReuEuKCiEHgDHmh8BVQArw\nO+Bd4BHAAbYAt1tr/caYm4FbAC9wt7X2JWNMOvAEkA/UAzdaayt780JEJD69+cl+/vLmTjLTkvjn\nFTMYV5gT7pKiRkgHgY0xC4ALgLnARcAI4D7gLmvtPMAFLDXGFADfD663EPi5MSYVuA0oDq77GHBX\nL1+HiMQZx3F4Yd1u/vLmTnIyU/j368/R4H+aQj0LaCFQDKwGXgReAmYR2AoAWANcApwLbLDWtlpr\na4FSYDpwIfDq59YVEekRv+Pwlzd28rcNe3EPTOOHN5zD8PwB4S4r6oS6C2gwMApYAowB/gYkWGud\n4PP1QA6QDdR2+LqTLW9f1i23OyvEcmOT+tGZ+nFCLPfC4/Vz/9NFvFt0gNFDs/npd84nLzuty6+J\n5X70RqgBUAVst9a2AdYY00JgN1C7LKAGqAs+7mp5+7JuVVbWh1hu7HG7s9SPDtSPE2K5F61tPn67\nOjB5+/jCHO5cMR1fq4fKSs8pvyaW+9ETXYVfqLuA1gOXG2NcxphhQCbwVvDYAMAiYB3wMTDPGJNm\njMkBJhE4QLwBWPy5dUVETqmh2cMvni5iS3Dy9n+9biaZacnhLiuqhbQFEDyTZz6BAT4BuB3YA/zR\nGJMClACrrLU+Y8wDBAb4BODH1toWY8zvgUeNMeuBNuD6PngtIhKjjtW1cO8zGzlU1cT5Uwr45uKJ\ncTuLV19yOY7T/VqRwYnnzbjPi/fN2s9TP06ItV6UVzZw37ObqK5vZeG5I1hx8fjTupd/rPXjdLnd\nWadsli4EE5GItWN/DQ+s2kxTq5cVF49j0Xmjwl1STFEAiEhEKtpRyUN/24rf73DTkklcMHVouEuK\nOQoAEYk473x2gCfe2EFKUiLf+/I0po0dFO6SYpICQEQihuM4PP/ebl7+oIysjGT+ecUMxgzNDndZ\nMUsBICIRwevz88ia7by/5TD5uen8y7UzyM/NCHdZMU0BICJh19zq5beri9m2t5oxQ7O5c8V0sjNS\nwl1WzFMAiEhYHatr4dcrN3OgsoGZ4wdzy1VTSE1JDHdZcUEBICJhc6CigV+tDJzjf/E5hXztkgkk\nJPT8HH/pHQWAiITFlj1V/G71FlrafKy4eByXnzsS12lc4CW9pwAQkX733qaDPPaqJSHBxa1Lp3Du\npCHhLikuKQBEpN/4HYfVwdM8B6Qnc8c10zhr+MBwlxW3FAAi0i/aPD7+9HIJn2yvID83nR+smMGQ\nPJ3mGU4KABE542ob2/jNc5vZfbCOCcNzuP3qaWTpNM+wUwCIyBl1oLKB+1dupqquhfOnFPCNRRNJ\nTtKtnCOBAkBEzpjNu47y0F+30tLmY9m8MVx5wWid6RNBFAAi0uccx+HNTw7w9Ns7SUpM0Jk+EUoB\nICJ9yuvz85c3drB240FyMlO445rpjB2mG7pFIgWAiPSZhmYPv1tdzPZ9NYzIH8CdX55OXnZauMuS\nU1AAiEifKD/ayAOrNlFZ08I5E9zctGQSaSkaYiKZ/ndEpNc2lR7lD38LHOxdcsFols0bc1rz9kp4\nKABEJGSO4/DKh2U8/+5ukpIS+M5Vk5kzuSDcZUkPKQBEJCRtHh9/XrOdj7YdITcrlTuumcboAh3s\njSYKABE5bVW1LTz4fDFlR+oZX5jD7cunkjMgNdxlyWlSAIjIabH7qvndC1uob/Iwb/pQbrjM6Mre\nKKUAEJEecRyHtz8r5+m3dgLw9csmsODsQl3ZG8UUACLSrTaPj8des7y/5TDZGcl8d/k0JozQbZyj\nnQJARLp0tLaZ3z6/hbIj9YwZmsXty6fp4q4YoQAQkVPatvcYD/11Kw3N7fv7J5CcpAnbY4UCQET+\ngd9xWPNhGc+/t5sEl4uvLzQsmDlM+/tjjAJARDppavHyPy9vo2jnUXKzUvnusqmMK8wJd1lyBigA\nROS4/RUN/HZ1MRXVzUwcOZBbl04lO1Mzd8UqBYCIALCh+BCPv2Zp8/pZNGckV88fS2KCzu+PZQoA\nkTjn8fp48o2dvLfpIOmpSdyxdApnn+UOd1nSD3oVAMaYfOBT4FLACzwCOMAW4HZrrd8YczNwS/D5\nu621Lxlj0oEngHygHrjRWlvZm1pE5PQdqW7i96u3sK+igZH5A/ju8qnk52aEuyzpJyFv3xljkoE/\nAM3BRfcBd1lr5wEuYKkxpgD4PjAXWAj83BiTCtwGFAfXfQy4K/SXICKh+GR7BT/989/ZV9HARTOH\n8aOvz9LgH2d6swXwS+Ah4IfBf88C3g0+XgNcBviADdbaVqDVGFMKTAcuBO7psO5PevID3e6sXpQb\ne9SPztSPE7rqhcfr4+EXt/LS+j2kpiTyL9efw8WzRvRjdf1P742TCykAjDHfACqtta8ZY9oDwGWt\ndYKP64EcIBuo7fClJ1vevqxblZX1oZQbk9zuLPWjA/XjhK56caS6iYde2ErZkXqGDc7ktmVTKRyc\nGdO9i/f3RlfhF+oWwLcAxxhzCTCTwG6c/A7PZwE1QF3wcVfL25eJyBn0cckRHlmznZY2HxdOH8rX\nLp1AarKu6o1nIQWAtXZ++2NjzFrgVuAXxpgF1tq1wCLgHeBj4GfGmDQgFZhE4ADxBmBx8PlFwLrQ\nX4KIdKXV4+OpN3fw3qZDpCYncvOSyZw/VbN2Sd+eBvqvwB+NMSlACbDKWuszxjxAYIBPAH5srW0x\nxvweeNQYsx5oA67vwzpEJOhARQMP/W0rB482MjJ/ALcsncLQQZnhLksihMtxnO7XigxOPO/H+7x4\n36/5eerHCW53FhUVdawtKufpt0vxeP18adZwrr14XFzeyC3e3xtud9Ypb+CkC8FEYkxdYxsPPl9M\n0c6jZKYlcetVUzh7gi7skn+kABCJISVl1Tz8SglVtS1MHDmQm5ZM1r375ZQUACIxwOvz8/x7u3nt\no30kJLi45qKxLDpvFAkJun2znJoCQCTKHTzayH+/uJV9RxrIz03n3//pC+Sm61dbuqd3iUiUap+k\n/dl3Agd6500fylcvOYsRhblxfdBTek4BIBKFqutb+fMrJWzZc4zMtCRuXjKZ2RPzu/9CkQ4UACJR\n5u/bK3js1e00tniZOjaPby2exMABqeEuS6KQAkAkSjS2eHjy9R18uO0IKUkJfO3SCXzxnELN0ysh\nUwCIRIEtu6t4+JUSahraGDssm5uWTKYgT7dult5RAIhEsOZWL8+8Xcp7mw6SmOBi+fyxLJ4zUlM1\nSp9QAIhEqJKyah5+uYSquhaGuzP59hWTGVWg+9pL31EAiESY5lYvq9bu4p2ichJcLpZcMJqr5o4m\nKVGf+qVvKQBEIsjWvcd45JXtVNW1UDg4k29dMYkxQ7PDXZbEKAWASARoavHw7DulvLfp0PFP/Vde\nMJrkJH3qlzNHASASZkU7K3n8NUtNQxvD3QP49hWTtK9f+oUCQCRMahvbeOrNHXxcUkFSoovl88aw\naM4o7euXfqMAEOlnjuOwvvgQz75dSmOLl3HDsvnG4kkUDtZMXdK/FAAi/ehIdROPvWopKasmNSWR\nr106gYvPLtRtmyUsFAAi/cDr87Pmo328uGEvXp+fGeMG8fWFRpO1SFgpAETOsB37a3j01e0cqmoi\nJzOF6y+dwGzj1j18JOwUACJnSH1TGyvf2cX64kO4gIvPLuSai8aRkaZfO4kMeieK9DG/47B+8yFW\nvhM4yDsifwD/tNAwrjAn3KWJdKIAEOlDZYfrefx1y+6DdaSmJHLdl87iS7MKdfM2iUgKAJE+0Nji\n4fn3drP2s3Ic4AsT8/nKF8frIK9ENAWASC/4/Q7rNh/kuXd309DsYeigDL526QQmj84Ld2ki3VIA\niIRoV3ktT7yxg7LD9aSmJLJiwTgu/cIIXckrUUMBIHKaqutbWbW2lA+2HgFgzpQhrFgwntwszcsr\n0UUBINJDbR4fr/99Py9/UEarx8fIIQO4/pIJTBgxMNyliYREASDSDcdx+LikglVrS6mqayU7I5mv\nXnIWF04bqls4SFRTAIh0YdfBWp55q5TS8lqSEl1cft5Ilpw/WhdzSUzQu1jkJCprmnnu3V18XFIB\nwCzjZsWCceTnZoS5MpG+owAQ6aCh2cPLH+zlrU8P4PU5jBmaxbUXj8eMzA13aSJ9LqQAMMYkAw8D\no4FU4G5gG/AI4ABbgNuttX5jzM3ALYAXuNta+5IxJh14AsgH6oEbrbWVvXspIqFr8/h489MDvPxB\nGc2tXgZlp/HlBeP4wqR8EnTTNolRoW4B3ABUWWu/bozJAzYG/9xlrV1rjHkIWGqM+QD4PjAbSAPW\nG2PeAG4Diq21/8cYcx1wF3Bnb1+MyOny+f28X3yYF9bvobq+lcy0JL7yxfF88ZxCkpMSw12eyBkV\nagCsBFYFH7sIfLqfBbwbXLYGuAzwARusta1AqzGmFJgOXAjc02Hdn4RYh0hIHMfhU1vJ6nW7OVTV\nRHJSAovmjOSKOaPISEsOd3ki/SKkALDWNgAYY7IIBMFdwC+ttU5wlXogB8gGajt86cmWty/rltut\nibI7Uj8660k/HMehyFby+KsllO6vISHBxcI5o/jqZYZBOen9UGX/0HujM/Xj5EI+CGyMGQGsBn5n\nrf2LMeaeDk9nATVAXfBxV8vbl3WrsrI+1HJjjtudpX500JN+7Nhfw/Pv7mLHgcBnjy9MzGf5/LEU\n5GXgb/PGTD/13ugs3vvRVfiFehB4CPA68D1r7VvBxUXGmAXW2rXAIuAd4GPgZ8aYNAIHiycROEC8\nAVgcfH4RsC6UOkR6ovRALS+s3822vdUAzBw/mGXzxjByiD4VSnwLdQvgR0Au8BNjTPv++zuBB4wx\nKUAJsMpa6zPGPEBggE8AfmytbTHG/B541BizHmgDru/VqxA5iV3ltfx1/R627DkGwJTRuSybN1YT\ns4gEuRzH6X6tyODE82bc58X7Zu3ndexH6YFa/rphD1uDA/+kUbksvXBM3NyzR++NzuK9H2531inP\nY9aFYBITHMfB7qvmxff3Ht/VM3HkQJZeOEYXcYmcggJAoprjOGzZc4xXn95Iyd74/MQvEioFgEQl\nv9/hE1vBKx+Wse9IAwAzxg1iyQWjtY9fpIcUABJVPF4fG7Yc5tWP9lFR3YzLFTid84bFk8lK0Uxc\nIqdDASBRoaHZwztF5bz1yX7qmjwkJbqYP2MYi84byZC8jLg/0CcSCgWARLSK6ibe+PsB1hUfpM3j\nJz01kUVzRnLJrBGaglGklxQAEnEcx2HngVpe//t+inZU4gC5Waksu3AEF80cRnqq3rYifUG/SRIx\nPF4/H5cc4Y1P9h8/sDuqIIuF545gtsknKVH7+EX6kgJAwq66vpV3isp5b2M5dU0eXK7ADFyXzh7B\nWcNzcOl+/CJnhAJAwsJxHLbvq+GdonI+s5X4HYfMtCQuP3ckXzynkMEDY+fOnCKRSgEg/aqpxcOG\nLYdZW1TOoaomAIa7B3DJ7OGcN3kIqcmahEWkvygA5IxzHIddB+t4t6icv2+voM3rJzHBxZzJQ7j4\nnELGF2o3j0g4KADkjKlvauODrUdYt/kg5ZWNALgHpjF/xjDmTR9GdmZKmCsUiW8KAOlTfr/D1r3H\nWLf5EBt3VuL1OSQmuJg9MZ8FM4cxcVSuJlkXiRAKAOkTh6oaWV98iA+2HKamoQ2AYYMzmT99KHOm\nFpCdoU/7IpFGASAhq2ts46OSI7y/5TBlhwO3YUhPTWLB2YXMnVbA2KHZ2rcvEsEUAHJamlu9FO2s\n5MNtR9i2pxq/45DgcjF93CDOn1LAORMGk5ykM3lEooECQLrV6vFRvKuKj0uOsHlXFW1ePwBjhmYx\nZ3IB504eQo4O6IpEHQWAnFT7oP+JrWBTaRWtHh8ABXkZzJk8hPMmD2FIXkaYqxSR3lAAyHFNLV42\n7zrKZzsq2by7ijZP4JO+e2Aa504azhcm5jMif4D264vECAVAnKuub2Vj6VGKdlRSUlaNz+8AMCQ3\nndkT85lt8hk5RIO+SCxSAMQZv+NQdriezbuq2Fh69PjZOwAjhwzgnAluzjnLTaE7U4O+SIxTAMSB\nhmYP2/Yeo3h3FcW7j1HXGDhPPzHBxZTRucw8y82M8YMYnKMbsInEEwVADPL6/Ow5VMfWPcfYuvcY\nuw/W4QT27JCdkczcaQXMGDeYyaPzyEjTW0AkXum3Pwb4HYcDFQ1s31fD9rJqtu+rpqUtcNZOgsvF\n+MIcpo7JY+rYQYwqyNKtGEQEUABEJb/fYXd5LR9uKmfH/hrs/hoamj3Hnx+Sm875U/OYMjqPiSMH\nkpGWHMZqRSRSKQCiQGubjz2H6thZXsvOAzXsKq+judV7/Pm87FTmjitg4qhcJo7MZVBOWhirFZFo\noQCIMH7H4XBVE3sO1bH7UB27yms5UNGIv30nPoFP+HOnD2NUfiYTRgxkcE6aztgRkdOmAAgjv9/h\nSHUTZYfrKTtST9nhevYerj++/x4gKTGBscOyGTssm7OGD2T88BxyMlNwu7OorKzv4ruLiHRNAdBP\nGpo9lFc2cKCykQOVDeyvaOBAZcPxq20BXEDBoAzGDM0+/mfkkAEkJSaEr3ARiVkKgD7kdxxq6ls5\nfKyJw8eaOHS0iYNVjRysaqQ2eI/8dokJLoYOymRE/gBGF2QxqiCLEfkDSE/Vf4mI9A+NNqepzeOj\nqq6FqtoWKmtbqKxu5kh1E5U1zVRUNx+/U2ZHg7JTmT5uEIWDMxnuHkChO5NhgzP1yV5EwipsAWCM\nSQB+B8wAWoGbrLWl4arH73eob/ZQ19hGXWMbNQ2twT9tHKtr4Vh9K9V1LdQ1eU769anJiRTkZVAw\nKIMhuRkU5GUwdHDg77QU5ayIRJ5wjkzLgDRr7fnGmDnAvcDSnn6x4zj4HQe/38Hrc/B4/Xh9ftq8\nfto8Plrb/7T5aG710dLmpbnVS2OLl6YWL40tHhqbPdQ3e2gI/ulwos0/SE5KIC8rlUL3AAbnpDE4\nJ41BOWnkD8zAnZtOdkayzsQRkagSzgC4EHgVwFr7oTFmdlcrf+XHLwcPmDo4DsfvWtkbLiAzPZkB\n6ckU5GWQnZlCdmYKORkpDMxKZeCAFHIyU8nLTmVAugZ4EYkt4QyAbKC2w799xpgka633ZCuPKsjG\n5/fjcrnAiyNKAAADXklEQVRwAYmJCSQmuEhKTCAx0UVKUiLJyQkkJyaQlppEanIiaSmJpKcmkZGW\nRHpaMhmpSQzISA4O+ilkpieTmBC9g7rbnRXuEiKK+nGCetGZ+nFy4QyAOqDj/0rCqQZ/gHvumNd3\n5707Dq1NrbQ2tfbN9wsDXQfQmfpxgnrRWbz3o6vwC+dpKBuAxQDBYwDFYaxFRCTuhHMLYDVwqTHm\nfQK7478ZxlpEROJO2ALAWusHbg3XzxcRiXe6EklEJE4pAERE4pQCQEQkTikARETilAJARCROuZyu\nboAjIiIxS1sAIiJxSgEgIhKnFAAiInFKASAiEqcUACIicUoBICISpxQAIiJxKuJnK4+0yePDwRiT\nDDwMjAZSgbuBbcAjgANsAW4P3mE1Lhhj8oFPgUsBL/Hdix8CVwEpBH5X3iVO+xH8XXmUwO+KD7iZ\nOH9/dCUatgCOTx4P/G8Ck8fHmxuAKmvtPOBy4EHgPuCu4DIXsDSM9fWr4C/5H4Dm4KJ47sUC4AJg\nLnARMII47geBSaaSrLUXAP8B/Iz47keXoiEAOk0eD3Q5eXyMWgn8JPjYReATzSwCn/QA1gCXhKGu\ncPkl8BBwMPjveO7FQgKz6a0GXgReIr77sQNICu45yAY8xHc/uhQNAXDSyePDVUw4WGsbrLX1xpgs\nYBVwF+Cy1rbfx6MeyAlbgf3IGPMNoNJa+1qHxXHZi6DBBD4UrSAwwdKTBObXjtd+NBDY/bMd+CPw\nAPH9/uhSNATAaU0eH6uMMSOAd4DHrbV/ATruw8wCasJSWP/7FoGpRNcCM4HHgPwOz8dTLwCqgNes\ntW3WWgu00HmAi7d+/IBAPyYQOG74KIFjI+3irR9dioYAiPvJ440xQ4DXgX+31j4cXFwU3P8LsAhY\nF47a+pu1dr619iJr7QJgI/BPwJp47EXQeuByY4zLGDMMyATeiuN+VHNij8ExIJk4/V3piYi/G2iH\ns4CmE5w83lq7PbxV9S9jzP3AVwhs1ra7k8DmbQpQAtxsrfWFobywCW4F3Epga+iPxGkvjDH3ABcT\n+ED3I2APcdoPY8wAAmfMDSXw+u8HPiFO+9GdiA8AERE5M6JhF5CIiJwBCgARkTilABARiVMKABGR\nOKUAEBGJUwoAEZE4pQAQEYlT/x+WlTQ50y9NAQAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "s.plot()\n", + "plt.savefig('test.jpg')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用内置的plot()函数展示图片后,可利用plt的savefig()函数将图片保存为文件输出。\n", + "- 可以查看当前目录下的test.jpg文件,与当前显示一致。" + ] + }, + { + "cell_type": "code", + "execution_count": 134, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "s.to_csv('test.csv')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用to_csv()函数,可将Series对象输出为.csv文件\n", + "- 可在当前目录下,找到test.csv,双击打开查看" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.0" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} From efa31027a6efc4f27f57f3a637a27bdf796bee07 Mon Sep 17 00:00:00 2001 From: liupengyuan Date: Sat, 14 Oct 2017 21:48:08 +0800 Subject: [PATCH 29/44] Delete pandas Tutorial (Series).ipynb --- chapter4/pandas Tutorial (Series).ipynb | 2089 ----------------------- 1 file changed, 2089 deletions(-) delete mode 100644 chapter4/pandas Tutorial (Series).ipynb diff --git a/chapter4/pandas Tutorial (Series).ipynb b/chapter4/pandas Tutorial (Series).ipynb deleted file mode 100644 index 4ac93aff4..000000000 --- a/chapter4/pandas Tutorial (Series).ipynb +++ /dev/null @@ -1,2089 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Pandas统计分析入门(1)\n", - "- ## Pandas及相关python库简介\n", - "- ## 一维数据统计分析(Series基础)\n", - "- ## 二维数据统计分析(DataFrame基础)\n", - "- ## Visualization基础\n", - "---\n", - "## Pandas 简介\n", - "\n", - " pandas is a Python package providing fast, flexible, and expressive data structures designed to make working with “relational” or “labeled” data both easy and intuitive. It aims to be the fundamental high-level building block for doing practical, real world data analysis in Python. Additionally, it has the broader goal of becoming the most powerful and flexible open source data analysis / manipulation tool available in any language. It is already well on its way toward this goal.\n", - "\n", - "## Numpy 简介\n", - "\n", - " NumPy is the fundamental package for scientific computing with Python. It contains among other things:\n", - "- a powerful N-dimensional array object\n", - "- sophisticated (broadcasting) functions\n", - "- tools for integrating C/C++ and Fortran code\n", - "- useful linear algebra, Fourier transform, and random number capabilities\n", - "\n", - "## Matplotlib 简介\n", - "\n", - "Matplotlib是一个Python的2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。\n", - "通过Matplotlib,开发者可以仅需要几行代码,便可以生成绘图,直方图,功率谱,条形图,错误图,散点图等。\n", - "\n", - "## Seaborn 简介\n", - "\n", - "Seaborn is a library for making attractive and informative statistical graphics in Python. It is built on top of matplotlib and tightly integrated with the PyData stack, including support for numpy and pandas data structures and statistical routines from scipy and statsmodels.\n", - "\n", - "---" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- ## 程序头部引入" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "%matplotlib inline\n", - "from pandas import Series, DataFrame\n", - "import pandas as pd\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "import seaborn as sns" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "以上引入各类利用pandas做数据分析可视化的模块,一般可作为每次数据分析项目/任务的起始代码,其中:\n", - "- `%matplotlib inline`是jupyter notebook的一个魔法命令,能够使基于matplotlib的绘图直接显示在网页中,非jupyter notebook环境下编程,可以省略\n", - "- `from pandas import Series, DataFrame`,从pandas中引入最为常用的两个对象:Series及DataFrame。本行可以省略,则调用Series和DataFrame就需要加上前缀:pd.Series和pd.DataFrame。\n", - "\n", - "**注意**,在以上的引入中,类似`pd`、`np`、`plt`及`sns`均为约定俗成的习惯性名称,**不建议**更改。\n", - "\n", - "---" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 一维数据统计分析(Series基础)\n", - "\n", - "- 数据的描述、分析、可视化展示、概括性度量、输入与输出" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 1. Series对象及数据最基本展示\n", - "\n", - "- 将以一个词频统计结果的实例,进行介绍。\n", - "- 教程中的各个代码段,请自行建立新的python程序,依次键入并顺序执行,观察执行结果。\n", - "- Series是pandas最重要最基础的数据对象,可用来表示数据表中的一列或一行。" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "words_freq = [200,300,400,350,390,600,900,400,300,120]\n", - "freq_dict = {'天长地久':words_freq}\n", - "total_words_freq = [12345000,23456000,22333000,45632000,11144000,65433000,44444000,55555000,34522000,55566000]\n", - "years = [2006,2007,2008,2009,2010,2011,2012,2013,2014,2015]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "以上代码中:\n", - "- `words_freq`,是“天长地久”在2006-2015年10年之间的频次list\n", - "- `freq_dict`,键为“天长地久”,值为其历时频次的list\n", - "- `total_words_freq`,是每年统计文本语料的总字数list\n", - "- `years`,是年份list" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "s = Series(words_freq)\n", - "s" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "利用list来初始化Series对象。Series是pandas内置的处理一维数据的数据类型。\n", - "- 第一列为Series对象的索引(index),默认为数字索引;\n", - "- 第二列为Series对象的值(value)\n", - "- 最后一行说明,Series对象的值为int64类型" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "s = Series(freq_dict['天长地久'], index = years)\n", - "s" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "可以在初始化Series对象时,同时指定索引(index)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "s.name = '2006-2015'\n", - "s.index.name = 'year'\n", - "s" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "还可以指定Series对象的名称(name),指定其索引(index)的名称(name)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "s.plot()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Series对象可利用pandas内置的plot()直接绘图,默认为折线图。\n", - "\n", - "**折线图**多用于展示**数值型数据**,特别是用于展示历时数据。\n", - "\n", - "统计学中,依据计量尺度,一般可将数据分为三种类型:\n", - "- 分类数据\n", - "- 顺序数据(定序数据)\n", - "- 数值型数据(定量数据)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "s.plot(kind='bar')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "plot()函数的参数`kind`,可以指定plot()函数所绘制图形的种类,`'bar'`为柱状图。也可以采用这种形式:`s.plot.bar()`,效果与指定kind参数为bar类似。\n", - "\n", - "**柱状图**用宽度相同的柱的高度或长短来表示数据多少。\n", - "\n", - "柱状图一般用于展示**分类数据**,展示不同类别数据的多少(可将以上数据的每个年份理解为不同类别)。" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "s.plot(kind='barh')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "'barh'为条形图,与柱状图类似。" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "s.plot('pie',figsize=(6,6))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "'pie'为饼图。\n", - "**饼图**使用圆形及圆内扇形的角度表示数值大小的图形。\n", - "\n", - "一般也用于展示**分类数据**,用来表示各分类部分数据占全部数据的比例(频率分布)。" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "s.plot('pie',figsize=(6,6))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "可利用plot()函数的`figsize`参数,设定图形的大小(长与宽)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 2. 数据基本分析、度量与展示\n", - "\n", - "**2.1 归一化**\n", - "\n", - "**归一化**一般要使数值的绝对值变成**相对值**,将数值映射到[0,1]区间上。\n", - "\n", - "在本例中,由于每个年度的语料大小不同,单纯观察每个年度某个词汇出现的频次(绝对值),无法确定其出现的相对高低(相对值)。\n", - "\n", - "因此可将频次归一化,即某词汇每年出现的次数/每年语料的总字数。这样,该词汇就可以利用频次归一化的数值进行横向比较了。\n", - "\n", - "在实际中,也可以将频次归一化的结果乘以一个较大的整数。在本例中,可乘以10000000,表示语料中每10000000字出现该词汇的频次。" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "#python实现\n", - "def norm_freq(freqs, total_freqs, per = 1):\n", - " return [per * freq/total_freq for freq, total_freq in zip(freqs, total_freqs)]\n", - "\n", - "per = 10000000\n", - "s_norm = norm_freq(freq_dict['天长地久'], total_words_freq, per = 10000000)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "上面的代码用python实现了将每年的频次归一化为每年每一千万字该词汇出现的频次。" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "s_norm = Series(s_norm, index = years)\n", - "s_norm" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "利用归一化处理后的结果初始化一个Series对象s_norm。注意,此时value的数据类型自动转换为float。" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "#pandas的Series运算\n", - "s_norm = per * s / total_words_freq\n", - "s_norm" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "也可以直接利用pandas的序列运算进行归一化。运算结果与python编写代码一直,但是更简洁。\n", - "- `s_norm = per * s / total_words_freq`,其中`s`为Series类型,`total_words_freq`为list类型,直接相除运算的结果是将s中每个对应的值除以list中每个值。这种向量/矩阵运算是numpy及pandas中非常常见的情况,一般被称为**矢量化操作**。" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "s_norm.plot()\n", - "s.plot()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "再次绘图,并将两根折线展示在一个图上。\n", - "\n", - "可以看出,归一化前,峰值出现在2012年;归一化后,峰值出现在2010年。" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**1.2 求平均值**" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "#python实现\n", - "freq_mean = sum(freq_dict['天长地久'])/len(freq_dict['天长地久'])\n", - "freq_mean" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "计算均值的python代码。\n", - "\n", - "除非特别指出,一般平均值指的就是**算数平均值**。" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "#pandas内置求均值函数\n", - "s.mean()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "利用内置均值函数mean()更为简洁。" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "s_mean = Series([freq_mean]*10, index = years)\n", - "s_mean" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "声明一个每年数值均为均值的Series对象s_mean。" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "s.plot()\n", - "s_mean.plot()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "将频次均值与各年频次画在一个图中" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**1.3 样本方差、标准差、标准分及变异系数**" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": true - }, - "source": [ - "**方差**(variance)是在概率论和统计方差衡量随机变量或一组数据时离散程度的度量。\n", - "- 统计中的方差(样本方差)是每个样本值与全体样本值的平均数之差的平方值的平均数。\n", - "\n", - "**总体**:包含所研究的全部个体(数据)的集合。\n", - "\n", - "**样本**:从总体中抽取的一部分元素的集合。\n", - "\n", - "**样本容量**:构成样本的元素的数量称为样本容量(size)。\n", - "\n", - "样本方差计算公式为:\n", - "$$s^2 = \\frac{1}{n-1}\\sum_{i=1}^{n}(x_i-\\widetilde x)^2$$\n", - "\n", - "注意样本方差的公式中,分母为`n-1`。" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "#python实现方差\n", - "def variance(freqs):\n", - " mean = sum(freqs)/len(freqs)\n", - " return sum([(freq-mean)**2 for freq in freqs])/(len(freqs)-1)\n", - "\n", - "freq_var = variance(freq_dict['天长地久'])\n", - "freq_var" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "上述代码用python实现了求样本方差。" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "#pandas内置方差\n", - "s.var()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "而pandas内置求方差的函数var()更为简洁。· " - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": true - }, - "source": [ - "**标准差**:标准差是方差的算术平方根。" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "#pandas内置标准差\n", - "s.std()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Pandas内置std()函数,可得到序列s的标准差。" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**标准分**:变量值与平均数的差除以标准差后的值,也称为**z分数**(z score)。\n", - "\n", - "标准分的计算公式为:\n", - "$$z_i=\\frac{x_i-\\widetilde x}{s}$$" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "(s-s.mean())/s.std()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "上述代码可得到s中所有数值的标准分,存放在一个Series对象中。\n", - "标准差的**经验法则**(当一组数据对称分布时):\n", - "- 约68%的数据在均值附近正负1个标准差内\n", - "- 约95%的数据在均值附近正负2个标准差内\n", - "- 约99%的数据在均值附近正负3个标准差内\n", - "在正负3个标准差以外的数据,称为**离群点(outlier)**。\n", - "\n", - "**切比雪夫不等式**:对任意分布的一组数据,至少有(1-1/k^2)的数据落在正负k个标准差以内(k>1)。" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": true - }, - "source": [ - "**变异系数**(离散系数):一组数据的标准差与该组数据均值之比。公式为:\n", - "$$v_i=\\frac{s}{\\widetilde x}$$\n", - "\n", - "该系数是测度离散程度的相对统计量,主要用于比较不同演变数据的离散程度(特别对均值差异较大的数据组)。" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "#变异系数\n", - "s.std()/s.mean()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "变异系数可由标准差/均值直接得到。" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**1.4 中位数、分位数、轴距与箱型图**" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**中位数**(median):中数是按顺序排列的一组数据中居于中间位置的数,即在这组数据中,有一半的数据比他大,有一半的数据比他小。如果观察值有偶数个,通常取最中间的两个数值的平均数作为中位数。" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "s_norm.median()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Pandas内置了median()函数,即求中位数函数。" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false - }, - "source": [ - "**分位数**是将总体的全部数据按大小顺序排列后,处于各等分位置的变量值。\n", - "- 将全部数据分成相等的两部分,它就是中位数;如果分成四等分,就是四分位数;八等分就是八分位数。\n", - "- 四分位数也称为四分位点,它是将全部数据分成相等的四部分,其中每部分包括25%的数据,处在各分位点的数值就是四分位数。\n", - "- 四分位数有三个,第一个四分位数就是通常所说的四分位数,称为下四分位数,第二个四分位数就是中位数,第三个四分位数称为上四分位数,分别用Q1、Q2、Q3表示。" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "s_norm.quantile(0.25)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "s_norm.quantile(0.75)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Pandas内置的quantile()函数可以求任意分位数,参数为0.25即Q1,参数为0.75即Q3。" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "s_norm.plot(kind='box')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "参数kind为`box`时,对应的就是**箱型图**。\n", - "\n", - "箱型图中间的箱型一般由三根线组成,由下至上分别对应Q1,Q2,Q3;而箱型以外的上下两根线,分别对应最大值与最小值(不含离群点)\n", - "\n", - "箱型图一般用于展示数值型数据,有助于对数据的整体分布有只管了解,特别有利于对离群点/异常点的观察。" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "#Series箱型图离群点/异常点显示,利用seaborn\n", - "sns.boxplot(s_norm)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "由于pandas内置的箱型图默认不含离群点,可直接利用seaborn中的boxplot函数,为Series对象绘制带离群点的箱型图。" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**1.5 样本的累积和**(累积频数与累积频率)\n", - "\n", - "**累积频数**(cumulative frequencies),将各有序类别或组的频数逐级累加起来的频数。\n", - "\n", - "**累积频率**(cumulative percentages),将各有序类别或组的百分比逐级累加起来。" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "s.cumsum()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Pandas内置了cumsum()函数,可以直接得到累积频数。" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "s.cumsum().plot()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "利用cumsum()得到的仍然是Series对象,可以直接绘图。" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "s_ratio = s/s.sum()\n", - "s_ratio.cumsum().plot()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "累积频率(累积百分比)可以类似的得到。\n", - "\n", - "`sum()`为内置的求Series对象中value和的函数。" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**1.6 最大值、最小值、众数及总体描述**" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "s.max()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "内置最大值函数max()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "s.min()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "内置最小值函数min()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "s.mode()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**众数**(mode):一组数据中出现次数最多的数据值。一般用于测度分类数据的集中趋势,在数据量较大的时候有意义。\n", - "Pandas内置mode()函数,可以直接得到众数,注意众数可能不唯一,如此时s的众数有两个。" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "s.describe()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": true - }, - "source": [ - "Pandas的descibe()函数,可以给出汇总与描述统计的常用值。其中count为数据个数。" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**1.7 随机数、直方图、峰度与偏度**(公式以后有时间补充)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "np.random.seed(66)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "调用np中random模块的seed()方法,生成一个随机数种子,在这个种子下,每次第一次生成的随机数均相同。" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "arr1 = np.random.randn(10000)\n", - "arr1" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "利用random的randn()函数,生成一个numpy的array类型的对象,大小为10000,可理解为长度为10000的数组(所有数据元素类型相同)。\n", - "\n", - "数组内数据分布为正态分布。randn即random normal。" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "arr2 = np.random.randn(50)\n", - "arr2" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "与前类似,生成了一个长度为50的array,数据为正态分布。" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "s_1 = Series(arr1)\n", - "s_2 = Series(arr2)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Numpy的array类型可以直接初始化为Series类型的对象。" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "s_1.plot(kind='hist')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**直方图**(histogram):又称质量分布图,是数值数据分布的精确图形表示。\n", - "- 将值的范围分段,即将整个值的范围分成一系列间隔(一般要相等)\n", - "- 计算每个间隔中有多少值\n", - "\n", - "当plot()函数的kind参数为hist时,即代表直方图。\n", - "\n", - "此外,Pandas内置hist()函数,可对Series对象直接绘制直方图:`s_norm.hist()`。" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "s_1.plot(kind='hist',bins=50)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Plot()函数有一个重要参数`bins`,指定了间隔个数。此处将间隔数设为50." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "s_1.plot(kind='kde')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**核密度估计图**(Kernel Density Estimation, KDE):采用平滑的峰值函数(“核函数”)来拟合观察到的数据点,从而对真实的概率分布曲线进行模拟。\n", - "Pandas的plot()函数中,参数kind的值为kde时,即可绘制KDE图。" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "sns.distplot(s_1)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Seaborn中内置的distplot()函数,可以直接对Series对象绘制直方图及KDE图的合一图。" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "sns.distplot(s_2)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "类似地,可以为s_2绘制histogram及kde图。" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "s_1.skew(),s_2.skew(),s_1.kurt(),s_2.kurt()," - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**偏度**(Skewness)、偏态、偏态系数,是统计数据分布偏斜方向和程度的度量,是统计数据分布非对称程度的数字特征。正态分布的偏度为零。\n", - "- Skewness=0 分布形态与正态分布偏度相同\n", - "- Skewness>0 正偏差数值较大,为正偏或右偏。长尾巴拖在右边。\n", - "- Skewness<0 负偏差数值较大,为负偏或左偏。长尾巴拖在左边。\n", - "\n", - "**峰度**(Kurtosis)、峰态、峰态系数,是描述总体中所有取值分布形态陡缓程度的统计量。正态分布的峰度为3(也有很多将计算得到的峰度-3,而使正态分布峰度为零的做法)。\n", - "- Kurtosis=3(或0) 分布形态与正态分布峰度相同\n", - "- Kurtosis>3(或0) 正偏差数值较大,尖峰,厚尾。\n", - "- Kurtosis<3(或0) 负偏差数值较大,扁峰,薄尾。\n", - "\n", - "本例中,s_1比s_2更接近于正态分布。" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 3. Series类型基本操作整理\n", - "**3.1 创建与查看**\n", - "\n", - "创建一个Series的基本方法是:s = Series(data, index=index)。其中,data指代许多不同的数据类型:\n", - "- a Python dict\n", - "- an ndarray\n", - "- a scalar value (like 6)\n", - "\n", - "index指一个标签序列,一般用list类型。" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**3.1.1 利用list创建Series**" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "s = Series([x*x for x in range(100)])\n", - "s" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 第一行利用一个list,创建了一个Series对象s\n", - "- 第二行查看该对象。\n", - "- 该对象由两部分组成,第一列为index,第二列为values。" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "s.head()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "数据太长,可用head()函数查看前几个数据。" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "s.tail(10)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "也可用tail()函数查看最后几个数据,head()及tail()函数内可放整型参数,代表列出的数据个数。" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "s.values" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "查看序列s的值" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "type(s.values)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 查看s.values的类型\n", - "- Series对象的values的类型确实为numpy的array(数组)类型,即ndarray(n维数组)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "s.index" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 查看s的index(索引)的值" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "type(s.index)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 查看s.index的类型\n", - "- Series对象的索引在未指定时,为pandas内置的RangeIndex类型,类似于python的range类型。" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "s2 = Series([x*x for x in range(26)], index=set('abcdefghijklmnopqrstuvwxyz'))\n", - "s2.head()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 利用list创建Series对象时,可用index参数指定一个list或set对应索引。" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "type(s2.index), s2.index" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 指定索引后,Series对象的索引是pandas内置的Index类型" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**3.1.2 利用dict创建Series**" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "data = {'喜欢':3000,'爱':7000,'讨厌':1000,'恨':500}\n", - "s3 = Series(data)\n", - "s3" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 可用dict创建Series对象,则字典的键自动成为index" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "s3 = Series(data, index = ['a','b','c','爱'])\n", - "s3" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 初始化时,也可以额外指定index。但是如果指定的index找不到对应的值,则该index对应值设为NaN(Not a Number)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**3.1.3 利用标量创建Series对象**" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "s0 = Series(5, index = ['a','b','c','d','e'])\n", - "s0" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 利用标量创建Series对象时,对象的值将均为标量的值" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**3.1.4 利用Series对象创建Series对象**" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "s4 = Series(s3)\n", - "s4" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 这是最简单的利用Series对象创建Series对象的代码" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "s5 = Series(s4, index = ['喜欢','爱','讨厌','中'])\n", - "s5" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 与利用dict初始化类似,也可以额外指定index。" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**3.2 访问Series对象的元素**" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "s4[0], s4['爱'], s4.爱" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 利用位置索引或者index均可以访问对应元素\n", - "- 还可以利用index的值作为属性来访问对应元素" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "s4[0:2]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "s4['喜欢':'爱']" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 位置索引及index的切片访问也适用,但利用index切片是包含末端的" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "s4.index" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 可以利用index属性访问Series对象的索引" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "s4.values" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 可以利用values属性访问Series对象的值" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "for k, v in s4.items():\n", - " print(k, v)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "for k in s4.keys():\n", - " print(k)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "for v in s4:\n", - " print(v)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 可以类似dict一样迭代访问Series对象的各个元素" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "for k in s4.index:\n", - " print(k)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "for v in s4.values:\n", - " print(v)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 也可以利用index与values属性迭代访问" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**3.3 修改、删除、排序等基本运算**" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "s4[0] = 10000\n", - "s4" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "s4['爱'] = 4078\n", - "s4" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- Series对象内的值可以直接根据位置或index被赋值(修改)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "s4[0:3] = 666\n", - "s4" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 可以切片式赋值" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "s4.index = ['a', 'b', 'c', 'd']\n", - "s4" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- Series对象的index可以直接被赋值(修改),注意新的index的长度要与Series对象中index的长度一致。" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "s4 = s3.reindex(['喜欢','爱','讨厌','中', 'e'])\n", - "s4" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 可用reindex方法来更改index,找不到对应值的index,则其值为NaN。" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "s5 = s4.drop('e')\n", - "s4" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "s5" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 可利用drop函数删除指定索引及值,生成新的Series对象,但原series对象不变。" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "s4+s5" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "s4-s5" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "s4*s5" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "s4/s5" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- Serires对象可以直接进行四则运算,运算规则是对应索引的值进行运算,整体运算结果仍然是Series对象。\n", - "- 如果索引值无法对应,则结果为NaN。" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "s4.sort_values()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 按照values(值)进行排序,按值排序时,NaN将排在尾端" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "s4.sort_index()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 按照index(索引)进行排序" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "s4.sort_values(ascending=False)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 将ascending参数指定为False,则变为倒序排序" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**3.4 处理NaN值**" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "s5 = s4.fillna(1)\n", - "s5" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 可以利用内置fillna()函数,将NaN值替换为指定数值" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "s6 = s4.reindex(['喜欢','爱','不讨厌','中'], fill_value = 0)\n", - "s6" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 可在reindex方法内利用fill_value参数,指定值来替换在重新索引时新出现的NaN值,\n", - "- 注意,fill_value参数与不会对原有NaN值进行替换。" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "s4.add(s6)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "s4.add(s6, fill_value=0)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 两个Series对象相加可用add方法,设置fill_value参数的值,替换非对齐index部分的NaN值。fill_value参数不会对运算前的NaN进行填充。\n", - "- 类似还有sub,div,mul方法,分别对应减法、除法及乘法。" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**3.5 过滤**" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "s > 1000" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- Series对象进行比较等逻辑运算,结果仍然是一个Series对象,每一维度的值根据运算结果为True或False" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "s[s>1000]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 可以利用逻辑运算的结果Series,对Series对象进行过滤,得到满足条件的Series" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**3.6 时间序列(Time Series)**示例" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "rng = pd.date_range('1/1/2012', periods=100, freq='S')\n", - "rng" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- Pandas内置的date_range()函数,可以很方便的得到时间标签\n", - "- 第一个参数'1/1/2012'为时间字符串,表示开始时间\n", - "- 第二个参数periods为时间标签个数,此处设为100\n", - "- 第三个参数freq为时间频率间隔,此处的'S'表示间隔为秒,常用的为S,Min,H,D,M分别为秒、分、小时、天,月。" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "ts = Series(np.random.randint(0, 500, len(rng)), index=rng)\n", - "ts.head()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 将时间标签作为Series对象的index,随机生成0-500间100个整数,作为Series对象的值。" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "ts.plot()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 利用plot()函数绘图" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "ts1 = ts.resample('Min').mean()\n", - "ts1" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 利用resample()函数,可将时间序列重新抽样。\n", - "- 样本时间间隔根据resample()函数参数决定,本例中,样本时间间隔设为分钟(Min)\n", - "- 重新设定样本间隔后,可利用mean()函数,求得每个时间间隔内值的均值,作为新的index对应的值" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**3.7 输出**" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "s.plot()\n", - "plt.savefig('test.jpg')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 利用内置的plot()函数展示图片后,可利用plt的savefig()函数将图片保存为文件输出。\n", - "- 可以查看当前目录下的test.jpg文件,与当前显示一致。" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "s.to_csv('test.csv')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 利用to_csv()函数,可将Series对象输出为.csv文件\n", - "- 可在当前目录下,找到test.csv,双击打开查看" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.0" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} From 6850a901d65677fc0b66b44cc857ca64294102a8 Mon Sep 17 00:00:00 2001 From: liupengyuan Date: Tue, 17 Oct 2017 21:15:01 +0800 Subject: [PATCH 30/44] Update 2.md --- chapter1/2.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chapter1/2.md b/chapter1/2.md index f54f9aa7c..67e91bece 100644 --- a/chapter1/2.md +++ b/chapter1/2.md @@ -338,7 +338,7 @@ print('再见!', name) ``` - 练习2:仿照实践1,写出由用户指定整数个数,并由用户输入多个整数,并求和的代码。 - 练习3:用户可以输入的任意多个数字,直到用户不想输入为止。 - - 练习4:用户可以输入的任意多个数字,直到输入所有数字的和比当前输入数字小,且输入所有数字的积比当前输入数字的平方大。 + - 练习4:用户可以输入的任意多个数字,直到: 输入所有数字的和比当前输入数字小,且输入所有数字的积小于500。 [^1]:实际上有多种代码缩进方式,我们推荐并只介绍python创始人采用的这种方式。 From b69e558d25167ec76c197c09174f81aea404ffe2 Mon Sep 17 00:00:00 2001 From: liupengyuan Date: Tue, 17 Oct 2017 21:24:22 +0800 Subject: [PATCH 31/44] Update 2.md --- chapter1/2.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chapter1/2.md b/chapter1/2.md index 67e91bece..0d32d7998 100644 --- a/chapter1/2.md +++ b/chapter1/2.md @@ -338,7 +338,7 @@ print('再见!', name) ``` - 练习2:仿照实践1,写出由用户指定整数个数,并由用户输入多个整数,并求和的代码。 - 练习3:用户可以输入的任意多个数字,直到用户不想输入为止。 - - 练习4:用户可以输入的任意多个数字,直到: 输入所有数字的和比当前输入数字小,且输入所有数字的积小于500。 + - 练习4:用户可以输入的任意多个数字,直到: 输入所有数字的和比当前输入数字小,且输入所有数字的积大于500。 [^1]:实际上有多种代码缩进方式,我们推荐并只介绍python创始人采用的这种方式。 From d6c638cd73c4fe06bc1f9d00f13af79c7daf3702 Mon Sep 17 00:00:00 2001 From: liupengyuan Date: Fri, 20 Oct 2017 16:01:17 +0800 Subject: [PATCH 32/44] Update 9.md --- chapter2/9.md | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/chapter2/9.md b/chapter2/9.md index b378ef156..9fa29c48c 100644 --- a/chapter2/9.md +++ b/chapter2/9.md @@ -905,7 +905,7 @@ def count_words_freq_dict(filename): with open(filename) as f: for line in f: - words_freq_dict += Counter([word.split('/')[0] for word in line.split()]) + words_freq_dict.update([word.split('/')[0] for word in line.split()]) return words_freq_dict ``` @@ -913,10 +913,9 @@ def count_words_freq_dict(filename): - 首先从`collections`模块中引入了`Counter`类型 - `words_freq_dict = Counter()`是建立了一个空的Counter对象,Counter类型类似于`dict`,也可以视为一种特殊的`dict`。 -- `Counter([word.split('/')[0] for word in line.split()])`,实际上是将一个`list`转为`Counter`类型,转换过程中,`Counter()`会自动统计`list`中的对象频次,并以键值对的形式存入`Counter`对象,且与`dict`类似,这个`Counter`对象的`key`是可哈希的,即可利用哈希函数存取,时间复杂度为O(1)。 -- `Counter`对象支持加法操作,其结果就是新的`Counter`对象中相同键的值相加,同时保留各自不同的键值对。 +- `words_freq_dict.update([word.split('/')[0] for word in line.split()])`,其中`update()`是`Counter()`类型变量的一个函数,会自动更新其参数(一般为一个序列)中的对象频次,并以键值对的形式存入`Counter`对象,且与`dict`类似,这个`Counter`对象的`key`是可哈希的,即可利用哈希函数存取,时间复杂度为O(1)。 -好吧,我们将词频统计的代码精简到了7行,且效率很高,这就是python语言的威力。 +好吧,我们将词频统计的代码精简到了6行,且效率很高,这就是python语言的威力。 在本节任务中,我们利用词频统计任务,将程序的效率逐步提升,与此同时,所用数据类型逐步复杂,代码量逐步减少。 之所以这样安排而不是直接给出最优答案确实是期望在这个过程中,读者能对各种相关数据类型和算法有更清醒的认识和理解,也能够进一步锻炼使用python进行编程的能力。 通过1-9这几个任务,我们已经基本介绍并掌握了python语言的常用基本语法,并已对python编程有一定的实践能力。 @@ -1016,14 +1015,14 @@ print(palindrome(seq)) #coding: utf-8 #示例程序9-32 -from collections import Counter +from collections import defaultdict #假设之前已经词频统计完成,并已放入Counter或dict对象word_table中 -ch_table = Counter() +ch_table = defaultdict(int) for word, freq in word_table.items(): for ch in word: - ch_table += Counter({ch:freq}) + ch_table[ch] += freq for ch, freq in ch_table.items(): print(ch, freq, sep=':', end='|') @@ -1202,7 +1201,7 @@ def count_words_freq_dict(filename): with open(filename) as f: for line in f: - words_freq_dict += Counter([word.split('/')[0] for word in line.split()]) + words_freq_dict.update([word.split('/')[0] for word in line.split()]) return words_freq_dict def main(): From e3e12cb4feb46bbf3e09019aa21a33d783a249a1 Mon Sep 17 00:00:00 2001 From: liupengyuan Date: Fri, 20 Oct 2017 16:52:16 +0800 Subject: [PATCH 33/44] Update 9.md --- chapter2/9.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chapter2/9.md b/chapter2/9.md index 9fa29c48c..a72801614 100644 --- a/chapter2/9.md +++ b/chapter2/9.md @@ -1031,7 +1031,7 @@ for ch, freq in ch_table.items(): 示例程序9-32中: -- `Counter({ch:freq})`是利用一个词典来初始化一个Counter对象。 +- 对词频统计结果中的每个词进行遍历,对组成每个词的字进行遍历,每个词中包含的字的频次为当前的对应词的词频。 9.9 拓展与汇总 From 1f4e7dc51126152174b017f310d187327f801c43 Mon Sep 17 00:00:00 2001 From: liupengyuan Date: Fri, 20 Oct 2017 16:58:59 +0800 Subject: [PATCH 34/44] Update task10.md --- chapter3/task10.md | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/chapter3/task10.md b/chapter3/task10.md index d645c27bc..ca7a6bdd6 100644 --- a/chapter3/task10.md +++ b/chapter3/task10.md @@ -256,6 +256,30 @@ python解释器默认的搜索位置顺序是:1、当前目录;2、path环 因此,将我们自定义的模块/程序放置到当前目录或者上述代码列出的任意一个目录中,均能够被导入。 +注意,由于对Counter对象的加法计算耗时较多,因此,可以考虑在示例代码3-7中直接原task9中示例程序9-36中的关键语句。 + +```python +#coding: utf-8 +示例代码3-8 +import os +from Collections import Counter + +def count_words_dir(path): + words_freq_dict = Counter() + for root, dirs, files in os.walk(path): + for file in files: + file = os.path.join(root, file) + for line in file: + words_freq_dict.update([word.split('/')[0] for word in line.split()]) + return words_freq_dict + +# 测试 +if __name__ == '__main__': + path = r'd:\temp' + print(list(count_words_dir(path))[:20]) +``` + +当文件较多时,示例代码3-8的性能,将比示例代码3-7,有几倍的提升。 **10.4 输出结果为csv格式、xlsx格式及JOSN文件格式** From 710d1252367b7d8ee7c940038d5de508bac0a7e1 Mon Sep 17 00:00:00 2001 From: liupengyuan Date: Sat, 21 Oct 2017 20:46:26 +0800 Subject: [PATCH 35/44] Update task10.md --- chapter3/task10.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chapter3/task10.md b/chapter3/task10.md index ca7a6bdd6..0d08e6e07 100644 --- a/chapter3/task10.md +++ b/chapter3/task10.md @@ -514,7 +514,7 @@ def count_gram_freq_dict(filename, n=2): words = [word.split('/')[0] for word in line.split()] if len(words) >= n: for i in range(len(words)-n+1): - gram_freq_dict['_'.join(words[i:i+n-1])] += 1 + gram_freq_dict['_'.join(words[i:i+n])] += 1 return gram_freq_dict ``` From 113afd594d4425ae3eb8ae13c865a2f8c6511eb8 Mon Sep 17 00:00:00 2001 From: liupengyuan Date: Sun, 22 Oct 2017 01:03:33 +0800 Subject: [PATCH 36/44] Add files via upload --- chapter4/pandas_Tutorial_1(Series).ipynb | 3757 +++++++++++++++ chapter4/pandas_Tutorial_2(DataFrame).ipynb | 4830 +++++++++++++++++++ chapter4/pandas_Tutorial_3(group).ipynb | 3653 ++++++++++++++ 3 files changed, 12240 insertions(+) create mode 100644 chapter4/pandas_Tutorial_1(Series).ipynb create mode 100644 chapter4/pandas_Tutorial_2(DataFrame).ipynb create mode 100644 chapter4/pandas_Tutorial_3(group).ipynb diff --git a/chapter4/pandas_Tutorial_1(Series).ipynb b/chapter4/pandas_Tutorial_1(Series).ipynb new file mode 100644 index 000000000..03e745c7f --- /dev/null +++ b/chapter4/pandas_Tutorial_1(Series).ipynb @@ -0,0 +1,3757 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Pandas统计分析入门(1)\n", + "- 转载注明转自:https://github.com/liupengyuan/\n", + "- ## Pandas及相关python库简介\n", + "- ## 一维数据统计分析(Series基础)\n", + "- ## 二维数据统计分析(DataFrame基础)\n", + "- ## Visualization基础\n", + "---\n", + "## Pandas 简介\n", + "\n", + " pandas is a Python package providing fast, flexible, and expressive data structures designed to make working with “relational” or “labeled” data both easy and intuitive. It aims to be the fundamental high-level building block for doing practical, real world data analysis in Python. Additionally, it has the broader goal of becoming the most powerful and flexible open source data analysis / manipulation tool available in any language. It is already well on its way toward this goal.\n", + "\n", + "## Numpy 简介\n", + "\n", + " NumPy is the fundamental package for scientific computing with Python. It contains among other things:\n", + "- a powerful N-dimensional array object\n", + "- sophisticated (broadcasting) functions\n", + "- tools for integrating C/C++ and Fortran code\n", + "- useful linear algebra, Fourier transform, and random number capabilities\n", + "\n", + "## Matplotlib 简介\n", + "\n", + "Matplotlib是一个Python的2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。\n", + "通过Matplotlib,开发者可以仅需要几行代码,便可以生成绘图,直方图,功率谱,条形图,错误图,散点图等。\n", + "\n", + "## Seaborn 简介\n", + "\n", + "Seaborn is a library for making attractive and informative statistical graphics in Python. It is built on top of matplotlib and tightly integrated with the PyData stack, including support for numpy and pandas data structures and statistical routines from scipy and statsmodels.\n", + "\n", + "---" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- ## 程序头部引入" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "from pandas import Series, DataFrame\n", + "import pandas as pd\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import seaborn as sns" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "以上引入各类利用pandas做数据分析可视化的模块,一般可作为每次数据分析项目/任务的起始代码,其中:\n", + "- `%matplotlib inline`是jupyter notebook的一个魔法命令,能够使基于matplotlib的绘图直接显示在网页中\n", + "- `from pandas import Series, DataFrame`,从pandas中引入最为常用的两个对象:Series及DataFrame\n", + "\n", + "**注意**,在以上的引入中,类似`pd`、`np`、`plt`及`sns`均为约定俗成的习惯性名称,**不建议**更改。\n", + "\n", + "---" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 一、一维数据统计分析(Series基础)\n", + "\n", + "- 数据的描述、分析、可视化展示、概括性度量、输入与输出" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1. Series对象及数据最基本展示\n", + "\n", + "- 将以一个词频统计结果的实例,进行介绍。\n", + "- 教程中的各个代码段,请自行建立新的python程序,依次键入并顺序执行,观察执行结果。\n", + "- Series是pandas最重要最基础的数据对象,可用来表示数据表中的一列或一行。" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "words_freq = [200,300,400,350,390,600,900,400,300,120]\n", + "freq_dict = {'天长地久':words_freq}\n", + "total_words_freq = [12345000,23456000,22333000,45632000,11144000,65433000,44444000,55555000,34522000,55566000]\n", + "years = [2006,2007,2008,2009,2010,2011,2012,2013,2014,2015]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "以上代码中:\n", + "- `words_freq`,是“天长地久”在2006-2015年10年之间的频次list\n", + "- `freq_dict`,键为“天长地久”,值为其历时频次的list\n", + "- `total_words_freq`,是每年统计文本语料的总字数list\n", + "- `years`,是年份list" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0 200\n", + "1 300\n", + "2 400\n", + "3 350\n", + "4 390\n", + "5 600\n", + "6 900\n", + "7 400\n", + "8 300\n", + "9 120\n", + "dtype: int64" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s = Series(words_freq)\n", + "s" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "利用list来初始化Series对象。Series是pandas内置的处理一维数据的数据类型。\n", + "- 第一列为Series对象的索引(index),默认为数字索引;\n", + "- 第二列为Series对象的值(value)\n", + "- 最后一行说明,Series对象的值为int64类型" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "2006 200\n", + "2007 300\n", + "2008 400\n", + "2009 350\n", + "2010 390\n", + "2011 600\n", + "2012 900\n", + "2013 400\n", + "2014 300\n", + "2015 120\n", + "dtype: int64" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s = Series(freq_dict['天长地久'], index = years)\n", + "s" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "可以在初始化Series对象时,同时指定索引(index)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "year\n", + "2006 200\n", + "2007 300\n", + "2008 400\n", + "2009 350\n", + "2010 390\n", + "2011 600\n", + "2012 900\n", + "2013 400\n", + "2014 300\n", + "2015 120\n", + "Name: 2006-2015, dtype: int64" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s.name = '2006-2015'\n", + "s.index.name = 'year'\n", + "s" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "还可以指定Series对象的名称(name),指定其索引(index)的名称(name)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "s.plot()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Series对象可利用pandas内置的plot()直接绘图,默认为折线图。\n", + "\n", + "**折线图**多用于展示**数值型数据**,特别是用于展示历时数据。\n", + "\n", + "统计学中,依据计量尺度,一般可将数据分为三种类型:\n", + "- 分类数据\n", + "- 顺序数据(定序数据)\n", + "- 数值型数据(定量数据)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\nyAAAGECQAQAwgCADAGAAQQYAwACCDACAAQQZAAADvvGLSwCW8EINADoLrpABADCAIAMAYABBBgDA\nAIIMAIABBBkAAAMIMgAABhBkAAAMIMgAABhAkAEAMIAgAwBgAEEGAMAAggwAgAEEGQAAAwgyAAAG\n8PKLAcRLAwLorAL19U26dr/GcYUMAIABBBkAAAMIMgAABhBkAAAMIMgAABhAkAEAMIAgAwBgAEEG\nAMAAggwAgAEEGQAAAwgyAAAGEGQAAAwgyAAAGECQAQAwgCADAGAAQQYAwACCDACAAQQZAAADCDIA\nAAYQZAAADCDIAAAYQJABADCAIAMAYABBBgDAAIIMAIABBBkAAAMIMgAABhBkAAAMiGjrjX6/X4sW\nLdKJEyfU1NSk7Oxsfe9739PChQvl8XjUt29fLV26VGFhYSotLVVJSYkiIiKUnZ2t9PT0YJ0DAACu\n12aQd+/erW7dumnVqlX68ssvNXHiRN12223KycnRXXfdpby8PJWXl+uOO+5QUVGRdu3apcbGRmVm\nZuruu++W1+sN1nkAAOBqbQZ5zJgxGj16tCTJcRyFh4frvffe0+DBgyVJaWlpOnDggMLCwjRgwAB5\nvV55vV4lJiaqurpaKSkpgT8DAAA6gTaDHB0dLUny+XyaM2eOcnJytHLlSnk8npa319fXy+fzKTY2\n9pJ/z+fztfvBu3ePUkRE+FUNHT+v7Kre73/xhzUTAnbsQEhIiG3/nYxx22a37ZXYHAxu2yux+dsI\n9o42gyxJn3/+uWbPnq3MzEyNHz9eq1atanlbQ0OD4uLiFBMTo4aGhktu/3qgr6Su7tz/OLtj1dbW\nh3rCN+K2vZL7Nrttr8TmYHDbXonN/6uEhNiA7Ggr8m0+yvr06dOaOXOm5s+fr6lTp0qS+vfvr8OH\nD0uSKisrNWjQIKWkpKiqqkqNjY2qr69XTU2NkpOTO/AUAADo3Nq8Qi4sLNS//vUvbdiwQRs2bJAk\n/fznP9fy5ctVUFCgpKQkjR49WuHh4crKylJmZqYcx1Fubq4iIyODcgIAAHQGbQZ58eLFWrx48WW3\nFxcXX3ZbRkaGMjIyOm4ZAADXEJ4YBAAAAwgyAAAGEGQAAAwgyAAAGECQAQAwgCADAGAAQQYAwACC\nDACAAQQZAAADCDIAAAYQZAAADCDIAAAYQJABADCAIAMAYABBBgDAAIIMAIABBBkAAAMIMgAABhBk\nAAAMIMgAABgQEeoBAAAEw8zn3gzIcTcvHNEhx+EKGQAAAwgyAAAGEGQAAAwgyAAAGECQAQAwgCAD\nAGAAQQYAwACCDACAAQQZAAADCDIAAAYQZAAADCDIAAAYQJABADCAIAMAYABBBgDAAIIMAIABBBkA\nAAMIMgAABhBkAAAMIMgAABhAkAEAMIAgAwBgAEEGAMAAggwAgAEEGQAAAwgyAAAGEGQAAAwgyAAA\nGECQAQAwgCADAGAAQQYAwACCDACAAQQZAAADCDIAAAYQZAAADIjoyIM1Nzdr2bJlOnbsmLxer5Yv\nX67vfve7HfkhAADolDr0CvmNN95QU1OTdu7cqXnz5um5557ryMMDANBpeRzHcTrqYPn5+UpJSdH9\n998vSRo2bJj27dvXUYcHAKDT6tArZJ/Pp5iYmJZfh4eH68KFCx35IQAA6JQ6NMgxMTFqaGho+XVz\nc7MiIjr029QAAHRKHRrkgQMHqrKyUpJ09OhRJScnd+ThAQDotDr0e8j/eZT1hx9+KMdx9Mtf/lJ9\n+vTpqMMDANBpdWiQAQDA/4YnBgEAwACCDACAAQQZAAADCDIAAAYQZAAADHB9kCsqKrRt2zZ9+umn\neuSRRzR06FBlZGTogw8+CPW0Kxo6dKgOHToU6hlX7cyZM1q5cqUKCgp0/PhxPfDAAxo5cqTpczh7\n9qwWL16ssWPHasSIEcrMzNTq1asveeIaa+rq6rRixQr98Ic/1PDhwzV+/Hg988wzOnPmTKindRpH\njx7V5MmTNX36dL399tstt8+ePTuEq9r2xRdfaMWKFVq/fr2qq6t13333acyYMXrnnXdCPa1VTU1N\nl/yVlZUlv9+vpqamUE+7orVr10qSPvnkE02dOlX33HOPpk2bpk8++SSoO1z/Y09Tp07VCy+8oLy8\nPP3oRz/SnXfeqerqai1dulQ7d+4M9bxWTZw4UT179lR8fLx+8pOf6Oabbw71pDbNnDlTY8eOlc/n\n06ZNm7Rp0yZdd911euqpp1RSUhLqea2aPXu2HnnkEQ0cOFDl5eU6efKkEhMT9dprr+n5558P9bxW\nPfnkk5owYYLS0tIUHR2thoYGVVRU6OWXX9bWrVtDPe8y8+bNu+Lb1qxZE8QlV2/atGnKz8/XhQsX\ntGDBAs2bN09Dhw5VVlaWioqKQj2vVTNnztT48eN18uRJbd++XcXFxYqKitLPfvYzFRcXh3reZQYN\nGqTIyEh17dpVjuPo9OnTuuGGG+TxeFReXh7qea169NFHtW3bNj355JOaNWuWUlNTVV1drZUrV2rL\nli1B2+H657X0er36zne+I0m68847JUm33XZbKCe1Ky4uToWFhXr99deVm5ur+Ph4DRs2TDfffLNG\njhwZ6nmXaWxs1IMPPihJ+v3vf69bb71Vkkw/LeqXX36pIUOGSJLGjRvX8gV38+bNIV52ZT6fT+PG\njWv5dUxMjO6//35t3749hKuubMyYMVq7dq2WLVsW6ilXrUuXLurdu7ckaePGjZo5c6YSEhLk8XhC\nvOzKmpqaNGnSJEnSW2+9paSkJEkyu3nnzp361a9+pblz5+rWW281/Yed/+/8+fNKTU2V9O+OBPu1\nGOx+Rb1K3//+9/Xss89qwIABWrRokdLT01VRUWH6GcL+c6fEqFGjNGrUKNXU1OjgwYM6ePCgySBH\nRUVp9erV8vl8ampqUmlpqWJiYhQVFRXqaVcUHR2tjRs3Ki0tTeXl5brpppt09OjRUM9q0/XXX6/1\n69crLS2t5XnhKyoqlJCQEOpprbrvvvv01ltv6cyZMxo7dmyo51yV6Ohobdu2TdOmTVNCQoJWr16t\nnJwc03enxsXFacOGDcrOztaLL74oSSorK1NkZGSIl7WuT58+WrNmjfLy8jR8+HCzf3D4ur/97W/K\nzs6Wz+fT3r17NWLECL344otB/xrn+rusm5ubVVZWpv3796uurk7dunVTamqqHnzwQXm93lDPa9XG\njRs1a9asUM+4aj6fT6+88oqSk5PVrVs3vfDCC4qPj9ecOXPUo0ePUM9r1T//+U8VFhaqpqZG/fr1\n06xZs/T222+rd+/eSkxMDPW8VjU2NmrHjh2qqqpqeeW0gQMHavr06eratWuo53UKPp9PW7Zs0eOP\nP97yynQfffSRCgoKtGHDhhCva9358+dVWlqqGTNmtNy2ceNGTZkyRddff30Il7Vv/fr12r17t15/\n/fVQT2nX8ePH9de//lU9evTQ7bffrvXr12vWrFmKi4sL2gbXB1mS/H6/qqur5fP5FBcXp759+5qN\n8X/4/X4dO3ZM9fX1rtjstr2SO39fALh2uf4u6z//+c9as2aNbrnlFkVFRamhoUEff/yx5s6dq3vv\nvTfU81pVUVGh1atXu2azGz/Hbtzc1t2mFv8g4ba9EpuDwW17JTubXR/kwsJC7dixo+XuJ0mqr6/X\nY489ZvYL729+8xtXbXbj59iNm8ePH68zZ84oPj5ejuPI4/G0/N3io1PdtldiczC4ba9kZ7Prg+z3\n+y/7/lpkZKTpBxK4bbPb9kru3Lxjxw498cQT2rp1q+Lj40M9p11u2yuxORjctleys9n130MuLS1V\nUVGRUlNTFRsbK5/Pp6qqKmVlZbX8qI41btvstr2SOzdL0v79+xUeHt7yI1vWuW2vxOZgcNteycZm\n1wdZkk6fPq13331XDQ0NiomJ0Q9+8APdcMMNoZ7VJrdtdtteyZ2bAVy7XH+XtfTvp8M7ePBgy6Np\nv/rqK40ZM8b03ZNu2+y2vZI7N7/xxhs6dOhQy6PZU1NTTW92216JzcHgtr2Sjc2uv0J+5pln1Nzc\nfMnTDVZWVurChQtasWJFqOe1ym2b3bZXYnMwuG2vxOZgcNteydBmx+UefvjhVm9/6KGHgrzk6rlt\ns9v2Og6bg8Ftex2HzcHgtr2OY2ez61/tqbm5+ZJXbZGkI0eOqEuXLiFa1D63bXbbXonNweC2vRKb\ng8FteyU7m11/l/Xx48eVn5+v999/X47jKCwsTP369VNOTk7LiyBY47bNbtsrsTkY3LZXYnMwuG2v\nZGhzUK/HA6C8vNwZPny4M3LkSOfVV19tuT0rKyuEq9rmts1u2+s4bA4Gt+11HDYHg9v2Oo6dza5/\nlHVhYaHKysp08eJF/fSnP215qTLH8IW/2za7ba/E5mBw216JzcHgtr2Snc2uD3KXLl1aXo1jw4YN\nmjFjhm688UbTD69322a37ZXYHAxu2yuxORjctleys9n1D+rq1auX8vPzde7cOcXExGj9+vV69tln\n9fHHH4d62hW5bbPb9kpsDga37ZXYHAxu2ysZ2hzUO8gDwO/3O7t27XLOnTvXclttba2zfPnyEK5q\nm9s2u22v47A5GNy213HYHAxu2+s4dja7/lHWAAB0Bq6/yxoAgM6AIAMAYABBBgDAAIIMAIABBBno\nRObPn6+dO3e2/DorK0t/+ctf9Pjjj2vSpEmaPn263n//fUnShx9+qKysLE2ZMkXp6enatm2bJGnd\nunV64oknNG7cOG3fvj0k5wFci1z/xCAA/mvKlClat26dHnroIZ04cUJnz55Vfn6+8vLy1L9/f330\n0UeaPXu29u7dq5dfflk//vGPNWTIEH366ad64IEH9Oijj0qSmpqa9Nprr4X4bIBrCz/2BHQijuNo\n1KhR2rJli8rKyuQ4jgoLC9WnT5+W9zl79qx2796tuLg47du3T8eOHdOxY8e0Z88eHTt2TOvWrdNX\nX32l+fPnh/BMgGsPV8hAJ+LxeDRx4kTt2bNHf/zjH1VYWKjNmzerrKys5X1OnTqlbt26ac6cOYqL\ni1N6errGjRunPXv2tLxP165dQzEfuKbxPWSgk5k8ebJKSkrUs2dP9erVS7fccktLkA8cOKCHH364\n5Z/nzJmje++9V0eOHJEkXbx4MWS7gWsdV8hAJ3PjjTeqZ8+emjRpkiRp1apVWrZsmX73u9+pS5cu\nWrt2rTwej5566illZmYqLi5OvXv3Vq9evfTZZ5+FeD1w7eJ7yEAn4jiOvvjiC2VlZenVV1+V1+sN\n9SQAV4m7rIFOZO/evZowYYLmzp1LjAGX4QoZAAADuEIGAMAAggwAgAEEGQAAAwgyAAAGEGQAAAz4\nP1F0MhJyeK0DAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "s.plot(kind='bar')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "plot()函数的参数`kind`,可以指定plot()函数所绘制图形的种类,`'bar'`为柱状图。也可以采用这种形式:`s.plot.bar()`,效果与指定kind参数为bar类似。\n", + "\n", + "**柱状图**用宽度相同的柱的高度或长短来表示数据多少。\n", + "\n", + "柱状图一般用于展示**分类数据**,展示不同类别数据的多少(可将以上数据的每个年份理解为不同类别)。" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "s.plot(kind='barh')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "'barh'为条形图,与柱状图类似。" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\njnMAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "s.plot('pie',figsize=(6,6))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "'pie'为饼图。\n", + "**饼图**使用圆形及圆内扇形的角度表示数值大小的图形。\n", + "\n", + "一般也用于展示**分类数据**,用来表示各分类部分数据占全部数据的比例(频率分布)。" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAWwAAAFUCAYAAAAAtgZ5AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xl8lPW5///Xfc+WZbKTnZ0k7BB2EAEBEVA2K9pKi6dy\nWltPLWJbFLXV0185evxZT+sRrbYebUvdaKkWtbgUlVVB1rAlIYEkZN+XmSSz3t8/IgiadTIz99wz\nn+fj4UNNMnNfA8Obez73dV8fSVEUBUEQBCHgyWoXIAiCIPSOCGxBEASNEIEtCIKgESKwBUEQNEIE\ntiAIgkaIwBYEQdAIEdiCIAgaIQJbEARBI0RgC4IgaIQIbEEQBI0QgS0IgqARIrAFQRA0QgS2IAiC\nRojAFgRB0AgR2IIgCBohAlsQBEEjRGALgiBohAhsQRAEjRCBLQiCoBEisAVBEDRCBLYgCIJGiMAW\nBEHQCBHYgiAIGqFXuwAheDgcDh566CHKysqw2+3cfffdZGRksGnTJiRJIjMzk0cffRRZltm2bRuv\nv/46er2eu+++m/nz59PY2MjGjRuxWCzExsayefNmEhIS1H5ZghAwJEVRFLWLEILD9u3byc3N5eGH\nH6axsZFVq1YxatQo7rzzTmbMmMEjjzzCnDlzyM7OZt26dWzfvh2bzcaaNWvYvn07v/nNb4iJieGH\nP/whBw4c4N133+W//uu/1H5ZghAwxJKI4DVLlizh3nvvBUBRFHQ6HadPn2b69OkAzJ07lwMHDpCT\nk8OkSZMwGo1ERUUxePBgcnNzKSgoYO7cuQBMnjyZI0eOqPZaBCEQicAWvCYyMhKz2YzFYmH9+vVs\n2LABRVGQJOny91taWrBYLERFRV31OIvFwujRo/noo48A+Oijj2hvb1fldQhCoBKBLXhVRUUFd9xx\nBytXrmT58uXI8pdvMavVSnR0NGazGavVetXXo6KiuOuuuygrK+Pb3/42paWlpKSkqPESBCFgicAW\nvKa2tpZ169axceNGVq9eDcCYMWM4ePAgAHv27GHq1KlMmDCBI0eOYLPZaGlpobCwkKysLA4fPsyt\nt97KK6+8wpAhQ5g8ebKaL0cQAo646Ch4zebNm9m5cyfDhw+//LWHH36YzZs343A4GD58OJs3b0an\n07Ft2zbeeOMNFEXhBz/4AYsXL6a4uJgHHngAgKSkJB577DHMZrNaL0cQAo4IbEEQBI0QSyKCIAga\nIQJbEARBI0RgC4IgaIQIbEEQBI0QgS0IgqARYviTIISg/g7qamlp4b777qO1tRWj0ciTTz5JYmKi\n2i8r6Im2PkEIQf0d1PXaa69RVVXF/fffz7Zt2zh//jybNm1S+2UFPXGGLWiSw+HC0txOW6uD9rYr\n/3HS3mb/4t8ObDYnKApIEhKAxBf/lvhixAmSJGE06QmPMBAeYez03xGRRoym4PnjsmTJEhYvXgx0\nPahr//79yLJ8eVCX0Wi8PKgrKyuL8+fPA2CxWNDrg+fXJpCJX2UhICmKQnNjG/W1rdTXWqivbaWx\nvpWmhjaaGlqxWux+r8lo0hMbH05sXASxCREMGqAjNayV8PR0wpKTkGTtXBKKjIwEuGpQ1xNPPNHr\nQV3x8fHs37+fG2+8kaamJl555RVVXkeoEYEtqM7lclNd0Uz5xSYqShupKG2iprIFp9OtdmlXsduc\nVFe0UF3RAkB7movGPVsBkAwGwlNTCE9PJ3L4MKJGZmHOzEQfEa5myd2qqKjgRz/6EWvWrGH58uU8\n+eSTl7/X06CuLVu28L3vfY9vfetb5Obm8uMf/5i3335bjZcRUkRgC37lditUVzZTcbGJ8osd4VxV\n0YwrwMK5N8LbGy7/t+Jw0FpykdaSi9R9+lnHF2WZiEEDiRqZ1fFPVhbhgwZePotV06VBXY888giz\nZs0CvhzUNWPGDPbs2cPMmTOZMGECv/3tb7HZbNjt9suDuqKjoy+feSckJFwV6oLviIuOgs811LVS\nmFfN+fwaLpyrxdbuVLskr5gjn8SY37dNFnSRkURlZhA1MovocWOJHjMaWYX13/4O6qqqquLnP/85\nra2tOJ1O1q9fz+zZs/3+OkKNCGzB62ztDi6cq+V8fg2FeTU01LWqXZJPzK95B7mptl/PoYuMIDY7\nm/jp04ifOhm9mE4odEMEtuAVTQ1tnD5eRt6pSspKGnG7g/ttFRauZ/bJF736nJJOR9ToUcRPn0r8\n9GmEp6Z69fkF7ROBLXjM2mLjzIlyTh0r42JxA4TQOyklMYyxnz7v02OED0wnftpUEmbNJGpklk+P\nJWiDCGyhT2ztDs7mVHLqWBkXCmpRgvxMuiuZ6XoG7/buGXZ3wgcNJHnRQpLmX4chOtpvxxUCiwhs\noUeKW6Egr5pjB0s4d7Zakx0d3padaiNh72t+P66k1xM/fRrJixYSmz1RU73fQv+JwBa61Gq1c+xg\nCUc/Kw7aC4eemhVTQcSR91WtwZSUSNLCBSQvXIApcYCqtQj+IQJb+JrWlnKqi/fxzo5I6uvE2XRn\n5rqPYDh/Uu0yOsgysdkTSV26mLhpUwOiz1vwDRHYAtBxK3hT7Vmqi/fSUl8AQLt7Mrs+FG1mnZlf\n9jfkNovaZXxN+KCBpN+8ksR5c1Xp7xZ8SwR2iFMUN/UVx6g4vwtba81V39MZzPzz/ck4HSoVF6DM\nZgMzjv9B7TK6ZRwwgLQVy0hZvAhdWJja5QheIgI7hDVUnaS84H3arVVd/kyjdSb79xn9WFXgS08J\nY9Q+37b0eYshJpq0VStJvXGJCO4gIAI7BDXV5lJe8D6tzaU9/qzBlMhbb48CRayLXjIqXUf67v9T\nu4w+McREk7ZyBak3LRXBrWEisENIS/15ygvew9J4oU+PK62azYnjOh9VpT2Tk1uJ279N7TI8YoiJ\nZtDt3yJl8SLREqhBIrBDgLXpIuUF79Fcl+/R4/VhQ/jHP4Z4uSrtusZcQvjxj9Quo18ihw1j2PfX\nETN2jNqlCH0gAjuIOewWSvPeob6ibxPlOnP63FyKznuhqCAwz3YA/UXP/vILNAOunc3Q794h+rg1\nQgR2J/qyQSlAfX09t99+Ozt27MBkMtHe3s7GjRupq6sjMjKSJ554gvj4eL/VrygKdWWfU3ruXVwO\n79zwIhlH8c7bSV55Li2TZIn5519Bcvp/xxtfkU0m0r+xioHfWIVsFBeYA5lYxOrEjh07iI2N5dVX\nX+XFF1/kV7/6FY8//jgbNmzg1VdfRVEUdu3aBcDevXtZt24dNTVftsS99tprZGVl8eqrr7Jq1Sqe\ne+45v9XeZqkk//PfUXzmr14LawAc50gQJ2FERxmDKqwB3DYbF197g6M/upfaA5+qXY7QDRHYnViy\nZAn33nsv0PUGpQcOHABAlmVefvllYmNjLz/+yJEjzJkz5/LPfvqp7/8QuF0Oys79k7Of/rbPFxV7\nQ1FcTJ3a7PXn1ZqYCLUr8B1bdTV5T/yaU7/4T9oqKtUuR+iECOxOREZGYjabr9qgVFGUr21QCjB7\n9mzi4uKuevyVG5de+bO+0lSTy+kDv6bywscoistnxzHqcgmPCO0VNLNsU7sEn2vKOcnxDT+l8v0P\n1C5F+AoR2F2oqKjgjjvuYOXKlSxfvvzyejV8uUFpV67cuLSnn+0Pp6OV8zl/oeDY/2Fvq/fJMa7k\ndrYzfUbwB1Z3Ih2h8SnD3d5O4XMvcOZXj2FvbFS7HOELIrA7cWmD0o0bN7J69Wrgyw1KAfbs2cPU\nqVO7fPzkyZPZvXv35Z+dMmWK12u0NFzgzKe/oaHyhNefuzux5nNIIfyuMTZXq12CXzUcPsKxH99H\n3acH1S5FQHSJdKovG5ResmDBAnbu3InJZKKtrY0HHniAmpoaDAYDTz31FImJiV6pTVHcVJzfRcX5\nf4GiziS9qoZrOHwoNAcLXdfyMbqqYrXLUEXSgusY9v1/Rx8RxAv5AU4EtobY25u4cPI1LA2FqtZh\nCEvnrX+MULUGNej0MvPy/4jkDt2Rs6akRDI3/JiYsWPVLiUkhfCHW21pqjnL2U9/o3pYAzjay8ga\nFXp/z8dGG0I6rAFs1TWc+vl/UvSnrSgu313gFjonAjvAud1OLubuoODYSzgdVrXLuWxUVoXaJfhd\ndFjo/SXVKbebsr+/xZlfPYbTEjjvyVAgAjuA2doayDu4heqSvWqX8jUuWyEpaWpX4V9mqV3tEgJK\n47HjnNi4idbSnqc+Ct4hAjtAWRoukPvZ07S2lKldShcUJk1qULsIvwpvF+1tX9VeXk7O/Q/ScOSo\n2qWEBBHYAaiu/DD5R34fUEsgndG78zBHqV2F/5iaxN1/nXFZWzmz+XFK//6W2qUEPRHYAURRFMrO\n/ZOiU2+guJ1ql9Mjt9vO9BmB/ZeKN+lDtJ2vV9xuiv+0lfz/eRq3PbhmrQQSEdgBwu12ciHnFSov\nfKx2KX1iDssnFPZ6NZp0yA1db6UmdKjZvYeTD/4cW12d2qUEJRHYAcDpaOXc4d/TUOXfuxa9weVo\nYdqM4D+jio0yqF2CZlgKCsn52SZaS0rULiXoiMBWma2tgbxDz/pkwp6/JA8I/p0Nok2i57gv7PX1\nnHzoF7TkBcdGD4FCBLaK2q3V5B3aQrtV2/MpHO3VjJ8Q3IEWqXhxtniIcLZYOPXIL2k8kaN2KUFD\nBLZK2q3V5B9+AYctOKa/DR8WqO2H3hHeFlotjN7ibm/nzK8eo/J4/7epE0RgqyLYwhrA2V7EkKFq\nV+E7xoZytUvQLDljMA/l/5kDJSK0+0sEtp8FY1hfMn58Tc8/pFG6yiK1S9Ak3ZgMnpvUhkWx87+f\nvcTeokNql6RpIrD9qN1aE7RhDYAjnzj/7TXsNxERBmSLuMuxr3RjMnguu5V2Ou4pcCtuthz6I3uK\nxGxtT4nA9pOOsH4+eMOajn0fp00LvtcXG6Xr+YeEq8jjMnl2ovVyWF+iKAq/O/RnDpdpr4U1EIjA\n9oNQCOtLwvR5mMLUrsK7ovSBf9dpIJHHZ/HseAs2qfPOIZfi5jef/h9nqkXLX1+JwPYxW1t9yIQ1\ngMvZxvQZwTXVLsJlUbsEzZAnZPHsuBbsXYT1JQ6Xgyf2/Y7z9eLmmr4Qge1DLkcbBUdfCpmwviQ+\npgBJCp7Z0eGttWqXoAnSxJFsGdfcY1hf0uZo57E9z1DeIm757y0R2D6iuF0U5myl3Rp6b0anrZ5J\nU4JnZxZDXXD3mHuDlD2KZ8c24aBvv+/NNgubP/lf6lpFn3tviMD2kZLcN2mpO6d2GaoZlB4kk+0k\n0dLXo0mj2DK6oc9hfUltaz3/tfsZWh1tXi4s+IjA9oHKok+oLQ3t1iVneykZWdpfFomKMiLZRJB0\nadJonh3VgLOfS2ClzRX872cv41aC55OZL4jA9rKGqpOU5f9T7TICwuhR2l8Oio2Q1C4hYClTxrBl\nVH2/w/qSo+UneS3nH155rmAlAtuLrE0XKTr5GqD9M0tvcNsLSE5Ru4r+MescapcQkJQpY3g2qw6X\nly8u/yP3A/YVi7shuyIC20vs7Y0UHv8jbrf4A36Z4mbSZG3fIRjhDK0On95wTxvLMyNrvR7Wl/zu\n879QWB8k10C8LAT2CvE9t9tJ4bE/hlz7Xm8YyCMicgatGt1JLKwleOejeMI9bSxbMmt8+hnS4XLw\n5L7neXzRJuLCY7zznA4HDz30EGVlZdjtdu6++24yMjLYtGkTkiSRmZnJo48+iizLbNu2jddffx29\nXs/dd9/N/Pnz+f3vf8/evXsBaG5upra2lv3793ultr6QFEURn9/76WLuDqpL9qpdRsBqdU7l410R\napfhketa96ArD/4NGnrDNX0sz2b4NqyvlJUwnF8u+Ak6uf+jAbZv305ubi4PP/wwjY2NrFq1ilGj\nRnHnnXcyY8YMHnnkEebMmUN2djbr1q1j+/bt2Gw21qxZw/bt2zEajZef6wc/+AFr167l2muv7Xdd\nfSWWRPqpqeYs1SX71C4joEVH5KPTa++8QNZJyFXiTjwA54xxPDvCf2ENkF93nm2n3vHKcy1ZsoR7\n770X6JhnotPpOH36NNOnTwdg7ty5HDhwgJycHCZNmoTRaCQqKorBgweTm5t7+Xk++OADoqOjVQlr\nEIHdLw5bM0Wn3kBcZOye097M1Gnam8cRE21Ecmmvbm9zzhzHc8OrUVRomHkr931OVeX1+3kiIyMx\nm81YLBbWr1/Phg0bUBQFSZIuf7+lpQWLxUJUVNRVj7NYvhxN8MILL3DPPff0ux5PicD2kKK4uXDy\nNZwOjS7O+llqkvb2rIwJV7sC9TmuGc9zw9QJa+g4G95y8I+02Po/z6WiooI77riDlStXsnz5cmT5\ny/izWq1ER0djNpuxWq1Xff1SgBcUFBAdHc2QIUP6XYunRGB7qKroE1rqC9QuQzMc7ZWMGaetmyLM\nUnANseor+zXjeW5olWphfUl9WyO/O7S1X89RW1vLunXr2LhxI6tXrwZgzJgxHDzYcYPbnj17mDp1\nKhMmTODIkSPYbDZaWlooLCwkKysLgAMHDjB37tz+vZh+EoHtAWtjCWUF76tdhuZkjNDWNlvhtia1\nS1CNbfYEfjc0cG58Olyew3vnPvH48c8//zzNzc0899xzrF27lrVr17JhwwaeeeYZvvnNb+JwOFi8\neDGJiYmsXbuWNWvW8G//9m/cd999mEwmAC5cuMCgQYO89Io8I7pE+sjlbOfMp7/B3lavdikaJHHi\nzBxKL6pdR+9ca8zDdOZTtcvwu/ZrJ/DC4Eq1y/gag87A49c/wODYdLVLUY04w+6jkrNvirD2mMLE\nidoZVaqvDr2bN9rnTAzIsIaO/uzfHdqK262tpTVvEoHdB821edRXHFW7DE2TXPnExqldRc8MBhm5\nrkLtMvyqbd5EXhgU2K+5sKGYd/L/pXYZqhGB3Utul53is39XuwzNU9xOpk1rUbuMHsVGG5FCaLWw\n9bpsfp8e2GF9ybZT71DRUq12GaoQgd1L5YUfiKUQLwk35GM0BnYYRoeFzsduy3UT+UOadi4I210O\n/nD4VbXLUIUI7F6ob6mnstj/cwOClctpZdoMu9pldCtSaVW7BL9omZ/N/6Vp48z6Sqeq89h94TO1\ny/A7Edg9UBSF35+s4W3j7TRETlS7nKAxIK4AAnjfx/D24N+yqnlBNi+laufM+qu2ntiOxRZaN66J\nwO7B/tI6ChutlFudvNE0hgPmNdiMGh/yHACctjqyJwXusoOpMTA7JbyleWE2L6doN6yhYz/IV0+G\n1oYHIrC7YXU4+Xve1W/qnEaFv7QvIDdmBS7JpFJlwWHIoMBtyA7mfRwbr8/m5WRth/UlH53fT2mT\n9pZ0PCUCuxvvFlTSYv/68B+HW+GTuki2626jMlqdqV3BwNlewvCMwFsWCQvXIzfXqV2GTzQsmsSf\nkoIjrAHciputJ0Kne0sEdhfq2ux8XNz98Pr6didv1Q/iw4jvYA0f4afKgsvYMYHXnhUbFZz7etQv\nmsSfE8vULsPrjlWc4mRVbs8/GAREYHdhR345Tnfvzv4Km128YpnOsehbcei9s0NGqHDbzzEgSe0q\nrhZtCL6RqrU3TGJrEIb1JVuPbw+JHddFYHeirKWNT8v61nPtVuBgvZ7XXcspjr4BN/3fJSMkKG6m\nTAmsIUsR7uDqPKhZPIlXBgRvWAMUNZayp+ig2mX4nAjsTryVX+7xlgRWh4ud9Qm8Y1oj2gB7ySjl\nER5AO4iFtQbP+nX1kkm8mhDcYX3JGyffxu4M7P7+/hKB/RUFDRaOV/X/jE+0Afae29XO9Bltapdx\nmak+OLoOqpZM4rX40AhrgLq2Bt4v2KN2GT4lAvsr3szz7hV00QbYO7Hmc0gB8m7UVWp8011JonLp\nJF4PobC+5J28f+FwOdQuw2cC5I9IYMirayG/vv9bEX2VaAPsmdPeGBD7PprNRqQ2Da9hSxLlS7N5\nIy70whqgob2Jjy8E7wxzEdhXeO+8b3fYEG2A3UtPUX/fx5hIDf+RkCTKlmbz19jQDOtLduR+gMvt\nUrsMn9Dwu9O7ylraOFXT7JdjiTbAzjnaKxg1Rt3WrCi9Ri9aSRIXb8zmbyEe1gDV1jr2lxxWuwyf\nEIH9hfd9fHb9VV+2AS6jOEa0AV6SlanuBb8Il/eXxHxOlii5KZu/x4iwvuTNs+8RjLsfisAG6tvs\nHCpXZzqb1eFmZ11HG2B9ZLYqNQQSV/t50lTcsi/cop0tzACQJYpvmsib0SKsr1TWXMnB0mNql+F1\nIrCBXUXVuFT+27jc6mRb02jRBohCdrZ6G0Xo60pVO3afyTIXbprIW1HBMxvEm97J26V2CV4X8oHd\n6nCx52LgnFV92Qa4MmTbAGV3HlHR/j+uJEvoKor8f2BPyDLnl01ghwjrLuXXnae4UUN/AfdCyAf2\np2V1tDsDawZBRxtgBH+Tbw3JNkDF7WD6DP+vJUdHGZE0cKecpNNRuGwCb5tFWPfkw4K9apfgVSEf\n2PsuBu5tyA02V8i2AUaa8tEb/HvMmAC6Pb4rkk5H/rLxvCPCulf2Fh+i3dGudhleE9KBXdRopbQl\ncG6J7kootgG6HBam+3nfxyjZ5tfj9ZWk15G3bBz/jBRh3Vttznb2lXyudhleE9KBvTeAz66/KhTb\nABPjC/16vHC7f/rwPSHpdZxdNo6dkcEx58SfPiwMnmWRkA1sm8vN5xXqdSN4KpTaAJ22GiZk+++O\ntbCWwNtMAUDS6zmzbBzvR4iw9sSFhosU1BWpXYZXhGxgH6looC3ALjb2Rai0AQ4b4r+r/PqaEr8d\nq7ckvZ5Ty8fygQjrftl1fr/aJXhFyAb2/lLtLId0J9jbAJ3txQwd7vvj6PUyck1gtYBJBgMnl4/h\nX+EirPvrs9KjOF3qDxfrr5AM7NpWm0+m8qkl2NsAx431/VJFTIwRyR04n7gkg4Gc5aPZFV6pdilB\nwWpv5XjlGbXL6LeQDOyjlY1ql+ATV7YBWsIz1C7HexznSEjw7SGiTQEU1kYDx5eP4qMwEdbetD8I\nukVCMrCPVQVnYF9S2OziVcu0oGkDVBQXU6b5toPDTGD06spGI8eWjeKTMP8OIwtWEhKDzUPJ0s3m\nzIFk7A5tj13Vq12AvzXZHBQ2aHhAfS9dagM8ZVjGnJgaBjftQka7b1aTLo+wsGm0+yhXw23qDP+6\nkmwycWRZJntMIqz7Qy/rGRQ5FF1LGiV5EeRd3vHPxdG8amaOS1WzvH4JucA+Vtno8Qa7WmR1uHmv\nLoG0iDVcazhJvPW42iV5xO1sY/rMdvZ8EuaT5zc1qRuSssnE58sy2WcKzNbCQGfUGRkUMRylIYUL\nuSbOtEqd/tyBnHIR2FoS7MshXSlvdbKN0YyPHcMU+8eE2bXXeRAXdQ5JGoeidP6HsT/0VcVef87e\nksNMHLopk/0irPskwhDOQNMI7HWJFJ41caoXN8YeOlOF0+VGr9PmanBIBXarw0leXfB0h3jiZKNC\nrjyf2XFWMpvfQ6cE9u3YV3LaG5gyzcXhQ95925pMOuQGdc6w5bAwPluWwadGEda9EW2MItUwHGvV\nAC7k6alz9e0vb2ubg5xztUweleSjCn0rpAI7p7pZ9bnXgeBSG+AJ063MiygipWWf2iX1WnpqMYfx\n7iCsmGg/T5n6ghwexoGbRnBQhHW34sPiSZSH0VQWR3GBjqp+fsI6klclAlsLztQG7qwINTTYXLxl\nG8SI6O8wS/kMc1uB2iX1yNleRtbI4eTneW9ZJNro/4uxckQ4+28cziFjjd+PrQVJEUnEu4dSWxLD\nxSId3txP51SBdm+aC6nADvXlkK4UNru4IE1jWtwkxrV+gMHZ1PODVDRqZAX5eWlee75IpdVrz9Ub\nckQ4+24axucGEdZXSo9Mx+wYTOX5aIrLJXx1VaGooglLqx1zhNFHR/CdkAnsmlYb9e2BP5xeLVpq\nA3TZCklJS6PSS1NGw1r9NwRMFxHB7puGcsQQOLscqUVCYpB5CGFt6ZQWmCmo8f7F5M64FTh1vk6T\n3SIhE9i5dS1ql6AJ2mgDVJg0qYGd5XFeeTZTo3/mS+siI/jkxqEcDeGw7rpH2r9OFYrADmh5IrD7\nJNDbAPXuPMxRM7F44bdVV1nU/yfp6RiRkXx842COhWBYm77okXb30CPtTycLtfn7EEKBLdavPRGo\nbYBut53pM6x89K/Ifj1PRKQB2eLb0zydOZJdSwdzwqDdi119dalH2labyPlcEycDbDWyqLwJS5sD\nc7g6HUKeConArrS002hzqF2GZl3dBlhMSktg7OBhDstHr5+Esx9TM2PNvt25Rxdl5sOlAzmpD/6w\njjZFkar3vEfan9wKnC6sZYbGlkVCIrBDYXaIP3S0AQ5kRNR3mIX6bYAuRwvTZtj5dL/nV/uj9L77\ni1wXFcWHS9M5qdfezka95e0eaX86db5OBHYgKm72b9tWsCtsCZw2wOQB54FRHj8+wuWbpTJddBTv\nL0njdBCGdXJEErHuodQVx3KxWPZqj7Q/9Wcd2+Fw8NBDD1FWVobdbufuu+8mIyODTZs2IUkSmZmZ\nPProo8iyzLZt23j99dfR6/XcfffdzJ8/H5fLxeOPP86pU6ew2+38+Mc/Zv78+T0eNyQC+6IIbK8L\nlDZAR3s14ydkcjLHs6WNMKv3lyp0MdG8tziVM3r1JwB6y5U90kXl2jmL7s6F8mbsDhdGQ9/fOzt2\n7CA2NpYnn3ySxsZGVq1axahRo9iwYQMzZszgkUceYdeuXWRnZ7N161a2b9+OzWZjzZo1zJ49m3fe\neQen08nrr79OVVUVO3fu7NVxgz6wFUWhtKVN7TKC1pVtgHMMJ4lToQ1w+LAyTuYM9uixxnrvnh/q\nY2N4d3EyuTpth7VaPdL+5HYrXKxqYcTA2D4/dsmSJSxevBjoyBidTsfp06eZPn06AHPnzmX//v3I\nssykSZMwGo0YjUYGDx5Mbm4u+/btIzMzk7vuugtFUfjFL37Rq+P2emSV0+kkLy+PwsLCPr84NVW3\n2mjX8Ga7WlHe6uSNptHsN6+h3ejfdUFnexFDhnrwQAl0FRe8Voc+Loa3FyeTq9PmREi9rGd4VAaZ\nzMWQt5jive7JAAAgAElEQVS8j0Zx4tMo6oIwrC8pqvBsXEVkZCRmsxmLxcL69evZsGEDiqIgSdLl\n77e0tGCxWIiKirrqcRaLhYaGBkpKSnjhhRf4/ve/z4MPPtir43Yb2N/73vcAyM/PZ+nSpTzwwAPc\nd999LF++nPz8fI9eqL9dbBZn1/50slHhlfb5nPXzpsDjx/f9Nu/oKCOS3Ts7IujjYtlxQxL5Ggtr\nk85IRtQohjuvw5mzkNO7Msg5FEFTYE8n8BpPAxugoqKCO+64g5UrV7J8+XJk+cs4tVqtREdHYzab\nsVqtV309KiqK2NhYrrvuOiRJYvr06RQVFfXqmN0Gdl1dx/reY489xs9//nPeeustduzYwS9+8Qse\nfvhhD16i/5WI9Wu/c7gVdl/aFDhqjp8Omk9cfN8eEhPhnZnI+vg4dtyQyDmdNlIu0hBBlnkcQ9rn\n03pkASd3DeX00TDaAuCGFn/zNLBra2tZt24dGzduZPXq1QCMGTOGgwcPArBnzx6mTp3KhAkTOHLk\nCDabjZaWFgoLC8nKymLKlCns3r0bgNzcXFJTe/eptFdr2C0tLcybN+/y/0+fPp12X+3V5GXiDFs9\n/mwDVBQX06Y188H70b1+TJSu/3dz6BPieWtRAoVyYId1R4/0CKxVCVzI01MbwD3S/nSxyrNbZZ9/\n/nmam5t57rnneO655wB4+OGH2bx5M//zP//D8OHDWbx4MTqdjrVr17JmzRoUReG+++7DZDJx2223\n8eijj3LbbbehKAq//OUve3VcSVG6HhA9efLky8sfN998M7fddhtNTU387W9/Y//+/bz00ksevVh/\neuiTU9S0BthtViFIlmBanNOnbYA6fTjv75qGrZfnElOSLcTu/5vHx9MPiOfNhfGc1wXm2N6E8HgG\nSMNoKounuEDGraEeaX/a9thNhJu00X/RbZXvvvsuJ0+eJDo6murqjiHrb7/9NidOnODxxx/3S4H9\n4VYU6tvEHY6BwB9tgC5nG9NntLN3d+/2fQxr8XzjAP2ABP6+MJYLARbWX+2RLlW7IA0oq7GQ4UGn\niBq6PcPWuro2O5s+PqV2GUIn0iL0PmkD1Jvi2fH22F7t+3iddQ+6ivN9P0ZiAn9bEEuxLjAGil3Z\nI10ZJD3S/rTxO1OYO2mg2mX0ijY+B3iori0wBhUJX1fe6uQNH0wDdNrqmTTFzdHD3d8MIeskZA82\n3tUnDeCvC2IokdULa1mSGRQ5GFNbOhfPmSmoFSHdH2XV2hkM121g99QbGOjLIrVi7TrgXZoGeE2c\nlSwvTQMclF7M0cPDu/2Z2GgjkrtvSzL65ES2zY/iogphrZf1DI4citySRnFuOLlNIqS9pbJeO51k\n3Qb2lClTeOyxx7j//vsxmfzXU+sttW0isLXgUhtgjpemATrbS8nIGkZBftehFh3et+c0JCfy2nwz\nZbL/zsaunCN9PtfE6RBsu/OHJot2Pol3G9irV6+mqKiI0tJSfvazn/mrJq+pbdXOb4Tg3TbA0aOq\nKMhP6fL7Zqn3bamGlCRevS6Sctn3Ux8jDRGkm4Zjq03ifK4x4OZIB6Nmq3Z+kXtcw16/fj2ff/55\nr56sLxOsAOrr67n99tvZsWPHVWfwH374Ie+99x5PPfWUhy+rg9jDUZsuTQOcGjeJ8R62AbrtBSSn\npFBV2fn3w229uyPRkJrMq/MifBrWl3ukKxM4n6en1i3OpP2pKZgC22g0Mnv27F49WW8nWC1atIi9\ne/fy1FNPUVNz9S3FmzdvZt++fYwePdqzV3SFFls/JtsLqnIrcKhezyn9MubG1DK46V99awNU3Eya\n3Mh7/+y8XcvUVNXjUxjSUvjL3DAqfRDWX+2R1tIc6WDTHCxLIm1tbTz77LO89957VFVVIcsySUlJ\nzJ07lw0bNlw11AR6P8Fq0aJFyLLMyy+/zC233HLVc0yePJnrr7+eN954o98vzmIXga11rU4379XF\nezQN0EAeEZEzaO0kbw01Jd0/Nj2VrXNNVEneuyAleqQDU7vdhc3hwuTBmFV/63aYws9+9jMiIiL4\ny1/+wvHjxzl69Chbt24lMTGRn/zkJ1/7+d5OsAKYPXs2cXFf3/X6xhtvvPzz/WV1+H8+s+AbnkwD\ndLtszJj59cA1GHVIdV23ERoGprJ1jtErYZ0eOZCRxlnElC6m6JPJHN8Tz8Vi78wwEbxHKxceu33n\nXLhwgf/4j/8gJSUFnU6HTqcjJSWFH/7wh1RUdP6G780EK39od7pwBe89QSHr6mmAPd/RGB2Rj05/\n9fsgNsqA1MV7wzAojT/NMVIlezaDRpZkhpiHkqWbTfj5xRR8PI7j+2LEDS0BrtmijXXsbgM7Pj6e\nnTt34nZ/OU9aURTefffdTs+OezvByh9axdl10PpyGuBqKnqYBui0NzN12tVLY9Fhnc9HNwxK54+z\n9dRIfQvrS3OkM5iLLncRuV/Mka4XN7RohlY6Rbpdw37yySf55S9/yc9//vPL69UWi4WpU6fyxBNP\nfO3nezvByh/anSKwg12DzcU/etEGmJp0Aci6/P+RSifLJEMG8tI1MvW9bPfr6JEegbshWfRIB4Em\nqzaWRHo1S8TpdNLQ0ICiKMTHx6PXB/4d7YUNFv77U21ssiD0nyzB1Dhnl22AF8qu5cypjg+UM+Jr\nMB969/L39EMG8tI1Eg1S939or+qRPmvA7hAhHSy+v3IcK+aOULuMHnW7JNLS0sJjjz3Gfffdx4ED\nB0hKSroc1r3dg0wtdpfYFiyUXGoDfM25jKKYxbi5+op/xojyy/9tavzy+ot+6KBuwzraFMXIyGwG\ntiyk4dM5nPhoILk5RhHWQcahkW0Euw3sBx98ELPZzLJly/jzn/98VUifOhXYU/DE9cbQdKkN8B3j\nGhoisy9/3dV+gYGDOv5bV1kEgH7YYF6cxdfCOiE8npERU0hpWETNvms4/nEK584acIkbWoKWWyOB\n0e3aRmlpKVu2bAFg3rx53HXXXfz3f/83mzZtItCnsgZ2dYKvdTYNcOLEWmprU5Cb69EPH8yLMxSa\nvgjr5IjkL3qkY0SPdAhyubWRGD0uRtfU1JCYmEhYWBjPPvss3/72t3n++ee91ivtK9r45Rd87cpp\ngCMtHzEoNRV96xBenO7GbE4kxT6IyvNRFFWI3uhQ5g6GwL7nnnv4xje+wX/+53+ycOFCoqKiePHF\nF/nhD39IXl6ev2r0kDZ+AwTf+3Ia4EpmDy7jdNwMMpqTaP0ipNN0kKaN+fWCj8QYA/8uR+ghsK+/\n/npmzpyJ0/llH2tSUhJ/+9vf+Oijj3xeXH8E+IqN4Ed6RSG5XaLqdB07jTYWhp0j6+An2FMyaItN\np1kfQ0O7nvoGm2bOtATvihzd9WTHQNLjkojZbL7q/3/wgx/wwgsvcP311/usKEHwhihFwtzg4Fxu\nLaWX9/aU+XCOhWELEljwSR6m0weIBQYDisGEc/BI2gcMwRI2gEanidpGB3ab6OkPdrIusJd4L+lz\nQ/WlzXgFIVAluSQcZa3kFdZ1esacZBjCMUMORddH8N1TCbhPdvTrSw4bhsIcDIU5RAGpgCJJuFOG\nYUsdgdWcTBOR1LUoWFq0cWec0DuyHKSBHejdIZfoAvyiqOBdeiC5FSoKG8jpYY8+R30CGDva+X47\nzsbalEnE7ToB7q/34kqKgq7iPBEV54kAEoEMwB0zAMfALFrjBtKii6G+TUdDo1hS0aqgDew//OEP\nvqjD68I0MCpR6L8YRSK8zsG5vBpK23s3Trco34huvIxLcaNI8OfEMq69eQwz/lWCs6m5V88hN9Vi\naqrFBMTxxZKKMQznoEtLKgkdSyoNDux2saQS6GSdNrqEug3ssrIynnrqKTZs2IDBYOD+++/n1KlT\njB07lscee4zBgwf7q84+C9eLwA5mKU6J9lIr+efr6OtJbWurxMjIQZRYvtw1fZ+pmvNLE7j9aALO\n/Ase1STZ2zEUnsBQeOLqJZXUYdhSrlhSaVawaGQ6XKgIijPsjRs3snLlSlJSUrj33ntZsWIFf/jD\nH/joo4944IEHeO211/xVZ5+F67XxN6bQewYFklqhrKCe47X92wUm3J4KFF/1tXLZym+nSKxLnUjE\nnhyvtBpJioKu/DwR5VcvqSixA7ANHElbzBddKm0y9Y12FLGkogpTWODPR4Je7DjzzW9+E4Dy8nJu\nvfVWoGOTgd/97ne+r64fxBl28IhxS4TX28nLreWil7Z9qyuNhqSvf90lKfwhvYIbVk5g3IfncFm9\nt+PMlaTGWsIaawmjY0llCKCYwnEOyqJ9wFBaTAk0OozUNjpwiCUVn4uINKpdQq90G9hJSUls27aN\n2267jRkzZrB7927mzZvH3r17iY3tfK+8QGHS65Al+vxxWQgQikKKU6a11EL+hXqv99WXFkskDYqi\n2dbS6fc/iKjg3LJUvvGZDWexf25Ul2xtGApOYCjoWFJJAxRZxpU6DHvKCKyRyTQpEdS1uLFYHD09\nndAHEZGmnn8oAHQ7XrWmpob777+fvLw8UlJSOHv2LGazmeTkZLZs2cLQoUP9WGrf3fvhCbGRgcaY\ngAEWhdKCeqrqfHN2e8nEBWXkW052X4+i43sXEtB/FljDztyxiTgGjqQ1No1mXQz1bTINYknFY+sf\nXkhsfESfH+dwOHjooYcoKyvDbrdz9913k5GRwaZNm5AkiczMTB599NHLO2/V19dz++23s2PHDkwm\nE4qiMHfu3MtZmp2dzU9/+tMuj9ftGXZiYiIvv/wyDQ0NXLx4EafTSWJiIoMGDerzC1NDuF4nAlsj\nYt0Splo7eXk1FPtpCcDZOKDHPimb5OLZ4dWsSsxm2AdncdsCY9C93FiDqbHmcpfKl0sqo2gbMBiL\nKYEGh5E6saTSK54uiezYsYPY2FiefPJJGhsbWbVqFaNGjWLDhg3MmDGDRx55hF27drFo0SL27t3L\nU089RU1NzeXHl5SUMHbsWJ5//vleHa/bt6vb7Wbbtm289957VFZWXt41fd68eXznO9/BYDB49CL9\nJcZkoK5NXI0PWIpCqlPGUtJCXnGD38cJFOUZkcfJuJWeZyG/FVXO2JVDWbqnAUdlYN481rGkcgxD\nwTGiuXJJZTi2lOG0RibTqERQ1+zGahVLKpfoDTJGk2cXHZcsWXJ5Fy1FUdDpdJw+fZrp06cDMHfu\nXPbv38+iRYuQZZmXX36ZW2655fLjT58+TVVVFWvXriUsLIwHH3yQ4cOHd11rd8U8+uijuN1u7rnn\nHpKSOq7QVFdX849//IMHH3yQX//61x69SH9JCDdyvrF/3QSC95mUjmWPknN1HGvwbLNbb7BaJbIi\nB3LRUtKrnz+tb+DifCN35o6CY7k+rs47JLcbfVkB+rICIunoUskE3HHJ2NMzO2ap6KI7llQabCE5\ng8cc1fNmzl2JjIwEOrZOXL9+PRs2bOCJJ564PM00MjKSlpaO6ySzZ8/+2uMTExO56667WLp0KYcP\nH2bjxo1s3769y+N1G9iff/4577333lVfGzx4MFOnTuWmm27q2ytTQXx4YH8CCDVxbgljjY28/Fq/\nLXv0JMKRBvQusAGaJTtPj67n9qRJJO/KQdHo3qFyQxVhDVVXd6mEReAYNJL2hCG0mOJpdBipa7Dj\ncGhjNxZPRcd6HtgAFRUV/OhHP2LNmjUsX76cJ5988vL3rFYr0dHRXT523Lhx6HQdHW1Tp06luroa\nRVG6HF/dbWCbzWZycnKYMGHCVV8/duwYERF9X6D3t/gwbbTqBDMJhRS7THNJM2eLG9Uu52vqy6Jh\nQN8f91pCGdNuHsncjypx1tV7vzAVSO2tGM8dw3iuY0klnY4lFXfacGzJI7BEJnV0qQTZkkpMXLjH\nj62trWXdunU88sgjzJo1C4AxY8Zw8OBBZsyYwZ49e5g5c2aXj9+yZQuxsbF8//vfJzc3l9TU1G73\nGui2S+Ts2bPcf//92Gw2EhMTgY7OEZPJxK9//WtGjhzp6ev0ixNVjWw5cl7tMkJSmALxLW6Kz9VR\n19i7ncjVIEkKibP302Lvfv5IVwa4w7gjx4jrTOc7tgcrd1wy9oFZtMak0aKLoa5VorFRm0sqsxdm\nsPDG0R49dvPmzezcufOqdeeHH36YzZs343A4GD58OJs3b758Fg2wYMECdu7ciclkoqmpiY0bN9La\n2opOp+ORRx5hxIiuNwPu1a7p5eXll0/Vk5OTSUtL8+jF+dvF5lb+v33aWGsMFvFuGV11G3n5tdg1\n8lF64sJS8ls8b9uTgO9WphH9yYmQbvxXwiNxDhpJW8JgWozxNNqN1DbacQb4++DGW8Yz9ZqhapfR\nKz1eGt27d2+nXSI33HCDP+rrl4RwsSTiD7LSsezRWNzMmYuBt+zRE2dDz+193VGAl1PKmbdqHFM+\nLMLV0vnNOMFOarNiyD+KgaNXLKnocKWPwJY8DGtEMk1KOLXNbloDaEklOtbzJRF/6/Zt+vTTT5OT\nk8OKFSuu6hL561//yrFjx3jggQf8UqSnIgx6wvU62jR6YSjQhSsScc0uivLrONocuMsePSkpMCGN\nklD6ua3c7rAqzt+UyG2fx+MsLO75ASFAcrvQX8xHfzGfSDqmAWQCrvjkjht/YtJolqOpt0o0NNlU\n2dkvzoMbZtTS7ZLI4sWL2blz5+W7dC5xuVwsW7aMnTt3+rzA/nri0zwKGkRrnzcNcMlQ1UbeuVoc\nzsD+uNtbmQtOUWrxzi3oBmTWlSQRti/HK88XKtzh5o7xtAmDaTHG0WA3UufjJRWdXubBx5YGx3hV\nk8lEZWXl19asy8vLMRq1sdwwMCpcBLYXyAqk2KC+uJlTpU1ql+N1Zkc64J3AduDmhcGV3Lgym5Ef\n5OJu0+6nD3+S2ywY849g5MhXllQyOpZUIpNodIdT1+SmtdU7SyqJyWbNhDX0ENibNm3i29/+NkOH\nDr2qS6SoqIjHH3/cLwX2V3qUdtanAlEkENPo4nx+HUdbAuO2bF9oKI+GBO8+5z8jyzm3YhAr91tx\nlJZ798lDRMeSSh76i3mXl1QA3Alp2NMzaY1OpVkXTZ1VotGDJZXk1K57pANRj10i7777LhcuXECn\n0zFo0CCSk5OZOHEib7755uXRq4GssMHCf3+ar3YZmjPALUFFG7nn6nC6gmPZozuypJBwzT4sDu9/\nGgtX9HyvIA7589Nef27hS+5wM87Bo2iLH4zFGEeD3UBdgx1nN8t2i1aMYda8rtvoAk23Z9i//vWv\nOX36NMOHD+ef//wnmzZtYtq0aQC8/vrrmgjs9KhwJFS5lqE5OiC5HWovNHGqvHdbZQULtyKRahrC\nOccZrz93m+TkmcwabknMZtC/TqPYA6dDIpjIbRaMeYcxcpgYrlhSGZhBe9JwrBGJNLkjqG120fbF\nkorWzrC7Dezdu3fz5ptvotfrWbt2LevWrcNoNLJ06VLNbMYbptcxIMJETWvwfpzvr0hFIqbRSUFe\nLWXW0B2WpTQngg+XM7fHljNh1QgW7a7DWVXT8wOEfpPcLvQleZhL8jADyUAW4BqQhj09i9TU61Wu\nsG+6Dewr72kfOnQoL7zwAnfeeSfx8fHd3j4ZaAZGhYnA7kSSS8JV0UpeQR1Olzb+AvalknPhSCP7\n397XnRx9PcULwrjzzEiUE3k+O47QPV1tObGyk3CNXePq9nxiyZIlrF27lpycjvakzMxMnn76aTZs\n2EBJSe8H5qhtSEyk2iUEDL0C6W1gON1IziclnM6rFWH9haYmSI1M9f1xJBu/HdtA3aJsJJ3Yyk4t\n5swMtUvos27PsO+55x6mTJlyeYQgwJQpU/j73//OSy+95PPivCUr3qx2CaqLUiTMDQ4K8usoDeFl\nj55EuwdSjn86Ov6SWM6sm0dzza6LOBuCr1Uy0EVpMLB7NUtE65xuN/d+cAJ7CM55SHJJOMpaySus\nwx2Cr7+vhmW6qIz70K/HTFYi+PYxGVeuGFTmT+P/+7+IHj1K7TL6RDsd4/2gl2WGxYbOsoheUUhv\nA92pBnI+KeHsuVoR1r1UXKgjwuDfdc0qqZWnJ1mxXDcRNHRtSMt04eFEZWWqXUafhURgQ2gsi0Qp\nEqn1Tho/reLIgYuUVXk2MjSUud2QFjbU78d1SQr/l1bByVXj0ZlD5+RCLdFjx2jy+kE/ZpRpS2Z8\nFFCpdhk+keyUsJVZyS+sC+Xpnt7TnATSWVUO/VF4JYU3pbD6kB3nhYuq1BAKYiaMV7sEj4TMGfaI\nuEj0cvB83DQokN6qIOXUc2J3CbkFIqy9pbSgf1tG9VexroVnZjpxzNJmqGhB7ERt/tqGTGAbdTJD\nY7QzRrEr0YpMSq2DugMVHPm0lIoaMdjK2xoaJL+093XHLrl4blgV55dnI4eZVK0l2BhiookYMkTt\nMjwSMoENMD4xRu0SPKMopDhkYoqsFHxczPETlbS2O9WuKqjFuAeqXQIAb0eVs3PFEAxpKWqXEjRi\nxo/X1I1/VwqpwM5O1lZgG4F0q4Jyop7je4rJK6wXyx5+0lQROO+VXH0jv5unQ5kyRu1SgkKMRpdD\nIMQCOy0qnKSIwP94GatIpNQ4qNlXwZHPSqmqa1W7pJBTXKAjXK/uWvaVrJKD/x1ZS+XSSUj6kOkV\n8D5ZJn7aVLWr8FhIBTYE8Fm2opDikIg6byXv4xKO51TSZhPLHmpxuSXSwgNvnfONuDL23JyJfoCX\nh3eHiOjRozDGxaldhsdCLrAnJceqXcJVTIpEukXBfbye43tKOHehnuC/91QbZEuy2iV06qihjpcX\nRSKP096NH2pLuGaW2iX0S8gF9vC4SKKM6n+kjHVLJFfbqdpXxpGDpVTXi2WPQFNaELiT3Oqldn47\nvonGhdkgh9wfY89IEgmzZqpdRb+E3O+0LElMTFJpWURRSHVImAst5H5cwomTVbTbxY7ugaq+TiI5\nIjDPsgEUCf6UXM7Rm8eii9HWIH41RI3MwpQQr3YZ/RJygQ0wNdW/a1gmIL3FjfNoHcf2lFBQ1ODX\n4wuei2OQ2iX0aK+piteXJqDPHKp2KQFN68shEKKBPXpAFHFhBp8fJ94tkVRpp2JPGUcOlVHb2Obz\nYwre1VIZWNc8ulIuW3l6ahttcyeqXUpgkiQGiMDWJlmSmJXum49GEgqpdomIcy2c+biEnNNV2B3B\nv4ltsCoq0BOmD/xWUACnpPD7gRXkrpqILkL7d/V6U/ToUZgSB6hdRr+FZGADXDPQu21R4UikN7ux\nHa7l2N4Szpc0evX5BXU4nZAegO193Xk/ooJ/rEjHMDhd7VICRvIN2tq7sSshG9jJkWFkxPV/jGWC\nWyKxwkbZ7lKOfF5GfVO7F6oTAkmgtvd1p1BuYsu1Cs4Z49QuRXV6s5kBs69RuwyvCNnABs/PsmVF\nIc0mEZ7XzOmPSzh5phq7Uyx7BKvyC9pcXmjHybMjqilZNgnZaFS7HNUkzpsbNK8/pAN7WmocRl3v\nfwnCFYm0Jjdtn9dwdF8JF0rFPnyhoLZaIikiSe0yPPZmdBn/WjUcQ4p2X0N/JC9epHYJXhPSgR2m\n1zE1pecugAEuiQHl7ZTuKeXo4TIaWmx+qE4IJFpo7+vOSX09v59vhGxt7WHYX1Ejs4gcMljtMrwm\npAMbYOHQzs86dEBaO5hymzj1SQmnztbgEMseIctarY32vu40S3aeHlNPzeJJSHrtbY/lieQbgufs\nGkRgMzgm4qr9HiMVibRGF5ZD1Rzdf5HismYVqxMCRdE5PUZdcKyDvppQxoFVo9DHa3cIUm/ozWYG\nzJmtdhleFfKBDR1n2YkumfjSdop3X+TokXKaxLKHcAWHQ2JghLba+7pzyFjDnxdHoxs9Qu1SfCZl\nyQ3oTNrooe8tEdhAdlIMdadqOZNXg9MlRuUJndNbtdfe150aqY3fTGqhZX42BNF+pwCSwUDqshvV\nLsPrRGADsixx83UZapchBLiKC/3v2w80CvBSajknVo1HF2Xu8ee1Ium6eZqee90VEdhfWDhtEHFR\nwfXxSfCu6iqJAeHav725M5+EVfLXm5LQDw+CjgpZJv0bK9WuwidEYH/BoNexYm7wrucJ3pEgB0Gg\ndeGibOF/Z9qxzdbunocAA2bPIjwtrc+PczgcbNy4kTVr1rB69Wp27dpFcXExt99+O2vWrOHRRx/F\n7f6yU6y+vp7Fixdjs119vauwsJApU6Z87eveIAL7CjdeM5TIMPU3NxACV2tN8H3MvpIDN88PqaJg\nRTZyeODsadlrksTA1bd49NAdO3YQGxvLq6++yosvvsivfvUrHn/8cTZs2MCrr76Koijs2rULgL17\n97Ju3Tpqamqueg6LxcITTzyB0Ud3VorAvkJEmIFlc4arXYYQwIryDRhk34/mVdu75nLeXTEYw8BU\ntUvpk/jp04gc6lk3z5IlS7j33nsBUBQFnU7H6dOnmT59OgBz587lwIEDAMiyzMsvv0xs7Jf9+Yqi\n8Itf/IKf/OQnhIf7ZrciEdhfccv8TLGWLXTJboeBkcHT3tedfF0jv5sj4Z42Vu1SekeWGXLHtz1+\neGRkJGazGYvFwvr169mwYQOKoiBJ0uXvt7S0ADB79mzivnJRc8uWLcybN49Ro3x3N6kI7K8IN+n5\nztLRapchBDBja3C193XHKjl5JrOGshsnIRkC+5NF8qKFRAwc2K/nqKio4I477mDlypUsX74c+Yr9\nMq1WK9HRXW/FtmPHDrZv387atWupqalh3bp1/aqlMyKwO3H9tMEMSxN75AmdqywOvva+nvwttoxP\nbs5AH6CbAMhhYQz+1jf79Ry1tbWsW7eOjRs3snr1agDGjBnDwYMHAdizZw9Tp07t8vEffvghW7du\nZevWrSQmJvLSSy/1q57OiMDuhCxL/PsKMUdY6FxluUxCuLY3c/XEcX0dL10fjjw+S+1SviZtxTKM\n/bzV/vnnn6e5uZnnnnuOtWvXsnbtWjZs2MAzzzzDN7/5TRwOB4sXL/ZSxZ6RFEURt/Z14Vf/d5BD\nZyS3RGAAAA+HSURBVCrVLkMIQNnzq8izHlO7DFVICnynNp34XSfArf5ANENMDJOffxZ9hG8u9AUS\ncYbdjXUrxqLXBdctu4J3tNUGd3tfdxQJtiaWcfjmMehjY9Quh0HfvDUkwhpEYHcrPdHM0muGqV2G\nEICKzxkwyKHds7/fVM0rS+LQj1SvFTZ84MCg2qCgJyKwe3D7DSMxhwf21XHB/9rbJdIjg/eux96q\nlFv57WQr1nkTQfLzp1FJIuNHP0TWh85fnCKwexAVYeRbN4xUuwwhAJnaUtQuISC4JIUX0ys4vWoC\nukj/ddAkX7+Q6DGh1YIrArsXbpo9jIFJwTPJTPCOqpIotUsIKP8Kr+DNZSkYhvavF7o3DDExDP3u\nWp8fJ9CIwO4FvU7mvtsnIwfZzGChfypKJeLCQvfiY2cu6Fp4ZpYLxyzftsUOXfdd9ObQO4kSgd1L\nWYPjuHVhptplCAEmUS/Wsb/KJrl4blg1RcuzkX2w40ts9kSSrpvr9efVAhHYfXD7opFkDFS/jUkI\nHPa60LuBprf+EVXO+yuHYkjz3q38stHI8B/e5bXn0xoR2H2g08n8ZM0UjHrxyyZ0KMo3oZNCYwdy\nT5zRN/D8PD1M9s7FwSH/tpbw1NC92CuSp48GJUdxx01j1C5DCBBtbTBQtPd1yyI5eHpUHZVLJiH1\nowUvbsok0oJwn8a+EIHtgRVzhjMhIzCH4Aj+F2bT1sxotbwRX8a+VVnoB/R9GckQE0PG+nt8UJW2\niMD2gCRJbPjWZLE7jQBAzcXQ61bw1GFjLX+63oxubN82vc5Y/yOMV2wWEKpEYHsoMS6cu27W9t53\ngneUlcjEmsTF6N6qldv5zYRmmhZmQy9aZVNvWkr81Cl+qCzwicDuhwVTBzNrvPg4LECSITR2ofEW\nRYI/JpdzbNU4dNFd34AUMWQwQ797hx8rC2wisPvpnluzSYqPULsMQWX2+gS1S9CkPWFVvHHjAPQZ\nQ7/2PTksjKyf3ofsow1ttUgEdj9FRxp5ZN0Mwk1iPTuUFecb0Unij5MnymQrT09ro23OxKu+nnHP\nfxA5RHTgXEm8w7xgSGo0P/v2lN4sxwlBqrVVIj1ykNplaJZTUvj9oAryVk1EjggnbeVyEufMVrus\ngCMC20umj03hjhtFf3YoC7eL6xn99V5EBWfuvJah/xZ6g516QwS2F92yIJMFU8VZVqiqKxUbN/dX\nijmRb163Fkkn7h7tjAhsL7vn1omMHirmS4Si0mKJaJMYueqpCEM4D8z5D8zG0NuVvrdEYHuZQa/j\noe9OJykuNPaYE76kKBIphqFql6FJsiSzYdb3SI8O3TkhvSEC2wdio0z8fN0MwoziY12ocTaKkQWe\nuHPSbWSnimtAPRGB7SPD0mL4yZopft/mTlBXUZ4RWbT39cm3xq9gceY8tcvQBPHO8qFZ41P53krf\n7rwhBBarVSI90vdbZAWLVaMX840xS9UuQzNEYPvYijkj+PcVIrRDSYQjTe0SNGFJxnWsmbBK7TI0\nRQS2H6yaN4J/XzFW7TIEP6kvE50iPZk3dCZ3Tr5N7TI0RwS2n6yal8G65SK0Q8HFCzJRRjFytSsz\nB07m7mlrkcQFnj4Tge1HN1+XwZ3LxJXwYKcoEqmmoWqXEZAmpY5l/ax1yLKIHk+IXzU/+8b8TL4r\nthgLes4G0d73VWMSM/npNXehl0W7q6dEYKvglgWZ3HGjdzYlFQJTSYEJCfGR/5JJqWPZNPdHGPVi\nVGp/iMBWya0Ls0RoB7GWZol0c7raZQSEeUNncv+1dxOmN6ldiuaJIc4qunVhFpIk8ad3z6hdiuAD\nZkcaUKp2GapaNXqxaN3zInGGrbLVCzLZ+J0pGPXityLYNFSE7j6PkiTx3Um3irD2MklRFEXtIgTI\nK65n88uHaGyxqV2K4CWypJBwzT4sDqvapfiVXtZzz4zvcs1gsXGut4nTugAxckg8T907l6GpYqZy\nsHArEqmm0NqcN9wQxkNz7xFh7SMisANIUlwE//+P5zB9jBgxGSyU5kS1S/CbuLAYfjn/p4xLHql2\nKUFLLIkEILdb4eV3TvPW7kK1SxH6KSYGHCPfRyG4/5hlJQznvmu+R0JEnNqlBDUR2AHs/c+Kef7v\nJ3C6xG+Rlo2Yn0O5tVztMnzmxqwFfGfiN8QNMX4g2voC2OKZQ0gbEMnjfzpES6tD7XIED0W7B1JO\n8AV2uD6Mu6evZeagyWqXEjLEGbYGVNZZeeqVI+QWN6hdiuCBYZkuKuM+VLsMrxock85PZn+ftKhk\ntUsJKSKwNcLlVtj2r3ze+DAPl1v8lmmJLEPcrN20OtrULsUr5g2dyfen3C5uM1eBCGyNyS9p4H9e\nPUJZTWj19mrd+IXFFLScVbuMfjHoDNw56TauH3Gt2qWELBHYGtRud/LSjtPs/LRI7VKEXho/rZUC\naY/aZXhsUHQq98y8k2Fxg9QuJaSJwNawQ2cqeeaN4zRaxN2RgS4uXqE94321y+gzWZJZMWoRt469\nCYPOoHY5IU8EtsY1WWw8s+04B09Xql2K0IPh809QYa1Qu4xeGxSdyn/M+DdGxIfW3ZqBTAR2kHj/\nsyJe/Mcp2u0utUsRupA9r5a8tsNql9Ejnaxj5agbuGXMUnFWHWBEYAeR2v/X3t3FNJXmYQB/aIED\ntBSG74qzZaACInZlUT4GcVhcRjcrgYnZ2UUTgt5siIpGghIweMMNMSbGZGPc7C7GxJuZVaPZLDca\nXYxxzYw4zCjKh4giFCyypS1FWkr3AgXNsIrSrxeeX0IK9BzOv0l5cnrO/31f4wSa/3kfrXcHvF0K\nzSMpZQqDYVe8XcY7pUQl4U/rd2JlmNrbpdA8GNhL0IPHo/jLpZ/Q02/0din0BrnMibCcf2Ni6qW3\nS/kZRUAwdv7yK2xO3MjFcX0YA3uJcjqduPpdP87+qwP/5ZStPiN982M8Mnd6u4xZcj8ZChPz8Pv0\nbQgP4kyRvo6BvcRZX9rx7dVuXGp9BPvUtLfLWfZ02VZ0O32jvS97ZQbKdCUcrSgQBvYyMfRiHH+7\nfA//ucduEm+KiHRiIsm77X2ro7XYqfsKyVGJXq2DPhwDe5lp7zbgr5fuoU9v8nYpy1ZCwV0MW4c9\nftxPVWqU6UqxPl7n8WOTazCwl6HpaSdu/aTHN1e60Ds45u1ylp2MghE8tHquvS8iOBxfpxejICEH\nMplr1iyx2+2oq6vDwMAAbDYbKisrodVqUVtbCz8/P6xatQpHjx6dPd7o6CjKyspw+fJlSJIEq9WK\n6upqmEwmBAQEoKmpCbGxvDTzPgzsZe67jiF8c6WLMwF6kDZ1CgMq97f3qZUx+G3yr1H42ecun6jp\n/PnzePjwIerr62E0GlFaWorU1FTs2rUL2dnZaGhoQH5+PoqKinDjxg0cP34cT58+xa1btyBJEs6c\nOQOLxYK9e/fiwoUL6OjowJEjR1xa41LE+bCXuQ1pcdiQFocfewz4x9Vu3O0yeLukJa+vxx+hWRJe\nTrmne2d19CpsS9mMzBVrIfNzzyqAW7duxZYtWwDMdCTJ5XLcv38fWVlZAIBNmzbh5s2bKCoqgkwm\nQ3NzM7Zv3z67f0VFBRyOmUFeg4ODUKnYobIQDGwCAOi00dBpo/FEb8Kl1ke43vaMXSVuMjUFxAdr\n8Mjc5bK/KZfJkftpJrYlFyLRA0PJFQoFAMBisaCqqgoHDhxAU1PTbA+3QqGA2WwGAOTl5c1fs1yO\n8vJydHV1obm52e01LwVchJfeolGrUPWHDPz9yJf4Y1EKwpSc89gdZBbXXK9VBIagJPVL/Pl3jajK\n2eWRsH5Nr9ejvLwcJSUlKC4ufuv6+Pj4+ILOms+ePYtz585h37597ix1yeAZNs0rPFTCzq2p+Po3\nyfj+wTCu3enH9w+GedbtIoOPQ4CEj99fG5GALxJy8MVnOQjyl1xW10KNjIxg9+7daGhoQG5uLgAg\nLS0Nt2/fRnZ2NlpbW5GTk/N/9z99+jRiY2NRWloKhUIBuZzrQS4EbzrSglkm7LjZPoBrd56h4/EL\n8J2zOJqCNjy3Pl/w9mplDDZqNmCjJgvq0Bg3VvZ+jY2NaGlpQWLiXC93fX09GhsbYbfbkZiYiMbG\nxreCuLCwEC0tLZAkCSMjIzh8+DBsNhscDgeqq6uRmZnpjZciFAY2fZTno1Zcb3uG62396B+2eLsc\nIa0rMKDTeued24QHqfD5L9YjX5PFaU6JgU2L19NvxLW2fty4O8B5Sz5Acpod/cqrP/t9sH8Qslau\nQ74mC+kxKS7rnSbxMbDJZaanneh5ZkR7twE/dBnwoG+U17zfISDAiZD112Bz2BCvikNG3BqsU6/B\n6mgt56GmeTGwfdhiR5OZzWbU1NTAYrHAbrejtrYWGRkZHqt/0u5AR+8LtHcb0N5tQO/AGLjg+4xw\npYT0pEhk58qwZkUCohWR3i6JBMDA9mGLHU128uRJqFQqVFRUoLe3F9XV1bh48aLXXo/ZasOPPSNo\n7zLgh24D9CPLZ+X30JBApCdFQqeNwlptFDRxHChCH45tfT7MFaPJAgNn+qgdDgckyfPtX28KDQlE\nnm4F8nQrAACjppfo05vwdMiEJ3oz+oZM6B82Y1LgZc785TKsjFEiQa2CRq1CwquvqPBgb5dGSwAD\n24ctdjTZ64ELBoMBNTU1qKur81DlCxOhCkKEKgi/SplrUZuedmJ41DoX5ENmPBkyYeC5BQ4fu54S\n/UkwNHFzoZygViE+Rgl/OW8SknswsH2cXq/Hnj17sGPHDhQXF+PYsWOzzy1kNFlnZycOHjyIQ4cO\nzZ6Z+zKZzA/qKAXUUQrkrp1bV9A+NY0XYxMwWiYxZp6E0WLDmGUSY+OTGDPPfG+0TGLMMgnTuO2j\nw10ZHIDwUAlhSgnhoRI+UUoIC5UQ/urnNx+DJP77kGfxHefDFjuarKenB/v378eJEyeQmprqqbLd\nIsBfhrhIBeIiFe/d1ul0wjJhh80+c2nl9SeSt1Yq9Hv98Oo5P0ARHMCzY/JpvOnowxY7mqyyshKd\nnZ2Ij48HACiVSpw6dcrjr4OIXIOBTUQkCH7+IyISBAObiEgQDGwiIkEwsImIBMHAJiISBAObiEgQ\nDGwiIkEwsImIBMHAJiISBAObiEgQDGwiIkEwsImIBMHAJiISBAObiEgQDGwiIkEwsImIBMHAJiIS\nBAObiEgQDGwiIkEwsImIBMHAJiISBAObiEgQDGwiIkEwsImIBMHAJiISBAObiEgQDGwiIkEwsImI\nBMHAJiISBAObiEgQDGwiIkEwsImIBMHAJiISBAObiEgQDGwiIkEwsImIBMHAJiISxP8A19/kTWuc\njnMAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "s.plot('pie',figsize=(6,6))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "可利用plot()函数的`figsize`参数,设定图形的大小(长与宽)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2. 数据基本分析、度量与展示\n", + "\n", + "**2.1 归一化**\n", + "\n", + "**归一化**一般要使数值的绝对值变成**相对值**,将数值映射到[0,1]区间上。\n", + "\n", + "在本例中,由于每个年度的语料大小不同,单纯观察每个年度某个词汇出现的频次(绝对值),无法确定其出现的相对高低(相对值)。\n", + "\n", + "因此可将频次归一化,即某词汇每年出现的次数/每年语料的总字数。这样,该词汇就可以利用频次归一化的数值进行横向比较了。\n", + "\n", + "在实际中,也可以将频次归一化的结果乘以一个较大的整数。在本例中,可乘以10000000,表示语料中每10000000字出现该词汇的频次。" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "#python实现\n", + "def norm_freq(freqs, total_freqs, per = 1):\n", + " return [per * freq/total_freq for freq, total_freq in zip(freqs, total_freqs)]\n", + "\n", + "per = 10000000\n", + "s_norm = norm_freq(freq_dict['天长地久'], total_words_freq, per = 10000000)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "上面的代码用python实现了将每年的频次归一化为每年每一千万字该词汇出现的频次。" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "2006 162.008910\n", + "2007 127.899045\n", + "2008 179.107151\n", + "2009 76.700561\n", + "2010 349.964106\n", + "2011 91.696850\n", + "2012 202.502025\n", + "2013 72.000720\n", + "2014 86.901107\n", + "2015 21.595940\n", + "dtype: float64" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s_norm = Series(s_norm, index = years)\n", + "s_norm" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "利用归一化处理后的结果初始化一个Series对象s_norm。注意,此时value的数据类型自动转换为float。" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "year\n", + "2006 162.008910\n", + "2007 127.899045\n", + "2008 179.107151\n", + "2009 76.700561\n", + "2010 349.964106\n", + "2011 91.696850\n", + "2012 202.502025\n", + "2013 72.000720\n", + "2014 86.901107\n", + "2015 21.595940\n", + "Name: 2006-2015, dtype: float64" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#pandas的Series运算\n", + "s_norm = per * s / total_words_freq\n", + "s_norm" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "也可以直接利用pandas的序列运算进行归一化。运算结果与python编写代码一直,但是更简洁。\n", + "- `s_norm = per * s / total_words_freq`,其中`s`为Series类型,`total_words_freq`为list类型,直接相除运算的结果是将s中每个对应的值除以list中每个值。这种向量/矩阵运算是numpy及pandas中非常常见的情况,一般被称为**矢量化操作**。" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAe8AAAFXCAYAAACLEMbVAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xl8leWd///XWXKy7zlZSUISspAdwqYoiOwoLqgIUaSt\nttOO/XZ0rNPHt1Ntf9P5Tqfj1Gmn046ttbWioqi4IQKKKCD7EkISsm+E7HtOtrPdvz9A6oJk4ST3\nOSef518+QnLO++N953xyX/d1X5dGURQFIYQQQrgMrdoBhBBCCDE20ryFEEIIFyPNWwghhHAx0ryF\nEEIIFyPNWwghhHAx0ryFEEIIF6NX882tVhtdXQNqRnCI4GAfl6/DHWoA96jDHWoAqcOZuEMN4B51\nGI3+DnkdVa+89Xqdmm/vMO5QhzvUAO5RhzvUAFKHM3GHGsB96nAEGTYXQgghXIw0byGEEMLFSPMW\nQgghXIw0byGEEMLFSPMWQgghXIw0byGEEMLFSPMWQgghXIw0byGEEMLFSPMWQgghXIw0byGEEMLF\nSPMWQogrsCt2TrQU0DPUq3YUIb5CmrcQQlzBseZT/KX4ZV4qfEvtKEJ8hTRvIYT4EovNwo7qPQCc\nuFCIzW5TOZEQXyTNWwghvuRA4xG6hrvx1Bkwmfup6K5WO5IQXyDNWwghPmfQOsTu2o/w0nlx/8z1\nAJxpK1I5lRBfJM1bCCE+Z2/9J5gs/SyPX0xOWAb+Bl/OtBVhV+xqRxPiMmneQghxSa+5j73nD+Bv\n8GNJ7I3otDrmxOTQY+6jtve82vGEuEyatxBCXPJ+zV7MNjNrpi/DU2cAYP60XAAK2s6qGU2IL5Dm\nLYQQQPtgBwcbjxDmHcrC6PmXv54ZkYaXzpMzrUUoiqJiQiH+Rpq3EEIA71bvxq7YWZu4Ep1Wd/nr\nBp0HGaFptA91csHUpGJCIf5GmrcQYso739fIiZYCYv2imR2e/ZV/zw3PAqBAZp0LJyHNWwgx5b1T\n9T4AtyetQav56sdiekgqeq1eHhkTTkOatxBiSivvqqKks4yUoCTSQpKv+D1eek9mhqTQ2N9My0Db\nJCcU4qukeQshpixFUXj7s6vuGavRaDRf+725xkwAzrTK1bdQnzRvIcSUdaa9mNreenKNWUwPiLvq\n92aFpaPVaOW+t3AK0ryFEFOSzW7jnapdaDVabktcOeL3+3r4kBKURF3feTqHuiYhoRBfT5q3EGJK\nOtp8kpaBVq6LmkOEb/iofiY3/NLQeVvxREYTYkTSvIUQU47ZZuG9mg/w0OpZk7B81D+XHZaBBo3M\nOheqk+YthJhy9l84RPdwDzdNu4Egz8BR/1ygZwAJgfFUdtfQZzZNYEIhrk6atxBiShmwDLK79iO8\n9d6siL9pzD+fa8xEQaGwXYbOhXqkeQshppQP6j9mwDrIivib8PHwGfPP51x6ZExmnQs1SfMWQkwZ\n3cM97Dt/kEBDADdNWziu1wjzDiHWL5qyzkoGrYMOTijE6EjzFkJMGe/X7sVit7AmYRmGS1t+jkeO\nMQubYqOovdSB6YQYPWneQogpoXWgjUONxwj3CeO6qLnX9FqfPTImQ+dCLdK8hRBTwt+2/Fz1hS0/\nxyPSJ5wIHyMlHaWYbWYHJRRi9KR5CyHcXn1vA6daC4nzn8YsY9Y1v55GoyHHmInZbqGks9wBCYUY\nG2neQgi3d3nzkaSrbz4yFp9tVFIgG5UIFUjzFkK4tdLOCkq7KkgLTv7aLT/HI85/GsGeQRR1lGC1\nWx32ukKMhjRvIYTb+vKWn46k0WjINWYyaB2ivKvKoa8txEhGbN4Wi4XHHnuMDRs2kJ+fT1VVFXV1\ndWzcuJH8/Hx++tOfYrfbAdi2bRvr1q1j/fr17Nu3b8LDCyHE1ZxuO0t9XwN54TnE+U9z+OvLgi1C\nLfqRvuGTTz7BarXyyiuv8Omnn/LrX/8ai8XCI488wvz583nyySfZu3cvubm5bNmyhTfeeIPh4WHy\n8/NZuHAhBsP4n6UUQojxstltvHtpy89bR7Hl53gkBU3H38OPwrZiNqTeiVYjg5licox4piUkJGCz\n2bDb7ZhMJvR6PcXFxcybNw+ARYsWcejQIQoLC5k1axYGgwF/f3/i4uIoLZUFDIQQ6jjcdJzWwXau\nj55HuE/YhLyHVqMl25hBn8VEdU/dhLyHEFcy4pW3j48PFy5cYPXq1XR1dfHMM89w/PjxyzM2fX19\n6evrw2Qy4e/vf/nnfH19MZlG3nXHaPQf8XtcgTvU4Q41gHvU4Q41gHp1DFvN7Dq0F0+dgU15dxDs\nfW05rlbHYus8Pm08SpmpjOuSs6/pfSaSnFPuZcTm/fzzz3PDDTfw2GOP0dTUxObNm7FYLJf/vb+/\nn4CAAPz8/Ojv7//C1z/fzL9OW1vfOKM7D6PR3+XrcIcawD3qcIcaQN069tTuo2uoh5XxN2M1aWkz\njT/HSHVEaKPw1ntxuO4Ua2JWOuxRNEeSc8p5OOqPjxGHzQMCAi434cDAQKxWK+np6Rw9ehSA/fv3\nM2fOHLKzszl58iTDw8P09fVRVVVFSkqKQ0IKIcRo9VsG2FO/D1+9D8vjF0/4++m1ejJD0+ka7uZ8\n34UJfz8hYBRX3t/4xjf48Y9/TH5+PhaLhUcffZTMzEyeeOIJnn76aRITE1m5ciU6nY5NmzaRn5+P\noig8+uijeHp6TkYNQghx2Z66fQxah7hzxi14670n5T1zwzM53nKKgrYi4gIcP6tdiC8bsXn7+vry\nm9/85itff/HFF7/ytfXr17N+/XrHJBNCiDHqGurmk4ZPCfIMZHHM9ZP2vukhKXhoPShoK+K2pFWT\n9r5i6pLnGoQQbmNnzYdY7FZuSViBh85j0t7XoDOQEZpKy0Arzf0tk/a+YuqS5i2EcAvN/a0cbjpO\npE848yNnT/r7f7Zgy2lZ61xMAmneQgi38G71LhQUbku69i0/xyMzdCY6jY4zbWcn/b3F1CPNWwjh\n8mp76yloKyIhII7ssAxVMvh4eJMaPIPzpkbaBztVySCmDmneQgiXpigKb1c6fsvP8fhsm9Azsta5\nmGDSvIUQLu1cZznl3VWkh6aSHJykapZsYwYaNLJRiZhw0ryFEC7Lrth5u+p9NGi4PdGxW36Oh7/B\nj6Sg6dT01NEz3Kt2HOHGpHkLIVzWqZYzNJgamRORyzT/aLXjAJBrzEJBobC9WO0owo1J8xZCuCSr\n3cq71bvRaXTcmrhC7TiXfXbfu0AeGRMTSJq3EMIlHWo8RvtQJzfEzCfMO1TtOJcFewUR7x9LeXcV\n/ZYBteMINyXNWwjhcoasw+ys/RCDzsCq6UvVjvMVucZM7IqdovZzakcRbkqatxDC5ew7f5A+s4ml\nsYsIMDjf/s454ZeGzmXWuZgg0ryFEC7FZO7nw/qP8fPwZWncIrXjXFGEj5Eo3wjOdZYxZB1WO45w\nQ9K8hRAuZXfdRwzZhlk5/Wa89V5qx/laucZMLHYrJZ1lakcRbkiatxDCZXQOdbG/4RAhXsHcGHOd\n2nGuKseYBchqa2JiSPMWQriM96o/wKrYuDVhBR5avdpxrmqaXxShXiEUtZ/DYreqHUe4GWneQgiX\n0Ghq5mjzSaJ9I5kbOUvtOCPSaDTkGjMZsg1T1lmhdhzhZqR5CyFcwrvVuy9v+anVuMZHV67MOhcT\nxDV+A4QQU1p1Ty2F7cUkBk4nM3Sm2nFGbXpAHAEGfwrbi7HZbWrHEW5EmrcQwqkpisJbl7b8vCNp\njapbfo6VVqMlx5hJv2WAqp4ateMINyLNWwjh1Io7SqnqqSErbCZJQdPVjjNml9c6l6Fz4UDSvIUQ\nTuvzW37e5gRbfo5HclAiPnpvzrQVY1fsascRbkKatxDCaZ1oKaCxv5l5kbOJ9otUO8646LQ6ssMy\n6B7uoa63Qe04wk1I8xZCOCWL3cqO6t3oNTpuSXCeLT/H47NZ57Jgi3AUad5CCKd08MIROoa6uHHa\ndYR6B6sd55qkBSdj0BkoaDuLoihqxxFuQJq3EMLpDFmH2FW7Fy+dJyvjb1Y7zjXz0HmQGZpG22AH\njf3NascRbkCatxDC6eyt34/J0s/SuEX4G/zUjuMQMutcOJI0byGEU+kzm9h7fj/+Hn7cHOucW36O\nR0ZoGnqNTu57C4eQ5i2EcCq7avcybDOzKmEpXnpPteM4jJfei7SQFC6YmmgdaFc7jnBx0ryFEE6j\nfbCTAxeOEOYVwg3R89WO43CfDZ3L1be4VtK8hRBOY0f1HmyKjVsTV6J38i0/xyMrLB2tRiv3vcU1\nk+YthHAKF0xNnGg5TYxfFHkROWrHmRB+Bl9mBCVS21tP11C32nGEC5PmLYRwCu9UvY+Cwu1Jq11m\ny8/xuDx03l6schLhytz3N0QI4TIqu2so6iglOSiR9JBUteNMqBxjBgBnWmXoXIyfNG8hhKoubvm5\nE4Dbk1a71Jaf4xHkGUhCQBwV3dWYzP1qxxEuSpq3EEJVhe0l1PTWkWPMJCEwXu04kyLHmImCQmF7\nidpRhIuS5i2EUI1dsfNO9a5LW36uVDvOpMk1ZgFwpu2sykmEq5LmLYRQzdHmUzT3t7Agag6RvhFq\nx5k0Rp9QYvyiKO2sYNA6pHYc4YKkeQshVGGxWXiveg96rZ5bEparHWfS5RozsSo2ijtK1Y4iXJA0\nbyGEKvZfOEzXcDeLp11PsFeQ2nEm3WdD57JgixgPad5CiEk3aB1kd+1HeOm8WBG/RO04qojyjSDc\nO4zijlLMNovacYSLkeYthJh0H9bvp986wPL4m/Dz8FU7jio0Gg05xkzMNjPnOsvVjiNcjDRvIcSk\n6hnu46P6/QQY/FkSe4PacVSVGy4blYjxkeYthJhUu2o/xGy3sCZhGZ46g9pxVBXnP40gz0AK20uw\n2W1qxxEuRJq3EGLStA60c7DxKEbvUK6Pmqd2HNVpNVpyjJkMWgcp765SO45wIdK8hRCT5r2aPdgV\nO2sTV6LT6tSO4xQ+26hEZp2LsZDmLYSYFOf7LnCipYBY/xhmhWerHcdpJAVOx8/DlzNtRdgVu9px\nhIuQ5i2EmBRvV70P4PZbfo6VTqsjOyydPrOJmp56teMIFyG/QUKICVfeVcm5znJSg2cwMyRF7ThO\nJ+fy0LmsdS5GR5q3EGJCKYrCW5+76hZflRqSjJfOizNtRSiKonYc4QKkeQshJtSZtiLqes8zy5hF\nfECs2nGckodWT2ZYGh1DXTSYGtWOI1yANG8hxISx2W28U70LrUbL2qRVasdxarLWuRgLad5CiAlz\npPkELQNtXBc1lwgfo9pxnFp6aCoeWr00bzEq0ryFEBPCbDWzs+ZDPLR61iQsUzuO0/PUGUgPSaW5\nv4Xm/la14wgnN6rm/Yc//IF7772XdevW8dprr1FXV8fGjRvJz8/npz/9KXb7xWcTt23bxrp161i/\nfj379u2b0OBCCOf2fsXHdA/3cNO0GwjyDFQ7jkvIkQVbxCiN2LyPHj3K6dOn2bp1K1u2bKG5uZlf\n/OIXPPLII7z88ssoisLevXtpa2tjy5YtvPLKKzz33HM8/fTTmM3myahBCOFkBiwDvHVuF956b1bE\n36R2HJeRFTYTrUbLGXlkTIxgxOZ98OBBUlJSePjhh/nud7/LTTfdRHFxMfPmXVyXeNGiRRw6dIjC\nwkJmzZqFwWDA39+fuLg4SktLJ7wAIYTz2VP3Mf2WQVbGL8HHw0ftOC7Dx8OH1OAZ1PddoGOwS+04\nwonpR/qGrq4uGhsbeeaZZ2hoaOB73/seiqKg0WgA8PX1pa+vD5PJhL+//+Wf8/X1xWQyjRjAaPQf\n8XtcgTvU4Q41gHvU4co1lLSW8+H5Twj1Cebu3JUY9K6/c9hkHo8bEuZwrrOcqsEK0uKWOux1Xfmc\n+jx3qeNajdi8g4KCSExMxGAwkJiYiKenJ83NzZf/vb+/n4CAAPz8/Ojv7//C1z/fzL9OW1vfOKM7\nD6PR3+XrcIcawD3qcOUaeob7ePr4n9Cg4R8WPEhP1zAwrHasazLZxyPBKwkNGg7WnGReiGN2XnPl\nc+rz3KEOR/3xMeKweV5eHgcOHEBRFFpaWhgcHOS6667j6NGjAOzfv585c+aQnZ3NyZMnGR4epq+v\nj6qqKlJSZBlEIaYKm93GX4pfotfcx+1Jq0kzJqkdySUFevqTGBhPdU8tvWbXblRi4ox45b1kyRKO\nHz/O3XffjaIoPPnkk0ybNo0nnniCp59+msTERFauXIlOp2PTpk3k5+ejKAqPPvoonp6ek1GDEMIJ\nvFfzARXd1eSEZbA0dpHacVxarjGTqp5aCtuKuSFmgdpxhBMasXkD/NM//dNXvvbiiy9+5Wvr169n\n/fr1155KCOFSitrPsbvuI8K8Qrh/5vrLc2LE+OQYM3mjcgcFbUXSvMUVySItQohr0jHYxV9LXkGv\n1fNQ1iZ8PLzVjuTyQr1DiPWPoayrkgHLoNpxhBOS5i2EGDeL3cpzRS8yYB1kffLtxPrHqB3JbeQa\nM7Erdoo6zqkdRTghad5CiHF7s3IHdX3nmRc5m+ujHTMzWlwkG5WIq5HmLYQYl5MtBXzScIgo3wg2\npK6T+9wOFukbTqRPOCUdZQzbZLVK8UXSvIUQY9bS38pLpa/jqTPwUOYmPHWuvxCLM8o1ZmKxWzjX\nUaZ2FOFkpHkLIcZk2Gbm2aItDNvM5KfdTaRvuNqR3FZO+MWNSk7LWufiS6R5CyFGTVEUXi17k6b+\nFhbFXM+ciFy1I7m1WL8YQryCKWovxWK3qh1HOBFp3kKIUTvUdIyjzSeJ949lXfKtasdxexqNhlxj\nJkO2Icq7KtWOI5yING8hxKic72tkW/nb+Oi9eTDzPjy0o1rjSVyjy3t8t8qsc/E30ryFECMatA7y\np6ItWO1WNqdvINQ7RO1IU0ZiYDz+Bj8K24uxK3a14wgnIc1bCHFViqKw5dxrtA92sCJ+CZlhM9WO\nNKVoNVpywjIwWfqp6q5RO45wEtK8hRBX9dH5A5xpKyI5KJFbE1aoHWdKkgVbxJdJ8xZCfK3qnlre\nqtqJv8GPb2bko9Pq1I40JSUHJ+Kt96agrQhFUdSOI5yANG8hxBX1mU08V/QSiqLwrYz7CPQMUDvS\nlKXX6skKm0n3cA/1fQ1qxxFOQJq3EOIr7Iqd54u30j3cw9rElaQEJ6kdacrL/WzWuQydC6R5CyGu\n4P3avZR2VZAZmsby+JvUjiOAmSEpGLQeFLSelaFzIc1bCPFF5zrKeb/mQ0K8gnkgfQNajXxMOAOD\nzkBGaBqtg+009beoHUeoTH4rhRCXdQ1183zJVrQaLQ9l3o+vh4/akcTnfDZ0fkaGzqc8ad5CCABs\ndht/Ln4Jk6Wfu5LXEh8Qq3Yk8SUZYTPRa3Ry31tI8xZCXPRW1U6qe+rIC89hUcx1ascRV+Ct9yI1\nJJkGUyPtgx1qxxEqkuYthKCg9SwfnT9AhI+R/LS70Gg0akcSX0NmnQuQ5i3ElNc60M6Wc6/hofXg\nocxNeOm91I4kriIrLB0NGtmoZIqT5i3EFGa2WXiu6EWGbENsTF1HtF+k2pHECPwNfswISqCmt47u\n4R614wiVSPMWYgp7rfxtGkyNLIyex/yoPLXjiFH6bK3zwrZilZMItUjzFmKKOtp0kkNNx5jmF809\nyberHUeMQY4xA5D73lOZNG8hpqALpia2lm3HW+/FQ5mb8NB5qB1JjEGwVxDxAbFUdFdjsvSrHUeo\nQJq3EFPMkHWI54pexGK3cP/M9Rh9QtWOJMYh15iJXbFztv2c2lGECqR5CzGFKIrCS6Wv0zLQxtLY\nRZcfOxKuJ+fyamtnVU4i1CDNW4gp5JMLhzjVWkhi4HRuT1qtdhxxDSJ8jET7RnKus4Ih65DaccQk\nk+YtxBRR21vP9ood+Hn48q2MfHRandqRxDXKMWZitVsp7ihTO4qYZNK8hZgCTJZ+/nT2ReyKnW9k\nbCTYK0jtSMIBZoVffGRMNiqZeqR5C+Hm7IqdF0pepWu4m9UJy5gZkqJ2JOEg0b6RhHmHUtRxDovN\nonYcMYmkeQvh5j6o+5jijlJmhqSwevpSteMIB9JoNOQaMxm2mSntqlA7jphE0ryFcGPlXZW8W72b\nIM9ANqdvQKuRX3l3c3mjElnrfEqR32Qh3FTPcC9/Ln4ZjUbDg5n34W/wUzuSmADxAbEEGgI4216C\nzW5TO46YJNK8hXBDNruNvxS/TJ/ZxJ1Ja0gMnK52JDFBtBotOcZM+q0DVHRXqx1HTBJp3kK4oR01\ne6joribXmMmS2BvVjiMmWO7lBVtk6HyqkOYthJs5217Cnrp9hHmHcv/Me9BoNGpHEhNsRlACvnof\nzrQVYVfsascRk0CatxBupGOwkxdKXkWv1fNQ5ia89d5qRxKTQKfVkWVMp8fcR23vebXjiEkgzVsI\nN2GxW/lT0YsMWAe5N+UOYv2j1Y4kJtHlWeey1vmUIM1bCDexvWIH9X0NzI/M47qouWrHEZMsLTgZ\nT52BM61FKIqidhwxwaR5C+EGTrQUsP/CIaJ9I9mQeqfc556CPHQeZIbOpH2okwumJrXjiAkmzVsI\nF9fc38JLpa/jqTPwUOb9GHQGtSMJleRcHjqXWefuTpq3EC5s2Gbm2aIXMdvM3Jd2DxG+4WpHEirK\nCE1Fr9XLI2NTgDRvIVyUoihsLd1Oc38Li6ctJC8iR+1IQmVeei9mhqTQ2N9My0Cb2nHEBJLmLYSL\n+rTxKMdbThEfEMu6GbeoHUc4icsLtsha525NmrcQLqi+r4HXKt7BR+/Ngxn3o9fq1Y4knERWWDpa\njVbue7s5ad5CuJgByyDPnX0Rq93K5vQNhHoHqx1JOBFfDx9SgpKo6ztP51CX2nHEBJHmLYQLURSF\nF89to32ok5XxN5MZNlPtSMIJ5Vxe67xY5SRiokjzFsKF7D2/nzPtxaQEJXFLwnK14wgnlWPMQING\nZp27MWneQriIyu4a3q56nwCDP9/IyEen1akdSTipQM8AEgLjqOyuoc9sUjuOmADSvIVwAX1mE38u\neglFUfhWRj6Bnv5qRxJOLseYiYJCYbsMnbsjad5CODm7Yuf54q30mHu5LWkVycFJakcSLiBXVltz\na9K8hXByO2s+pLSrgszQmSyLW6x2HOEiwrxDmeYXTVlnJQPmQbXjCAcbVfPu6Ohg8eLFVFVVUVdX\nx8aNG8nPz+enP/0pdvvFjd+3bdvGunXrWL9+Pfv27ZvQ0EJMFSUdZeyq3UuoVzAPpN+LViN/b4vR\nyzVmYlNsnGqSbULdzYifBBaLhSeffBIvLy8AfvGLX/DII4/w8ssvoygKe/fupa2tjS1btvDKK6/w\n3HPP8fTTT2M2myc8vBDurGuom+dLtqLTaHkw8358PXzUjiRczGePjB1tKFA5iXC0EZv3L3/5SzZs\n2EB4+MUND4qLi5k3bx4AixYt4tChQxQWFjJr1iwMBgP+/v7ExcVRWlo6scmFQ9gVOx83fMrTh55l\nf8Mhuoa61Y4kAJvdxnNFL9FvGeCu5LXEB8SqHUm4oCjfCMJ9wihoKqbR1Kx2HOFAV11Tcfv27YSE\nhHDjjTfyxz/+Ebi4SMRnewX7+vrS19eHyWTC3/9vs199fX0xmUb3eILR6B6zZl2xjurOep498TJV\nXXUAHOEUr5a/RVJwPHOn5TA3JodpAVEutze0Kx6LL9vd+CE1vXUsjJvDutwVLncMPuMOxwJcu441\nqUt4/vRr/PvxX7M2bTl3p6/BoHfdbWNd+Vg40lWb9xtvvIFGo+Hw4cOcO3eOH/3oR3R2dl7+9/7+\nfgICAvDz86O/v/8LX/98M7+atra+cUZ3Hkajv0vVMWQdYkfNHj4+/ykKCnMjZnNPzmqO1xZxtq2E\n8u4qqrrqeOXsOxi9Q8k2ZpAdlkFiYLzT33N1tWNxJVVDFbxXvpcIn3DWTb+d9nbXfE7XHY4FuH4d\nc4PnEnmjkT8e38pb53ZzsOY496beSXpoqtrRxszVjwU47o+Pqzbvl1566fJ/b9q0iZ/97Gc89dRT\nHD16lPnz57N//34WLFhAdnY2v/71rxkeHsZsNlNVVUVKSopDAgrHOtNWzLbyt+ge7sHoHcqG1HWk\nhSRjDPbH1xrITdMWMmAZoKijlMK2Yoo7y9hbv5+99fvx8/AlOyydbGMGacHJeOg81C7HbdgVOw2m\nRiq6qnm/7kMMWg8eyrwfL72n2tGEG5gdncVP5kezs+YDPjp/gN+deY688BzuSr5N1gxwUWPeiuhH\nP/oRTzzxBE8//TSJiYmsXLkSnU7Hpk2byM/PR1EUHn30UTw95UPHmXQNdbOt/G0K24vRaXSsnr6U\nlfE3X7EB+3j4MC9yNvMiZ2OxWSjrquRMWzFn20s41HScQ03HMegMpIekkmPMIDM0DR+ZTDUmdsVO\nQ18j5d1VVHZXU9ldw6B1CACNRsPmmRuI9otUOaVwJ546A3fOuIW5EbPYWradk61nKOks4/akNSyM\nnuf0o2riizSKoihqBnD1IRBw7qEcm93GJxcO8W71bsw2MzOCEtiYuo5I34gvfN9oarArdmp66ils\nL+ZMWxFtgx0AaDVaZgQlkhOWQbYxnRAv9Xa5ctZj8flmXdFVTVXP35o1XHwmNyUokeTgJBYkZWPv\nd/0tPp31WIyVO9Tx5Rrsip2DF47ydtX7DNmGSAiIZ2PaOmL8olRMOTJ3ORaOIM3bAZz1hKrrPc/W\nsu2c77uAr96HO2fcwoKoOVec/DTWGhRFoXmglTNtxRS2FVPXd/7yv8X6x1xq5BlE+0ZO6mQrZzkW\nX27Wld01DNn+1qyN3qEkX2rWyUGJBHsF/e3fnKSGayV1OI+vq6FnuJfXK97hVGshWo2WpbGLWJOw\nDIPOOSe0ucuxcARp3g7gbCfUoHWIHdW7+aThEAoK8yPzuHPGLfgb/L72Z661hu7hHgrbSihsL6as\nqxK7cnHxnlCvEHIuTXhLCpo+4UNzah0Lm9128Z51dzUVXVVUdtdeoVknkRyc+JVm/WXOdj6Nl9Th\nPEaqobijlFfL3qRjqItQr2DuTb2TjNC0SUw4Ou5yLBxBmrcDOMsJpSgKZ9qK2Fb+Nj3mXsJ9wtiY\nuo6U4BmpW1jyAAAgAElEQVQj/qwjaxiwDFLSUcqZ9mKKO0oZtl1csMfPw5fMsJnkhGWQFpKCYQIm\nvE3WsRipWYd7hzEjKHFUzfrLnOV8ulZSh/MYTQ1mm5mdNR+y9/x+7Iqd2eHZ3J18G4GeAZOUcmTu\nciwcwfVvrAkAOoe62Fb+Fmfbz6HX6FgzfRkr4peoMiPcx8ObOZGzmBM5C4vdSnlXJYVtxRS2l3Ck\n6QRHmk5g0HowMySFbGMGmWEz8fPwnfScY/FZsy7vqqKiu5qq7hqGbMOX/z3cO4y84OzLV9dBnoEq\nphVi7Aw6A3fMWMPcyFlsLd3OqdZCSjrKuT1pNTfEzJcJbU5GrrwdQM2/Bm12G/saDvJezQeYbWaS\ngxLZmLqOCN/wMb3OZNRgV+zU9Z6/eJ+8vZiWgTbg4oS3pMDp5BgzyQ5LJ9Q7ZNzv4ag6RmzWPmEX\n71lPQLN2h6sLkDqcyVhrsCt2Pm08xttVOxm0DjE9II6NqeuY5h89gSlH5i7HwhGkeTuAWidUbW89\nW0u302BqxNfDh7tmrGVe5OxxTRBTo4bm/lYK2y9OeKvprb/89Ri/qEsT3jKZ5je2Fd7GW4fNbuO8\n6QIVXdWUd1dR3V17hWadREpQIjMm+MraHT6gQOpwJuOtoWe4jzcq3uFk6xm0Gi03x97ImoTleKo0\noc1djoUjSPN2gMk+oQatg7xbvZv9DYdRUFgQNYc7k27BzzD+oWe1fym6h3s4236OwraLE95sig2A\nEK/gyzPXkwKno9Pqrvo6o63jy826qrvm8r15gAgfIzOCEielWX+Z2sfCUaQO53GtNZR0lPFK2Zt0\nDHUS4hXMvSl3kBk204EJR8ddjoUjSPN2gMk6oRRF4XTbWV4vf5secx8RPuFsTL2T5OCka35tZ/ql\nGLQOUdJRSmF7CUXtpZcngvnqfcgMm0m2MYOZISlX/Ov/6+qw2W3U912g4nPPWX+5WX/+0S01J+k4\n07G4FlKH83BEDWabmfdr9/Jh/SfYFTuzjFncnXKb/GE7RjJhbYrpGOxkW/lbFHWUotfquTVhBcvi\nb8JD636H0FvvRV5ELnkRuVjtViq6qjlzaXj9aPNJjjafxEOrJy0khZywixPevvwY3MjNOpzkoASn\naNZCuAKDzsDtSasvr9B2uu0s5zrLWZu0ikUx18mEtkkmV94OMJF/DdrsNj46f4CdNR9gtltICZ7B\nhtQ7ifAxOvR9XOEvWrtip76v4dKEtxKa+1sA0KAhKWg62WEZePnoOd1QQlVPLeYvN+vgS8PgQUlO\nu56zoiiYLAp+HhqX3UnsM65wTo2GO9Th6Brsip3Djcd5s2ong9ZB4v1j2Zh2F7ETPKHNXY6FI0jz\ndoCJOqFqeurYWradC6Ym/Dx8uSt5LXMjZk3Ih7or/lK0DLRdegStmJqeehT+dipH+oRfuqpOcOpm\n/WU7DtWyfX81G5cms3yua+/h7Yrn1JW4Qx0TVUOvuY/tFTs43nIarUbLTdMWckvCignbUMddjoUj\nuN+YqxsYsAzyTvUuDl44goLC9VFzuX3GGqd/FnqyRfgYWR5/E8vjb6JnuI+SzjLCggKI0EURYHCN\nZv15nb1D7DhUC8D2A9XkpRoJCfBSN5QQVxFg8OcbGRuZH5XHK2Vv8tH5A5xuPcu9qXeQFZaudjy3\nJjcpnIiiKJxsOcPPj/4nBy4cJsLHyKOzv8d9M++Rxj2CQE9/rouaw/VxeS7ZuAG27avEbLUzZ2YE\nw2YbL39YoXYkIUZlZkgK/zzvH1k1fSm95j6eKXyeP559ga6hbrWjuS258nYS7YOdvFr2JiWdZei1\netYmrmRZ3GL0bjghTXxVWX0Xx861khAVwE++NZ9/+s0nnCpvo6CindzkMLXjCTEig86DtYkrmROR\ny9bSNzjTVkRpZzlrE1exeNr1MqHNweT/pspsdht76vbxr0d/RUlnGWnByZf/gpXGPTXY7HZe+uDi\nVfZ9y1PQaTVsWpWGTqvhpQ/KGDbbVE4oxOhF+UbwyOzvcl/a3eg0Ol6veIenTvyW+t4GtaO5FekO\nKqruqWNr6Rs09jfj7+HH/Wl3kxeR6/KzjMXYfFLQSEObiRuyokiMvvjIWkyYL6vmx/He4TrePljD\n+ptH3lxGCGeh1Wi5PnoeWWHpbK/cwbHmU/zHid9yU+xCbk1YgZde5nJcK2neKhiwDPB21fscbDwK\nwMLo+dyRtBofDx+Vk4nJ1jdg5s391Xh76rjrpi8utrP2+ukcO9fCnuPnWZARQVyEa97LF1OXv8GP\nzekbmB+Zxytl29l3/iCnW8+yPuV2coyZasdzaTJsPokUReFE82n+5eh/crDxKFG+Efzj7L8nP+0u\nadxT1JsHaugfsnL7wgQCfb+4YpzBQ8emFanYFYUtu8uwq/tUpxDjlhZy8Xbg6unL6DOb+OPZF/hD\n4V9lQts1kCvvSdI20MGr5W9yrrMcD62e2xNXc3PcjXJfewqra+7jk9MXiAr14ea8aVf8nszEUObN\nDOfYuVb2FzRy06yYSU4phGN46Dy4NXEFcyJy2Fq2ncL2Ykq7KlibuJLFMdePuG+B+CLpHBPMarfy\nYf1+dtV+iMVuZWZIChtS7yTMO1TtaEJFiqLw8oflKED+shT0uq8fBNuwNJmz1R28/nEVs1KMX7lC\nF8KVRPpG8Mis73Kk+SRvVuzgjYp3OdZ0ko1pdxEf4NoLE00mGTafQJXdNfzi+G94t3oXXnovvpmR\nz8M5D0rjFhw910JFQw+zksPISLj6/uVBfp6sW5TEwLCVV/fKs9/C9Wk0Gq6LmsMTC37I/Mg8zpsa\neerE//Ba+dsMWofUjucS5Mp7AvRbBni7aiefNh4D4IaYBdyeuBofD2+VkwlnMGS28tq+KvQ6Lfcu\nTR7VzyyZFcOhoiaOlLSwMCtqxIYvhCvwN/jxQPq9LIjKY2vZdj5u+PQLE9rkyZuvJ1feDqQoCsea\nT/EvR57i08ZjRPtG8ljew2xMXSeNW1z23uE6uvqGWT0/jvCg0Z0XWq2GB1amodHAlj1lWKzy7Ldw\nHynBM/jxvH9kTcJy+i39PFu0hT+cfZ6OwS61ozktufJ2kNaBdl4te5PSrgo8tB7ckbSGm2NvlEkY\n4gtaugbYfayekABP1lwXP6afjY/0Z/mcWPYcP8+OQ3XcuShxglIKMfk8tHpuSVjOnPCLE9rOtp+j\nrLOSWxJXsGTaDfJZ+iXSvK+R1W7ljeKdvFHyPla7lfTQVO5NuZMwbxnWFF/16t5KrDaF9Utm4Okx\n9g+jO25M4HhpKzuP1LEgI4KoUFnzXriXCN9w/mHW33Gs+RRvVL7Lm5Xvcbz5NBvT1mE0Zqgdz2nI\nsPk1qOiq5hfHfs2rRe/io/fmwcz7+fvsb0njFldUWNVBQWU7qbFBzE0LH9dreBn03Lc8BZtd4YVd\nZai8o68QE0Kj0TA/Ko8n5z/Ogqg5NJga+c8Tv+O1oh1qR3MacuU9DiZLP29V7uRw03E0aFgxYxEr\nopfirZf72uLKrDY7W/dWoNFA/vKUa5qIMzvFSO6MMAoq2zlU1MzCrCgHJhXCefgZfNk0cz0LIvN4\n8dxrvFb8HopZx5LYG9SOpjq58h4DRVE42nSSnx/5Tw43HSfGL4rH8h7mobyN0rjFVX14ooGWzgGW\nzIohNtzvml/vvuUpeHroePWjSkyDFgckFMJ5JQcn8YNZ3yHIK4A3Kt7lVGuh2pFUJ817lFoG2vjv\ngmd54dyrmG1m7pxxCz+a8wMSAuPUjiacXLdpmLc/rcHP24M7bnTMJLPQQC9uvyEB06CF1/ZVOuQ1\nhXBmod4h/HjR9/HUGfhr8VYquqrUjqQqad4jsNit7Kz5gH87+jTlXZVkhqbxk/k/ZFncYpn9KEbl\n9Y+rGDbbWLcoET9vD4e97rI505hm9ONAYRPl52WNaOH+pgfH8u2sB7Cj8Iezf6XR1Kx2JNVI876K\n8q4qfnHsv3iv5gN8PXx5KHMT383+JqHewWpHEy6i8kIPh4qaiQv3Y1FOtENfW6/TsnlVKhrghd1l\nWG12h76+EM4oLSSZTTPXM2gd4ndnnpuym5tI874Ck7mfLSXb+M3pP9A60M7iaQt5YsEPmRWeJSv+\niFGzKwovfVAOXJykptU6/txJiglk8awYGtv72X2s3uGvL4Qzmhc5mzuS1tA93MPvz/yZAcug2pEm\nnTTvz1EUhSNNJ/iXo09xpPkEsX7RPD7n+6xPuR1v2TxejNHBwibqmvtYkB5BSmzQhL3P3YsTCfA1\n8M6ntbR2T70PMTE1LYtbzOJpC2nsb+aPZ/+KxW5VO9KkkuZ9SXN/K785/Qe2nNuGxW7lrhm38vic\n/yO73IhxGRiy8MYnVXh66LhnyYwJfS8fLw82LJ2BxWrnxT3y7LeYGjQaDXcnryXXmEVFdzUvlLyC\nXZk6t46m/HPeFpuF3XX7+KBuH1bFRlZYOutTbifES+5ri/F7+2AtfQMW7lqcSLC/54S/3/yZEXxa\n2ERRdSfHS1uZNzNiwt9TCLVpNVq+kb6B3xaYONVaSJBnIHclr1U71qSY0lfeZZ2V/Nux/+L92g/x\nM/jxnawH+G72N6Rxi2tyob2fvScbCA/yZsXcyXmUUKPRcP/KVPQ6LVs/rGBgaGoNIYqpy0PnwXez\nNxPpG8FH5w+wt36/2pEmxZRs3n1mE38teYX/LvgjbYMdLJl2A0/Mf4wcY6ba0YSLUxSFlz8ox64o\nbFiWjId+8n7FIoJ9WHt9PD39Zt7cXz1p7yuE2nw8fHg451sEGgLYXrmDEy0FakeacFOqeSuKwqHG\n4/z8yH9yrPkUsf4x/NOc/8PdKbfhJRPShAOcKm/jXF0XWYmh5CSFTvr7r5ofT1SoDx+daqCmqXfS\n318ItYR4BfNw7oN46bx4oeRVyjrde/GiKdO8m/tb+PXpZ3ip9DWsipW7k2/j8bzvExcwTe1owk2Y\nLTZe2VuJTqth47JkVR4r9NBr2bQiFQX4665SbPapM4FHiBi/KP4u+wEA/nj2BS6YmlRONHHcvnmb\nbRberd7Nvx37NZXdNeQYM3li/g9ZEiv7wwrH2nW0no7eIVbMjSUyxEe1HGnxwSzMjKS+xcTekxdU\nyyGEGlKCZ/BA+r0M2Yb4XcFzdA51qR1pQrh18y7trODfjj3Nrtq9BBj8+buszXwn6wGCvSbumVsx\nNbX3DPLekToCfQ3cev10teOw/uYZ+HrpefNANZ29Q2rHEWJSzYnIZd2MW+kx9/K7gufotwyoHcnh\n3LJ595lNPF+8ld8WPEv7YCc3x97IT+Y/RrZs5C4myLZ9VVisdu5ZkoS3p/pPYPr7GFi/ZAbDZhsv\nf1ihdhwhJt3SuEXcHHsjzQOt/KHweSw299p9T/1PGQeyK3YONx3nrcqdDFgHifOfxsa0dcT5y31t\nMXHO1XZyorSVpJgAFmREqh3nshuyo/j0bBOnytsoqGgnNzlM7UhCTKo7Z9xC93APp1oLeb7kFR7M\nvA+txj2uWd2jCqDR1Mx/nXqGl0vfwK7YuSfldh6f831p3GJC2ex2Xv6wAg2QvywFrROtfa/RaNi0\nKg2dVsNLH5QxbLapHUmISaXVaHkgfQPJQYkUtJ3l9Yp33GYFQpdv3mabhXeqdvGL47+muqeWXGMW\nTyz4ITdNW+g2f2EJ57Xv1AUutPdzY04UCVEBasf5ipgwX1bNj6Ojd5i3D9aoHUeISeeh1fOdrM1E\n+0byScMhPqz/RO1IDuHS3a2ko4z/d/RX7K77iEBDAN/N/gbfztpEkGeg2tHEFNA7YOatAzV4e+pZ\ntzhJ7Thfa+310zEGebHn+HnOt5rUjiPEpPPx8Obvc75FkGcgb1Xt5FjzKbUjXTOXbN49w338pfhl\nfnfmOTqHu1kat4gnFvyQrLB0taOJKeTN/dUMDFu548YEAnwMasf5WgYPHfevSMWuKLywqxS7mwwb\nCjEWwV5BPJzzIN56b7ac28a5znK1I10Tl2redsXOgQtH+PnRpzjRUsD0gDh+NOcHrJtxK5465/3w\nFO6nrrmP/QWNxIT5smRWjNpxRpSVGMrctHCqGnvZX9CodhwhVBHtF8nfZW1Gi4Znz77A+T7XXQfB\nZZr3BVMTT5/8X14p246iwL0pd/BY3t8zzT9a7WhiilEUhZc+KEcBNi5LRq9zjV+jjcuS8fbU8frH\nVfT0m9WOI4QqkoMT2ZyxEbPNwu/P/JmOwU61I42L03/qmG1m3qrcyb8f/w01vXXMDs/miQWPsWja\n9TIhTajiSHELlRd6yEs1kj49RO04oxbk58m6RUkMDFt5da88+y2mrtnh2dyVvJZecx+/O/McJku/\n2pHGzKm7X3FHKf969Fd8UP8xwZ6BfC/7mzyYeb9MSBOqGRy2su3jSjz0Wu5dMkPtOGO2ZFYMCVH+\nHClpobjGNa84hHCEJbE3sCxuMS0DbTxz5nnMLraIi1M2757hXp4repHfn/kzXcM9LI+7iZ/Mf4zM\nsJlqRxNT3I7DtfSYzKxZEE9YkLfaccZMq9XwwMo0NBrYsqcMi1We/RZT1+1Jq5kTkUtNbx1/KX4Z\nu+I6G/k41QprdsXOwQtHebvqfYZsQyQExLEx7S5i/KLUjiYELZ0D7Dl2ntAAL1bPj1M7zrjFR/qz\nfE4se46fZ8ehOu5clKh2JCFUodVo2TRzPX1mE4XtxWwrf5t7U+5QZUfAsXKaK++GvkZ+dfL3vFr+\nJhoNbEi9k3/M+3tp3MJpbN1bgc2ucO/NMzB4uPaOdHfcmECwvyc7j9TR1OF69/uEcBS9Vs+3sx4g\nxi+KAxcOs7tun9qRRuWqzdtisfD444+Tn5/P3Xffzd69e6mrq2Pjxo3k5+fz05/+FPul/YK3bdvG\nunXrWL9+Pfv2jb74YZuZNyvf45cn/pva3nrywnN4Yv7j3BhznUxIE07jTGU7hVUdzIwPJi/VqHac\na+Zl0HPf8hRsdoUtu8vcZslIIcbDW+/F3+d8i2DPIN6t3sXhphNqRxrRVYfN33nnHYKCgnjqqafo\n7u7mjjvuIC0tjUceeYT58+fz5JNPsnfvXnJzc9myZQtvvPEGw8PD5Ofns3DhQgyGqz97farxLH88\nvpXOoS5CvUK4N/VOMkJTHVqgENfKYrWzdW8FWo2GjcuSXWJIbTRmpxjJnRFGQWU7h4qaWZglo1yf\n120aZvexepbMjSfcX9aRcHdBnoF8P/dBfnXy97xc+joBBn+n7kdXvbRdtWoV//AP/wBcfLZVp9NR\nXFzMvHnzAFi0aBGHDh2isLCQWbNmYTAY8Pf3Jy4ujtLS0hHf/N8P/J7u4R5WxC/hJ/P/0an/R4mp\n64MT52ntGuTm2TFMM/qpHceh8pcnY/DQ8upHlZgGXWu27UQ6dq6FJ/50lN3HzvPP//sp+041qB1J\nTIJI3wi+m/1NdBotfyraQn2v8x73q155+/r6AmAymfjBD37AI488wi9/+cvLVx6+vr709fVhMpnw\n9/f/ws+ZTCOvoTwrKoP7su8kLsj5V6gaidHoP/I3OTl3qAEcW0dHzyA7DtUS4GvgwTuz8fP2cNhr\nX81kHQuj0Z/7Vs7kLzuKefdwHT+4d5bDX9+VmAbMPLP9LJ+cbsDgoeOepcnsPlLHlj3ltPWZ+c4d\nWXjoXfN2nqsdi68z0XUYjVlovR/kV5/+kWfO/oV/XfY4EX7Od6tsxNnmTU1NPPzww+Tn57N27Vqe\neuqpy//W399PQEAAfn5+9Pf3f+Hrn2/mX+f/Lvo+bW19tLX1jTO+czAa/aUGJ+HoOp59t5ghs40N\nS5MZNA0xaBpy2Gt/nck+FtfNNPLBUT8+OFZPXnIYKbFBDnldVzunims7+fN75+jqGyYhKoCHbp1J\nVKgvqxZM52fPHmbX4Vqqznfx8J1ZBPi61jC6qx2LrzNZdSR4JnFPyu1sK3+Ln3/03zyW9zB+Bl+H\nvLaj/vi46p+Q7e3tfOtb3+Lxxx/n7rvvBiA9PZ2jR48CsH//fubMmUN2djYnT55keHiYvr4+qqqq\nSElJcUhAIdRS0dDN4eIW4iP9ucGN7wfrdVo2r0pFA7ywuwyrzXWedXWEYYuNlz4o51evFNBjMnPH\nDQn8eNNsokIvfliHh/jw4/vzmJsWTkVDD//y1+PUNbt+IxRXt3ja9ayIX0LrYDv/W/gXzDbnWlL4\nqs37mWeeobe3l9///vds2rSJTZs28cgjj/Db3/6We++9F4vFwsqVKzEajWzatIn8/Hw2b97Mo48+\niqen52TVIITD2e0KL39wcQnR+5aloNW6xyS1r5MUE8jiWTE0tvez+1i92nEmTU1TL//fX46z92QD\nUaE+/PMDedx2QwI67Rc/Gj0NOr57ewbrFiXS1TvML148ydGSFpVSi8lyW+Iq5kfmUdtbz5+LX8Jm\nd55FjTSKys+IyFCOc3CHGsBxdXxccIEXdpVxXUYk3147uVvNqnUsBoYs/PjZowwOW/n5Q/MJv8YV\n5Jz5nLLa7Lx3uI53P63Frigsy5vG3TclXfH5/S/XUVDRzh8v3U5ZsyCedYsSnf6PO2c+FmOhRh02\nu43/LfwL5zrLWRg9j42pd13TEyeTMmwu3J+iKNQ09XLiXAt2uzzrC9A/ZGH7J9V4GnTcsyRJ7TiT\nxsfLgw1LZ2Cx2nlxj/s++93U0c8vXjzJ2wdrCPQz8NiGXPKXp4x64Z3c5DD++YE5hAd7s/NIHf/9\nRiEDQ9YJTi3UotPqeCjzfmL9ovm08Ri7aveqHQlwsuVRxeSw2xUqGro5WdbGqYo2OnuHAUiKDmDz\n6jS3exxqrN46UINp0MI9S5II8ptat3/mz4zg08Imiqo7OVHWxty0cLUjOYxdUdh36gKv7avEbLVz\nXUYE9y1Pwcdr7E8QxIT58sTmOTzzdjGFVR38vy0n+D93ZRMZ4jMByYXavPRefC/nQX518n/YUbOH\nQM9Aro+eq2om3c9+9rOfqRlgYMC5JgGMh6+vp9PXYbHaKa7p5P2jdTy/q5SPTl2guqkX0DA3zUh8\nVCBnKtvZf6YRm01hRkwgOicfCrySaz0WDa0mnn+/lPAQHx66NV2V4VA1zyeNRkNSTCCfFDRSdr6L\nRdnR4340ypl+L7r6hvnfN8+y99QFvAw6vn1rOmsXJuChH/lq++vqMOh1zE8Px2yxUVDZwaGiZuIi\n/IgIdr4G7kzH4lqoWYeX3pP0kFROtBZwuu0scf4xhPuM/REyX1/HXBBI83YAZ/3FGDJbKaho591D\ntTz/fikHzzZR12LCy6DnuowI1i1OZNOKVOamRbDy+gSMAZ6U1XdzpqqDk2WtxIb7ERropXYZY3It\nx0JRFP7wTjFtPUN8+9b0y7ONJ5va55OftwcKCmcqOxg228hOCh3X66hdx2eOlDTzm9cKaewYICsx\nlH+8N5fE6NFvK3y1OrQaDZkJoYQFenGqvJ3Dxc0YPLTMiAl0qpX4nOVYXCu16/Az+JIUlMDx5lOc\nbj3LzJCUMW9R7ajmLcPmbsY0aOFMZTunytsoqunEYr342E9YoBeLcqLJSzWSFB14xSvK3BlhpMYG\nsX1/NR+dbODfXzrFTbNiuHtxEj5e7n+qnCxro7S+m5yk0HE3LHexen48R4pb+OhUA9dnRZIQFaB2\npDEzDVp4cU8Zx861YvDQ8sDKVBbnRk9IU12YFUVUqC//s72Q1/ZV0dBqYvOqNJffwEZ8VWJgPN/M\nuI9nz77A78/8mcfyHibcJ2zSc6g623zIbKWvZ1Ctt3cYtWdydpuGOV3exsnyNkrrurFfOqQxYb7M\nSjGSl2IkLsLvqh9aX66h8kIPf32/lAvt/QT5GbhveapLbMgx3mMxbLHxk2eP0NNv5ucPzVd16FPt\n8+kzpXVd/MfW08RF+PHE5jlfeXxqJGrWUVTdwZ93nqPbZCYpJoCHbk0f9zEdSx3dpmF+t/0sVY29\nTI/05/vrsggJUH/0ylnOqWvlTHUcuHCEV8q2E+Ydyg/zHsbfMLq5Qo6aba7qsPm6H73L8dJWapv6\n6O43o9Vo8PP2cPrHLr5MjaGc1q4BDhQ28eq+Cl7ZW0lhVQdt3UNMj/Jnad407l+Rwm03JDAzPpgg\nP88Rrza+XENIwMUrdZ1OQ1FNJ0dLWmhoNZE8LQhvT+e9Ch/vsdhxqJaCyg5WL4hnblrEBCQbPbWH\nBj8TFuRNe/cgRTWd+Hp5kBQz9uHBya5j2Gxj694Ktn5YgcVq584bE/nmmjT8fca/ItpY6vjsllRX\n3zBnqzs5UtLCjJhA1Ru4s5xT18qZ6ogPmIZdsVPYXkx5VxVzInLRa0f+bHSLYfPMxDDKz3fR2N7P\nwbNNAHjotcRH+JMYHUBCVACJ0QGEBXo51f0jNSiKwoW2fk6Wt3GqvI3zrRfXjtdoIC0uiFkpRmYn\nGx16j1qv03LbwgTmpoXz/PulnCxvo6Sui3uWJLEoJxqtmxyTtu5Bdh6pJ8jPwC3Xxasdx6msv3kG\nBZXtvHmgmjmpRtWb0NVUNfbwp3dLaOkaJDrMl2/fmk585OSv5+2h1/GtNTOJC/fn1Y8q+Y+tp9i0\nIpUbc6InPYuYWLcmrKB7qIcjzSd4rvhFvpv1DXTayblVovoiLS0tvTR29FPT2Et1Uy81jb00tPVf\nHvoF8PfxuNjILzXz6VEBk7ZBxGhM1FCO/dIz2KfKLg6Jt3ZdvMWg12lInx5ycUvH5DACruGq4jMj\n1WBXFD4paOT1jysZHLaREhvE5lWpqk3q+jrjORa/236Wk+VtfGdtOgsyIico2eg509AgwIEzjfzl\n/VJmpxj5/rqsUf/cZNVhtdl599Na3jtch6IoLJ8by12LE0c1k3w0rqWO4tpOnnmriP4hK0vzpnHv\nzTPQ6yZ/eQ1nO6fGyxnrsNltPFP4PCWdZVwXNZf70u4e8RalI6jevK90IIbNNupa+qhu7KWmqZfq\nxl46er+4IUREsDcJ0RcbekJ0AHHh/qrt9uPIE8pmt1Ne383J8jZOV7TT1XfxGWxPDx1ZSaHkpRjJ\nTlo151IAAB0gSURBVAp1+ND1aGvo6hvmxT1lnK5oR6/TsnbhdFbPj1PlA+lKxnosims7+dUrBcyY\nFsj/vW+2U4zwONsHlKIo/PKlU5Q39PCDu7LJTR7d5JzJqKOxvZ9nd5RQ19xHaIAnD96STlp8sEPf\n41rraO0a4LdvnOVCez8z44P53h2Zk37x4Wzn1Hg5ax1D1mF+c/oZ6vsusHr6Mm5NXPG13+vWzftK\nevrNn7s676G6qY/B4b+taqTTaoiL8CMxKpCEaH8SowMJD/aelKHdaz2hLFYbxTVdnCpvo6Cy/fK+\nyr5eenKTw5idYiRjesiEzlwdaw0ny1p5cU85Pf1mphl92bw6jaQxPH4zUcZSh9Vm52d/OU5Tez9P\nfmOuKkOsV+KMH1AX2vv52Z+PEeRn4F8fWoCnYeRzcSLrsCsKe0808PonVVisdhZmRrJxWcqEPBXh\niDoGh638aUcJpyvaCQv04gd3ZTMtfPIWQ3LGc2o8nLmOXnMfvzrxO9qHOtmYuo4bYhZc8fumXPP+\nMrui0NI5cPnKvKapl/oWE7bPLfHp46kn4XP3zhOjAiZkK7/xnFCDw1bOVndwsqyNwuqLz9MCBPoZ\nmH1phnhKbNCkXdGOp4aBIQvb9lWx/0wjGmDpnGmsW5SIl0G9qRRjqeOD4+fZureCm3KjeWBV2gQn\nGz1n/YB645Mq3jtcx6r5caxfMmPE75+oOjp6hvjzznOcq+vCz9uDzavSJvRJCEfVYVcU3jlYwzuf\n1uLpoeOhW2eSlzo5K9g56zk1Vs5eR+tAG786+Xv6LQP8XfZmssK+ui/ClG/eV2Kx2qhvNV1u5jWN\nvbR0ffFRtLBAr8vNPCEqgPhIfzyv8Yp2tCdU34CZgor2ixO/ajux2i7+rzcGeZGXGk5eipGE6ABV\nJoJdyy9FWX0Xz+8qo6VzgP+/vXuPi6re9z/+GgYG5DKggNy84QUVTQXMbHu/ZXnMS3bRPLrNUo+1\ntdIfu8u2tOJkPnr46JSeU7ZTt5lttdyVqWmWmQZJiVc0UVC8IHIRBYbbcPn+/kBI3InYLGZm0ef5\njzgOa33frrXms75r1vp+/c3uTBnZmR4d7P/cIzQ8R0GRlRfe34eLAV6f2demu5G15qwfUGXllbz0\nQSJ5BWUsfOxOWt+i56h1DqUU+45l8dHOk5SUVdCzgz/T7uuCbyMPYat1jv0nsvlg63Gs5VWM6deO\nMf3DG/2Yd9Z96nbpIUd6wTnePrACBTwdNZNw37o3wUrxbiBLSTnp13rnp6/9WXNZGqpHSGoV6FVb\nzMNDzYT6e93W42r17VB5BaUcPJVLUko2KeevUvO/3SrQm+iIAGI6t6RVoJfDv2vV4tL/lwnpfLXv\nHJVVirsig5g0rFOjXOmoT0NzrN72C3uPZDJ5RATDYlrZoWUN58wfUEdPX+atjYfpEGrmhSkx9RYd\nLXMUFltZuyOF/Sk5uJuMTBrWiQE9Quxy3DTG9jifbWHZpiPk5pcSHRHIE6O7NuoVK2fep26HXnIk\n5/7CiqNraObqwfyYpwi6bhhVKd6/k1KK3PzSOjfDnc0qrB2JDKrn7g0P9qm9Ia59qC/NfW5+dn/j\nDnUpr5gDJ3NISsnhTGZB7esdQs1Edw4kOiLQ6cY/1uqguJBtYfVXJziTWYCXhysTh3XiT92D7XZy\n0pAcZzILiFuzn7BALxY+dudtDz7S2Jz9A+rdz5P5+UQ2U0d2ZnBU2E3fp1WOI2m5rN52gvwiKx1b\n+fLE6Eibpyu9HY21PQqLrbz7eTInzl0lLNCLORN6NFouZ9+nGkpPOeIvJvLxiU34e7RgfsxT+LpX\nF20p3hqqqKwiI6foWs88nzOZhWTmFnH9f4yft4n2ob6Eh1TfDNcu2Kf2ju+AAG8OHMusnqXrZA4Z\nuUVAda++cxs/YjoHEtUpsN4TAEfT8qCoqlJ8m3SBf+05TVl5JZHtmjP13i52+cBtyCNvi9cmkXax\ngL9OitL8zmQtOPsH1FVLGX/7+z4MGPjvmX3xvcnVFVtzlFor2Lgrld2HLmJ0MTB+YHvu7dPG7oM4\nNeb2qKisYsO3qXx74AJeHq48Oa47Xdu10Hw9zr5PNZTecmw9s5NtZ3bS2ieMZ6Jm4eHqIcW7sZWU\nVVRfbr/uknu+5deRfQxAaIAXYYFenM2ykJVXDFQPbNI9/NdnsJ3pefT6NMZBkZtfwtodJzl6+jIm\nVxfGDWjPiDtbNWpP91Y54o9msnLrL9zZpSWzx3VvtHbYQg8fUN8mXWDdzpP0jQxi5phuv/keW3Kk\nXsjngy3Hyb5aQqtAL54YHUmbIMc8DWCP7bHn8EXW7khBKZg4rCPDYlpperVKD/tUQ+gth1KKj09s\nIiHzJ7q2iGB2j8cIDvLTZNnOO86lgzVzd6VruxZ1zoLzCkrr3N1+JrOQjNwimrkb6dO1JTGdW9I9\nvIVTDx9qTwG+zXjmoR4k/pLFxztPsfG7VBKPZzHtvi4OeSyrpKyCT3enYXJ1adDd0uLmhkSFkZCc\nyb7jWfTrEUI3jXqLFZVVfPHDGbbtOwsK7r2rDeMHtHfYGA72MrBnKCH+nvzvZ8l8/M0pzmVbmHJP\n5yafu6kzGAxM7DyeAmsByZdPsO7Ep8wPekKbZUvP+/erqlLk5JcQER5A/tViRzfHJo19RltYbGXD\nrlQSki/hYjAwsk9rxvQPt/lO/xvVl2Pjd6lsTzzH+AHh3N8vXNP1akkvvYuzlwp5dc3PtPRrxquP\n9/m3Ec1uN8eFHAsffHmcc9kWAnw9eGJ0JBGtteml2MKe2yOvoJRl/zrK2UuFdAgz89T4O/DT4G56\nvexTt6LXHGWVVt4+uIKzBefZ+Mi7mixTTuts4OJiIKi5p0z71wA+niaeGB3J/Ed60cLszleJ53h5\nZSLH0/Pssv7My0Xs/Pk8Ab4e3HtXG7uss6lrG+zDiN6tybpSwtYfz/7u5VQpxfbEc7z6j/2cy7Yw\noEcIr0zv4xSF295amD14YXI0fSODSMso4LU1++vc9Cr0yd1oYnaPxwhspt1Uww6dVQxwmhlibOFM\nM938XvbK0LJ5Mwb2DKWyUnH09GUSki+Rm19CRGs/TU6CfiuHUoq/X5uwYvp/dKVVoP1Gtvo99LQ/\ndQjz5cdjlzh2Jo/eXVrWeV6+ITly80tYvukoew5fxKuZK7PGdOO+vm2d6nKxvbeH0ehCdEQg7iYj\nB1JyiE++RICvxy2fq6+Pnvap+ug5h7vRxB0BkQT4anNS6jxHiPjDcDcZeXhoR176c2/atPQm/ugl\nFvx9H4nHs2iMb3EOp14m+Uwe3do1J6qB43KLhmnm7sqjwyOoqFTXbrhq2PZTSvHDkUxeXvkTKeev\nEtUpgNcev4uoTs4/Z7w9GAwG7rurLU8/1BM3Vxf+vuU4G3elUlXl0G85hY38m2n3JIEUb+Ew7YLN\nLPhzbx4a3IESayUrNh/j7U+PcDm/9Na/3EDlFZX889uTGF0MTBoe4fDBcJqi6IgAenUM4MS5qyQk\nX7rl+wuKrfzvZ8ms2vYLANNHdeUvD9xh9wF99KBHB38WTI0huIUn2386x/98cpii0vJb/6Jo8qR4\nC4dyNbpwX9+2vPp4H7q2bc6RtMssWJnIN/vPa9LL+Prn8+RcLWVYTCtCA5xr+tKmwmAw8OiITpjc\nXNiwK7XOCIY3OnQql5c/SOTAyRwiWvvx6vQ+9LfTSGl6FeLvxYKpvenRwZ/kM3nErdnPxWtjSYg/\nLinewikENffk/03sxWOjuuDqYuDjb06x+KMkLuRYfvcy8wpK+TIhHbOnG2Oc+O7ypiDAtxnj+rfH\nUlLOJ9+l/tu/l5RVsHrbL7yz6QjFZRU8PKQjf300igA7jpSmZ54ersyd0INRfduSdaWEuA/3cyg1\n19HNEg4kxVs4DYPBwIAeocTN6Eufri1Ju1jAK6t/5rM9pymvqLzt5X2yOw1reRUTBndolKkiRV3D\ne7eiVaA3e49kcvL81drXT56/ysJVP7H3SCatW3rz8rQ7ufeuNg6ZgEfPXFwMPDi4AzPHRFJZpVj2\n6RG2/pjeKPeJCOcnxVs4HV8vE/81tjtzH+yB2cvElwnpLFz1c52CcCsnz18l8XgW4SE+9LsjpBFb\nK2q4Gl34872dMQBrd6RQUlbBJ9+lsmTdAS4XlPIfd7flpT/3dvq7/Z1d38hgXvjPaPx83Nn0/WlW\nbD5GWfntn9wKfZNHxTSg58cXajhjhuAWngzsGUqZtZLk05f54Wgm+ZYyOrXyu+mjRF5e7lgsZSz7\n11EKiqw89cAd+Js97Nxy2zjjtmioFmYP8ousHD19me0/nuVYeh6Bfh48/WBP+vcIsfu45Fpwxu3h\n5+1O327BpF3M5+jpPI6evswd7f1veoXJGTP8Hk0hh5eXNnNcSM9bOLVm7q5MvieCF6bEEBbgxe5D\nF1nwwT6SUnJu+jvfH77I+WwL/e4IpkOorx1bKwAeHNQes5eJwmIrg3qF8sr0PnRsJdtBa75eJv46\nKYqBPUM5l2Xh1TW3d3VK6JsMj6oBvQ7Zdz09ZKiorGLbvrNsSUinolIRExHIoyMi6szW5uHlzoz/\n3klllWLxzL74ajC0pL3pYVvcStaVYkweJpo30/+9Bs6+PZRSfHcwg39+cwqAySMi/m2qVmfPUFlV\nRWFxOfkWK/lFVvKLyigoqv65oMhKvsVKQbGVNsFm7o4Monv7Frq9Z0KrWcX0f2SJPwxXowtj+oXT\nu3NL1mw/QdLJHI6fvcJDQzowsGcoLgYD67afoKi0gkeGdtRl4W4qgpp7On3BaCoMBgNDo1sR6u/F\n/32ezIc7UjiXbeHR4Z1wNTru4mqVUhSXVpBvKbtWkH8twvkWKwVFv75uKS7nVr1IT3dXEo9dIvFY\n9Yhzg3qFMqBH6B92fADpeWugKXxI6S1DlVJ8f+gin+5OpaSskojWfgyPacV7XyQT1MKTV6b3cegH\nly30ti1uRnLYX+7VEt7ZdJQLORYiWvvx5LjumL1MmmVQSlFqraztFVcX5LJfe8jX9ZYLiqxU3mKs\nhmburvh6mfD1MmG+9qevd83P7rWv+3i64Wp04WppBZ/tOkXi8SysFVUYXQzEdA5kSFQYEa39dDFe\ngMzn7UT0dHDfjF4zXCks46OvUzh46tdnXuc90pPu4dpNAGBvet0WN5IcjlFmrWTl1uPsT8nB3+zO\nnAk9iOkeWm8Ga/m1glxspcByXWGuLcpl13rLVqwVVfWu3+TqUl18vasLcG1RrinS3iZ8PauL8u3O\nZ1CzLYpLy0lIvsTuQxdrB6wJ8fdkcFQYf+oejJeH220t156keDsRvR3cv0XvGZJSsln/7Sl6RrTk\nP4d3cnRzbKL3bVFDcjiOUootCel8tvcMJlcXpo3uRrm1vPb74xt7yiVlFfUuz+hiwHx977imh+xp\nwtfbvU7v2cNkbLQe8I3bQinFqQv5fHcwg/0nsqmsUphcXejTNYjBUWGEh/g4XW9circT0ePBfaOm\nkAEgIMCb3NzfPyqbM2gq20JyON7Bkzm8v+U4ZdZ/fw7cAPh4utUWZLOX+7Xe8o1F2h1PD1enuEGs\nvm1RUGQl/mgmuw9lkHO1en6EtkE+DI4K5a7IIDxMznGLlxRvJ6Lng7tGU8gATSNHU8gAksNZXMor\nJu1SIaqiqs73yj6ebhhd9HVfSEO2RZVSHD+Tx3cHMziUmotS0MzdyN3dghncK4xWNkytqgW521wI\nIcQtBbfw5I7OQbo+AbkdLgYD3dv70729P3kFpew5fJE9hy+y60AGuw5k0LGVL0N6hdG7SyBurrf3\nnbszkeIthBCiSWph9mDcgPbc368dh1Mvs/tgBsln8ki9kM8/v3Wj/x0hDIoKJai5p6ObetukeAsh\nhGjSjC4uREcEEh0RSPaVYr4/dJG9RzLZ/tM5tv90jm7tmjM4KoyeHQN084ipFG8hhBB/GC2be/LQ\nkI6MG9CepJRsdh/M4Fj6FY6lX8HX28SgnqEM7BlKCyefE0GKtxBCiD8cN1cX+nYLpm+3YDJyLOw+\neJGEY5lsjk/ny4R0enYIYEh0GN3CnXMoVineQggh/tDCAr2ZfE8EDw7uQOIvWbV3qh9KzXXaoVil\neAshhBCAu8nIwGuXzc9kFrD7YAaJx7PY9P1pPt97xqmGYpXiLYQQQtwgPMRMeIiZR4Z2rB2K9adf\nsvnpl2ynGIpVircQQghxE54ebgzv3ZphMa04dSGf3Qcz2J+SzT+/OcWm3WkOG4pVircQQghxCwaD\ngYjWfkS09mNicSfij1QPxfrD0Ux+OJpp96FYpXgLIYQQt8HsaeK+vm0ZeVebOkOxrtmewsbvUu0y\nFKsUbyGEEOJ3uHEo1r1HMu02FKsUbyGEEMJGLcwejO0fzug/ta13KFaZmEQIIYRwMrcaivXLpWM1\nWY8UbyGEEKIR1BmK9WQ2uw9kaLZsKd5CCCFEI3JzdaFvZDB9I4M1W6Y+pk8RQgghRC0p3kIIIYTO\naHrZvKqqikWLFpGSkoLJZCIuLo62bdtquQohhBDiD0/Tnvc333yD1Wplw4YNzJ8/nzfeeEPLxQsh\nhBACjYt3UlISAwYMAKBXr14kJydruXghhBBCoPFlc4vFgrf3r8PBGY1GKioqcHW9+Wq0emDd0ZpC\njqaQAZpGjqaQASSHM2kKGaDp5LCVpsXb29uboqKi2r9XVVXVW7gBcnIKtWyCQwQG+ug+R1PIAE0j\nR1PIAJLDmTSFDNA0cmh18qHpZfPo6Gj27NkDwKFDh4iIiNBy8UIIIYRA4573iBEjiI+PZ+LEiSil\neP3117VcvBBCCCHQuHi7uLjw6quvarlIIYQQQtxABmkRQgghdEaKtxBCCKEzBqWUcnQjhBBCCNFw\n0vMWQgghdEaKtxBCCKEzUryFEEIInZHiLYQQQuiMFG8hhBBCZ6R4CyGEEDqj6QhrAOXl5bz44otk\nZGRgtVqZPXs2HTt25Pnnn8dgMNCpUycWLlyIi4sLGzduZP369bi6ujJ79myGDBlCZWUlixcvJjk5\nGavVypw5cxgyZIjWzWz0HO+//z579+4FoKCggNzcXOLj43WVobCwkGeffZbi4mJMJhNvvvkmgYGB\nds2gRY6rV68SGxuLxWLBz8+PuLg4/P39nToHQF5eHpMmTWLz5s24u7tTWlpKbGwsly9fxsvLiyVL\nltCiRQtdZaixc+dOtm/fztKlS+3afq1yFBYW1u5T5eXlPP/880RFRekqQ3FxMfPnz6egoAA3NzeW\nLFlCUFCQXTNokaNGWloaDz/8MAkJCXVe10sOpRQDBw6kXbt2QPW02vPnz7/5CpXGPv30UxUXF6eU\nUurKlStq0KBBatasWWrfvn1KKaVeeukl9fXXX6vs7Gw1evRoVVZWpgoKCmp/3rRpk1q4cKFSSqlL\nly6p1atXa91Eu+S43syZM9XevXt1l+Ef//iHWrJkiVJKqQ0bNqjFixfbPYMWOd544w317rvvKqWU\nio+PVy+++KJT51BKqT179qixY8eqqKgoVVpaqpRSatWqVeqdd95RSim1ZcsW9dprr+kug1JKvfba\na2rkyJHqmWeesXv7a9ia4+233679bEpLS1Pjxo3TXYbVq1erZcuWKaWU2rRpk0P2J6W02acKCwvV\njBkzVN++feu8bk+25khPT1ezZs1q8Po0v2x+77338vTTT9ecGGA0Gjl27Bh9+vQBYODAgSQkJHDk\nyBGioqIwmUz4+PjQpk0bTpw4wQ8//EBQUBAzZ85kwYIFDB06VOsm2iVHja+//hqz2Uz//v11lyEi\nIqJ2ileLxXLL6V2dNUdqaioDBw4Eqme+S0pKcuocUD1PwOrVq/Hz86v9/aSkJAYMGFD73h9//NHO\nCWzPANXbYNGiRXZt941szTFt2jQmTpwIQGVlpUN6elpkmD17NgAXL17EbDbbOUE1W3MopXjppZeY\nN28ezZo1s3+Aa2zNcezYMbKyspgyZQozZszg9OnT9a5P8+Lt5eWFt7c3FouFuXPn8swzz6CUwmAw\n1P57YWEhFosFHx+fOr9nsVi4cuUK586dY8WKFcyYMYMXXnhB6ybaJUeNFStW8Je//MXu7a9piy0Z\nmjdvTnx8PKNGjWLlypU8+OCDuszRtWtXdu3aBcCuXbsoLS116hwA/fr1o3nz5nV+//p817/XnmzN\nADBq1Kja9zuKrTnMZjMeHh7k5OQQGxvLvHnzdJcBwGg0MnXqVD766CNGjBhh1/bXsDXH8uXLGTRo\nEF26dLF7269na47AwEBmzpzJ2rVrmTVrFrGxsfWur1FuWMvMzGTq1KmMHTuW+++/v/YaP0BRURFm\nsxlvb+/aXl3N6z4+Pvj5+TF48GAMBgN9+vQhPT29MZrYILbkAEhNTcVsNtO2bVu7t72GLRmWL1/O\nE088wbZt21i5ciVz5sxxRATAthwzZ84kIyODyZMnc+HCBYKDgx0RAWhYjpu5Pt+t3tuYbMngTGzN\nkZKSwrRp03j22Wdre1f2psW2+PDDD1m3bp3TH983s3nzZjZt2sSUKVPIyclh+vTp9mjyb7IlR/fu\n3Rk2bBgAvXv3Jjs7G1XP6OWaF+/c3FymT59ObGxsbU8tMjKSxMREAPbs2UPv3r3p0aMHSUlJlJWV\nUVhYSFpaGhEREcTExPD9998DcOLECUJCQrRuol1yACQkJNRertVjBrPZXHsi4u/vX6cw6inH/v37\neeihh1i3bh1t27YlOjraqXPcTHR0dO2xsWfPHmJiYhq/0TewNYOzsDVHamoqTz/9NEuXLmXQoEF2\nafONbM2wYsUKPv/8c6C6V2g0Ghu/0b/B1hw7d+5k7dq1rF27lsDAQFatWmWXdt/I1hzLly9nzZo1\nwK+1r74rVJpPTBIXF8dXX31F+/bta1/729/+RlxcHOXl5bRv3564uDiMRiMbN25kw4YNKKWYNWsW\nI0eOxGq1snDhQtLS0lBKsWjRIrp166ZlE+2SA+CVV16hX79+DB8+3O7t1yJDVlYWCxYsoLi4mIqK\nCubOnUu/fv10l+Ps2bM899xzALRs2ZLXX38db29vp85RY+jQoXz11Ve4u7tTUlLCc889R05ODm5u\nbixdutTud//bmqFGYmIi69ev56233rJr+2vYmmP27NmkpKQQFhYGVF8Veffdd3WVITc3l+eeew6r\n1UplZSXz5893yAmhVvtUfa/bg6058vPziY2Npbi4GKPRyMsvv0yHDh1uuj6ZVUwIIYTQGRmkRQgh\nhNAZKd5CCCGEzkjxFkIIIXRGircQQgihM1K8hRBCCJ2R4i2EEELojBRvIYQQQmekeAvRhMTGxrJh\nw4bav0+ZMoXDhw/z2GOPMX78eCZNmsTx48cBOHnyJFOmTGHChAkMGTKEDz/8EIBly5bx+OOPM2rU\nKNatW+eQHEKI+jlmmighRKOYMGECy5Yt45FHHiEjI4O8vDwWL17Myy+/TGRkJKmpqTz11FPs2LGD\nTz75hCeffJK7776b8+fPM2bMGKZOnQqA1Wpl27ZtDk4jhLgZGWFNiCZEKcU999zD6tWr+eKLL1BK\n8d5779UZZjEvL4/NmzdjNpvZu3cvKSkppKSksHXrVlJSUli2bBmlpaW3nNVICOE40vMWogkxGAyM\nGzeOrVu3sn37dt577z1WrVrFF198UfueS5cu4efnx9y5czGbzQwZMoRRo0axdevW2vd4eHg4ovlC\niAaS77yFaGIeeOAB1q9fT3BwMGFhYbRr1662eMfHxzN58uTan+fOncvw4cP5+eefAaisrHRYu4UQ\nDSc9byGamJCQEIKDgxk/fjwAb775JosWLeKDDz7Azc2Nt956C4PBwJw5c3j00Ucxm82Eh4cTFhbG\nhQsXHNx6IURDyHfeQjQhSimys7OZMmUKW7ZswWQyObpJQohGIJfNhWhCduzYwdixY5k3b54UbiGa\nMOl5CyGEEDojPW8hhBBCZ6R4CyGEEDojxVsIIYTQGSneQgghhM5I8RZCCCF0Roq3EEIIoTP/H0Ty\nthPBZlZmAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "s_norm.plot()\n", + "s.plot()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "再次绘图,并将两根折线展示在一个图上。\n", + "\n", + "可以看出,归一化前,峰值出现在2012年;归一化后,峰值出现在2010年。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**1.2 求平均值**" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "396.0" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#python实现\n", + "freq_mean = sum(freq_dict['天长地久'])/len(freq_dict['天长地久'])\n", + "freq_mean" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "计算均值的python代码。\n", + "\n", + "除非特别指出,一般平均值指的就是**算数平均值**。" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "396.0" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#pandas内置求均值函数\n", + "s.mean()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "利用内置均值函数mean()更为简洁。" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "2006 396.0\n", + "2007 396.0\n", + "2008 396.0\n", + "2009 396.0\n", + "2010 396.0\n", + "2011 396.0\n", + "2012 396.0\n", + "2013 396.0\n", + "2014 396.0\n", + "2015 396.0\n", + "dtype: float64" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s_mean = Series([freq_mean]*10, index = years)\n", + "s_mean" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "声明一个每年数值均为均值的Series对象s_mean。" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\nrkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "s.plot()\n", + "s_mean.plot()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "将频次均值与各年频次画在一个图中" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**1.3 样本方差、标准差、标准分及变异系数**" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "**方差**(variance)是在概率论和统计方差衡量随机变量或一组数据时离散程度的度量。\n", + "- 统计中的方差(样本方差)是每个样本值与全体样本值的平均数之差的平方值的平均数。\n", + "\n", + "**总体**:包含所研究的全部个体(数据)的集合。\n", + "\n", + "**样本**:从总体中抽取的一部分元素的集合。\n", + "\n", + "**样本容量**:构成样本的元素的数量称为样本容量(size)。\n", + "\n", + "样本方差计算公式为:\n", + "$$s^2 = \\frac{1}{n-1}\\sum_{i=1}^{n}(x_i-\\widetilde x)^2$$\n", + "\n", + "注意样本方差的公式中,分母为`n-1`。" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "47871.11111111111" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#python实现方差\n", + "def variance(freqs):\n", + " mean = sum(freqs)/len(freqs)\n", + " return sum([(freq-mean)**2 for freq in freqs])/(len(freqs)-1)\n", + "\n", + "freq_var = variance(freq_dict['天长地久'])\n", + "freq_var" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "上述代码用python实现了求样本方差。" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "47871.11111111111" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#pandas内置方差\n", + "s.var()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "而pandas内置求方差的函数var()更为简洁。· " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "**标准差**:标准差是方差的算术平方根。" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "218.7946779771188" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#pandas内置标准差\n", + "s.std()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Pandas内置std()函数,可得到序列s的标准差。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**标准分**:变量值与平均数的差除以标准差后的值,也称为**z分数**(z score)。\n", + "\n", + "标准分的计算公式为:\n", + "$$z_i=\\frac{x_i-\\widetilde x}{s}$$" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "year\n", + "2006 -0.895817\n", + "2007 -0.438768\n", + "2008 0.018282\n", + "2009 -0.210243\n", + "2010 -0.027423\n", + "2011 0.932381\n", + "2012 2.303530\n", + "2013 0.018282\n", + "2014 -0.438768\n", + "2015 -1.261457\n", + "Name: 2006-2015, dtype: float64" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(s-s.mean())/s.std()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "上述代码可得到s中所有数值的标准分,存放在一个Series对象中。\n", + "标准差的**经验法则**(当一组数据对称分布时):\n", + "- 约68%的数据在均值附近正负1个标准差内\n", + "- 约95%的数据在均值附近正负2个标准差内\n", + "- 约99%的数据在均值附近正负3个标准差内\n", + "在正负3个标准差以外的数据,称为**离群点(outlier)**。\n", + "\n", + "**切比雪夫不等式**:对任意分布的一组数据,至少有(1-1/k^2)的数据落在正负k个标准差以内(k>1)。" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "**变异系数**(离散系数):一组数据的标准差与该组数据均值之比。公式为:\n", + "$$v_i=\\frac{s}{\\widetilde x}$$\n", + "\n", + "该系数是测度离散程度的相对统计量,主要用于比较不同演变数据的离散程度(特别对均值差异较大的数据组)。" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0.5525118130735324" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#变异系数\n", + "s.std()/s.mean()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "变异系数可由标准差/均值直接得到。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**1.4 中位数、分位数、轴距与箱型图**" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**中位数**(median):中数是按顺序排列的一组数据中居于中间位置的数,即在这组数据中,有一半的数据比他大,有一半的数据比他小。如果观察值有偶数个,通常取最中间的两个数值的平均数作为中位数。" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "109.7979476168295" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s_norm.median()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Pandas内置了median()函数,即求中位数函数。" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false + }, + "source": [ + "**分位数**是将总体的全部数据按大小顺序排列后,处于各等分位置的变量值。\n", + "- 将全部数据分成相等的两部分,它就是中位数;如果分成四等分,就是四分位数;八等分就是八分位数。\n", + "- 四分位数也称为四分位点,它是将全部数据分成相等的四部分,其中每部分包括25%的数据,处在各分位点的数值就是四分位数。\n", + "- 四分位数有三个,第一个四分位数就是通常所说的四分位数,称为下四分位数,第二个四分位数就是中位数,第三个四分位数称为上四分位数,分别用Q1、Q2、Q3表示。" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "79.25069739255241" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s_norm.quantile(0.25)" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "174.83259076226759" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s_norm.quantile(0.75)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Pandas内置的quantile()函数可以求任意分位数,参数为0.25即Q1,参数为0.75即Q3。" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\na+t4vBzAlECQAaMuX76sxx9/XN///ve1cuVKZWV98u2aSqUUCATk8/mUSqVuu93v9ys3N1fLli2T\ny+VSaWmpPvjgA128eFE1NTWqqanRr371K0nS+++/r3Xr1qmhoUGlpaWf+3yBQOCOMy5ZskRlZWWS\npKqqKp0/f/5+vwzAlEGQAYOuXr2q2tpabdu2TatXr5YkLViwQF1dXZKkzs5OlZSUKBQKqbu7W+l0\nWolEQv39/SosLNS3vvUt/elPf5Ik9fX1afbs2Zo7d67a2trU1tamNWvW6K9//at+8pOf6MUXX9R3\nv/tdSZLP59O0adP04YcfynEcvfvuuyopKbnjnDt37tQf/vAHSdKZM2e0cOHC8XxZgEmND5cADGpt\nbdVbb72lgoKC4dueeeYZtba2amhoSAUFBWptbVV2drZisZiOHTsmx3G0adMmhcNhDQ4Oqrm5Wf39\n/XIcR88+++xnYllXV6f3339fX/va1yT9J8aHDx/W2bNntWfPHt26dUtLly5VQ0PDbY8rLy/XqVOn\nJEl///vf1dTUJEmaMWOGWltb+RkyMEYEGQAAA7hkDQCAAQQZAAADCDIAAAYQZAAADCDIAAAYQJAB\nADCAIAMAYABBBgDAgP8DlKbMDu3YarsAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "s_norm.plot(kind='box')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "参数kind为`box`时,对应的就是**箱型图**。\n", + "\n", + "箱型图中间的箱型一般由三根线组成,由下至上分别对应Q1,Q2,Q3;而箱型以外的上下两根线,分别对应最大值与最小值(不含离群点)\n", + "\n", + "箱型图一般用于展示数值型数据,有助于对数据的整体分布有只管了解,特别有利于对离群点/异常点的观察。" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAcwAAAFXCAYAAAAven4GAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAEQFJREFUeJzt3W1s1fXZwPHrSAtKixOzQtgmw6fRG4nTxO1OpoEsY8ON\nh4rsgY2ELRAE5kSyiRSQqKGoA7Mt99yLufjKQLYGzXDGsblkbsmcSsg2nFj3ILoJjMdm0iqllP/9\nwthR7K0XN+UcaD+fV+X05Px+1/m1fDnn0NNSURRFAADv6pxKbwAAzgaCCQAJggkACYIJAAmCCQAJ\nggkACVXv9sl9+w6Vax8VMXz40GhtfaPS2yirgThzhLkHGnMPHKdj5rq6Yb1ePqAfYVZVDar0Fspu\nIM4cYe6BxtwDRzlnHtDBBIAswQSABMEEgATBBIAEwQSABMEEgATBBIAEwQSABMEEgATBBIAEwQSA\nBMEEgATBBIAEwQSABMEEgATBBIAEwQSABMEEgATBBIAEwQSABMEEgATBBIAEwQSABMEEgATBBIAE\nwQSABMEEgISqSm+At9xzz13R2nrwtK8zaNA50dV1LHXd9vb2iIioqak5nVsqi5OZu68NH35hrFhx\nV0XWBvqOYJ4hWlsPxoEDB6JUfV6lt9Kt6DwcEREdXaUK7+TsVXS+WektAH1EMM8gperzovay6ZXe\nRre2vz0WEXFG7els8/Z9CJz9vIYJAAmCCQAJggkACYIJAAmCCQAJggkACYIJAAmCCQAJggkACYIJ\nAAmCCQAJggkACYIJAAmCCQAJggkACYIJAAmCCQAJggkACYIJAAmCCQAJggkACYIJAAmCCQAJggkA\nCYIJAAmCCQAJggkACYIJAAmCCQAJggkACYIJAAmCCQAJggkACYIJAAmCCQAJggkACYIJAAmCCQAJ\nggkACYIJAAmCCQAJggkACYIJAAmCCQAJggkACYIJAAmCCQAJggkACYIJAAmCCQAJggkACYIJAAmC\nCQAJggkACYIJAAmCCQAJggkACWULZnPz+mhuXl+u5YDj+P6DU1e2YG7Z8mxs2fJsuZYDjuP7D06d\np2QBIEEwASBBMAEgQTABIEEwASBBMAEgQTABIEEwASBBMAEgQTABIEEwASBBMAEgQTABIEEwASBB\nMAEgQTABIEEwASBBMAEgQTABIEEwASBBMAEgQTABIEEwASBBMAEgQTABIEEwASBBMAEgQTABIEEw\nASBBMAEgQTABIEEwASBBMAEgQTABIEEwASBBMAEgQTABIEEwASBBMAEgQTABIEEwASBBMAEgQTAB\nIEEwASBBMAEgQTABIEEwASBBMAEgQTABIEEwASBBMAEgQTABIEEwASBBMAEgQTABOCu1tGyP559/\nvmzrCSYAZ6VNmx6JDRs2lG29qrKtBAB9pKVle7z00ovdH9fXjzvta5YtmO3t7XHkSEcsXbq4XEu+\np0GDzomurmOV3kZERLS2HozCA/5+p+g6Eq2thyv2df/213hr68EYPHhIRfYAp8OmTY/0+LgcwfQ3\nNAAklO0RZk1NTdTU1MS6df9TriXfU13dsNi371CltxEREUuXLo6Dr79R6W3Qx0qDBsfw84dW7Ov+\n7a/xM+mZHegLDQ0zY+3apu6Py8FrmACcderrx8XYsf8V1dWDyvJ0bIRgAnCWamiYGRdcMLRs6wkm\nAGel+vpxZX1pzX/6AYAEwQSABMEEgATBBIAEwQSABMEEgATBBIAEwQSABMEEgATBBIAEwQSABMEE\ngATBBIAEwQSABMEEgATBBIAEwQSABMEEgATBBIAEwQSABMEEgATBBIAEwQSABMEEgATBBIAEwQSA\nBMEEgATBBIAEwQSABMEEgATBBIAEwQSABMEEgATBBIAEwQSABMEEgATBBIAEwQSABMEEgATBBIAE\nwQSABMEEgATBBIAEwQSABMEEgATBBIAEwQSABMEEgATBBIAEwQSABMEEgATBBIAEwQSABMEEgATB\nBICEqnIt9LGP/Xe5lgJO4PsPTl3ZgvnFL84u11LACXz/wanzlCwAJAgmACQIJgAkCCYAJAgmACQI\nJgAkCCYAJAgmACQIJgAkCCYAJAgmACQIJgAkCCYAJAgmACQIJgAkCCYAJAgmACQIJgAkCCYAJAgm\nACQIJgAkCCYAJAgmACQIJgAkCCYAJAgmACQIJgAkCCYAJAgmACQIJgAkCCYAJAgmACQIJgAkCCYA\nJAgmACQIJgAkCCYAJAgmACQIJgAkCCYAJAgmACQIJgAkCCYAJAgmACQIJgAkCCYAJAgmACQIJgAk\nCCYAJAgmACQIJgAkCCYAJAgmACQIJgAkCCYAJAgmACQIJgAkVFV6A/xH0flmtP3tsUpvo1vR+WZE\nxBm1p7PNW/fh0EpvA+gDgnmGGD78wrKsM2jQOdHVdSx13fb2IiIiamrO/r/wT2buvjW0bGcLnF6C\neYZYseKusqxTVzcs9u07VJa1ziQDdW6g73gNEwASBBMAEgQTABIEEwASBBMAEgQTABIEEwASBBMA\nEgQTABIEEwASBBMAEgQTABIEEwASBBMAEgQTABIEEwASBBMAEgQTABIEEwASBBMAEgQTABIEEwAS\nBBMAEgQTABIEEwASBBMAEgQTABIEEwASSkVRFJXeBACc6TzCBIAEwQSABMEEgATBBIAEwQSABMEE\ngISqSm+gXGbMmBG1tbUREfGhD30oFi5cGI2NjVEqleLyyy+PO++8M845p//8++FPf/pT3H///fHw\nww/Hq6++2uuszc3N8eMf/ziqqqpi0aJF8clPfrLS2z5lx8+9ffv2WLBgQYwZMyYiIr785S/H5z73\nuX41d2dnZ6xYsSJ27twZR44ciUWLFsVll13W78+7t7lHjRrV78+7q6sr7rjjjtixY0eUSqW4++67\nY8iQIf36vHub+ejRo5U562IAOHz4cNHQ0NDjsgULFhTPPPNMURRFsWrVquKXv/xlJbZ2Wjz44IPF\n1KlTiy984QtFUfQ+6969e4upU6cWHR0dxeuvv9798dnsxLmbm5uLhx56qMd1+tvcGzduLJqamoqi\nKIrW1tZi4sSJA+K8e5t7IJz3k08+WTQ2NhZFURTPPPNMsXDhwn5/3r3NXKmz7j8Pqd5FS0tLvPnm\nmzF37tyYM2dO/PGPf4wXXnghPv7xj0dExIQJE+Lpp5+u8C77zujRo+P73/9+9597m3Xbtm1x9dVX\nx+DBg2PYsGExevToaGlpqdSW+8SJc//5z3+Op556KmbPnh0rVqyItra2fjf39ddfH7feemtERBRF\nEYMGDRoQ593b3APhvCdNmhSrV6+OiIhdu3bF+eef3+/Pu7eZK3XWAyKY5557bsybNy8eeuihuPvu\nu+O2226LoiiiVCpFRERNTU0cOnSowrvsO5MnT46qqv88297brG1tbTFs2LDu69TU1ERbW1vZ99qX\nTpz7yiuvjNtvvz3Wr18fF110UfzgBz/od3PX1NREbW1ttLW1xeLFi2PJkiUD4rx7m3sgnHdERFVV\nVSxbtixWr14d06ZNGxDnfeLMlTrrARHMiy++OKZPnx6lUikuvvjiuOCCC+LAgQPdn29vb4/zzz+/\ngjs8vY5/bfbtWWtra6O9vb3H5cd/sfUHn/70p2P8+PHdH2/fvr1fzr179+6YM2dONDQ0xLRp0wbM\neZ8490A574iIb3/72/GLX/wiVq1aFR0dHd2X9+fzPn7m6667riJnPSCCuXHjxrjvvvsiImLPnj3R\n1tYW1157bTz77LMREfHb3/42rrnmmkpu8bQaN27cO2a98sorY+vWrdHR0RGHDh2Kv//97/GRj3yk\nwjvtW/PmzYtt27ZFRMTvf//7uOKKK/rd3Pv374+5c+fG0qVL4/Of/3xEDIzz7m3ugXDeP/3pT+OH\nP/xhREScd955USqVYvz48f36vHub+Rvf+EZFznpAvPn6kSNHYvny5bFr164olUpx2223xfDhw2PV\nqlXR2dkZl1xySTQ1NcWgQYMqvdU+89prr8U3v/nNaG5ujh07dvQ6a3Nzc/zkJz+JoihiwYIFMXny\n5Epv+5QdP/cLL7wQq1evjurq6nj/+98fq1evjtra2n41d1NTU/z85z+PSy65pPuylStXRlNTU78+\n797mXrJkSaxbt65fn/cbb7wRy5cvj/3798fRo0dj/vz5cemll/br7+/eZh41alRFvrcHRDAB4FQN\niKdkAeBUCSYAJAgmACQIJgAkCCYAJAgmnKQHHnggpkyZElOmTIm1a9dGRMTTTz8d06ZNi8985jPx\n3e9+t/u6L774YsycOTMmT54cK1eujKNHj0ZExN69e+Omm26KG264IWbNmhWvvfZar2v96le/ioaG\nhpg+fXp8/etfj3//+98R8dZbhM2ePTuuv/76WLRoUY8f2I5462ePGxsbu/+8a9euuPrqq6OhoSEa\nGhpi3rx5fXqfwIDQp+9MC/3c7373u+JLX/pS0dHRURw5cqSYM2dO8bOf/ayYOHFi8Y9//KPo7Ows\n5s6dWzz11FNFURTFlClTij/84Q9FURTF8uXLi/Xr1xdFURRf/epXiw0bNhRFURQbNmwobr311nes\ndejQoeLaa68t/vWvfxVFURTf+973itWrVxdFURQ33XRT8fjjjxdFURQPPPBAsXbt2qIo3vpFA+vW\nrSuuuuqqYtmyZd23tXnz5mLVqlWn4y6BAcMjTDgJdXV10djYGIMHD47q6uq49NJL45VXXokPf/jD\ncdFFF0VVVVVMmzYtNm/eHDt37ozDhw/HVVddFRERN954Y2zevDkOHjwYLS0tMWvWrIiImDlzZixZ\nsuQda3V2dsZdd90VI0eOjIiIsWPHxu7du6OzszO2bNnS/UPZb99uRMSWLVvi2LFjsXTp0h639fzz\nz8df/vKXuPHGG2POnDnx0ksvnbb7CPorwYSTcPnll3cH8JVXXoknnngiSqVS1NXVdV9nxIgRsWfP\nnti7d2+Py+vq6mLPnj3xz3/+Mz7wgQ/EPffcE9OnT4/FixdHdXX1O9YaPnx4TJo0KSIiDh8+HA8+\n+GBMmjQpWltbo7a2tvuN5t++3YiI6667Lm6//fY499xze9zWkCFD4oYbbohHH3005s2bFzfffHMc\nOXKkb+8c6OcEE/4f/vrXv8bcuXNj2bJlMXr06Hd8vlQqRdHLm2iVSqU4evRobN++PT7xiU/EY489\nFp/61Kd6vN54okOHDsX8+fOjvr4+ZsyY8X/e7ru55ZZbuh/RTpw4MYYOHRovv/zye40JHEcw4SRt\n3bo1vva1r8W3vvWtmDFjRowcOTL279/f/fm9e/fGiBEj3nH5vn37YsSIEVFXVxc1NTXdvw1+6tSp\nsW3bttizZ0/3f8qZP39+92195Stfifr6+lizZk1ERFx44YXR1tYWXV1dPW733Tz88MPR2tra/eei\nKHr8KjTgvQkmnITdu3fHzTffHPfff39MmTIlIiI++tGPxo4dO+LVV1+Nrq6uePzxx2PChAnxwQ9+\nMIYMGRJbt26NiLd+68KECRNi9OjRMXLkyPjNb34TERG//vWv44orroiRI0fGpk2bYtOmTfGjH/0o\nurq6YuHChfHZz342Vq5c2f0osrq6Oq655pp44oknetzuu9myZUts3LgxIiKee+65OHbsWI83Lgfe\nmzdfh5PQ1NQUjzzySI+nYWfNmhVjxoyJe++9Nzo6OmLixImxfPnyKJVK0dLSEnfccUe0t7fHuHHj\n4t57743BgwfHyy+/HHfeeWf365H33XdfjBkzpsdaTz75ZNxyyy0xduzY7svGjx8fa9asiZ07d0Zj\nY2McOHAgRo0aFd/5znfife97X/f1Hn300Xjuued6/Fq7xsbG2LdvXwwZMiTWrFkT9fX1p/fOgn5G\nMAEgwVOyAJAgmACQIJgAkCCYAJAgmACQIJgAkCCYAJAgmACQ8L+nX/LiLrdaRAAAAABJRU5ErkJg\ngg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "#Series箱型图离群点/异常点显示,利用seaborn\n", + "sns.boxplot(s_norm)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "由于pandas内置的箱型图默认不含离群点,可直接利用seaborn中的boxplot函数,为Series对象绘制带离群点的箱型图。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**1.5 样本的累积和**(累积频数与累积频率)\n", + "\n", + "**累积频数**(cumulative frequencies),将各有序类别或组的频数逐级累加起来的频数。\n", + "\n", + "**累积频率**(cumulative percentages),将各有序类别或组的百分比逐级累加起来。" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "year\n", + "2006 200\n", + "2007 500\n", + "2008 900\n", + "2009 1250\n", + "2010 1640\n", + "2011 2240\n", + "2012 3140\n", + "2013 3540\n", + "2014 3840\n", + "2015 3960\n", + "Name: 2006-2015, dtype: int64" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s.cumsum()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Pandas内置了cumsum()函数,可以直接得到累积频数。" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\nmwj1zXHR9u3byczM5KWXXmrS+aH+GdLT09m7dy+RkZFAzasoixYt8rscRUVFZGRk4Ha78Xg8/Oxn\nP/PKg8WG+pm60u2Nrb4Zzp8/z6xZsygrKyMgIIBnnnmGHj16XPF76iptIiIiJqGTz4iIiJiESl1E\nRMQkVOoiIiImoVIXERExCZW6iIiISajURURETEKlLiIiYhIqdRGTmzVrFm+//XbtP0+aNImdO3fy\n8MMPM378eFJTU/n6668B2LdvH5MmTeLee+8lJSWFv/3tbwC88sorPPLII4wZM4Y333zTKzlE5Oq8\nc3ktEWky9957L6+88goPPPAABQUFnDlzhueff55nnnmGvn37cuDAAR5//HE+/vhj3nnnHX7yk59w\n0003cezYMe6++24eeughANxuN//85z+9nEZErkRnlBMxOcMwuP3223njjTdYsWIFhmHw6quvXna6\nyTNnzrBy5UrCwsLYtGkTe/fuZe/evaxatYq9e/fyyiuvUFFRUaerRImI9+iZuojJWSwWxo0bx6pV\nq/joo4949dVX+fOf/8yKFStqjzl58iRt2rRh+vTphIWFkZKSwpgxY1i1alXtMS1atPDG+CJyDfSe\nukgzcM8995CZmUmnTp2IjIykW7dutaW+efNmJk6cWPv306dPZ+TIkXz22WcAeDwer80tItdGz9RF\nmoHOnTvTqVMnxo8fD8ALL7zAs88+y5/+9CeCgoJ46aWXsFgsTJs2jbS0NMLCwujevTuRkZHk5+d7\neXoRqSu9py5icoZhcPr0aSZNmsQHH3xAcHCwt0cSkUail99FTO7jjz9m7NixPPHEEyp0EZPTM3UR\nERGT0DN1ERERk1Cpi4iImIRKXURExCRU6iIiIiahUhcRETEJlbqIiIhJ/P+ayUE1x8o3UgAAAABJ\nRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "s.cumsum().plot()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "利用cumsum()得到的仍然是Series对象,可以直接绘图。" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\nAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "s_ratio = s/s.sum()\n", + "s_ratio.cumsum().plot()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "累积频率(累积百分比)可以类似的得到。\n", + "\n", + "`sum()`为内置的求Series对象中value和的函数。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**1.6 最大值、最小值、众数及总体描述**" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "900" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s.max()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "内置最大值函数max()" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "120" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s.min()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "内置最小值函数min()" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0 300\n", + "1 400\n", + "dtype: int64" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s.mode()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**众数**(mode):一组数据中出现次数最多的数据值。一般用于测度分类数据的集中趋势,在数据量较大的时候有意义。\n", + "Pandas内置mode()函数,可以直接得到众数,注意众数可能不唯一,如此时s的众数有两个。" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "count 10.000000\n", + "mean 396.000000\n", + "std 218.794678\n", + "min 120.000000\n", + "25% 300.000000\n", + "50% 370.000000\n", + "75% 400.000000\n", + "max 900.000000\n", + "Name: 2006-2015, dtype: float64" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s.describe()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "Pandas的descibe()函数,可以给出汇总与描述统计的常用值。其中count为数据个数。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**1.7 随机数、直方图、峰度与偏度**(公式以后有时间补充)" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "np.random.seed(66)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "调用np中random模块的seed()方法,生成一个随机数种子,在这个种子下,每次第一次生成的随机数均相同。" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 1.41561436, -1.0852864 , -0.61630804, ..., 0.08479998,\n", + " -1.16755255, 1.13461007])" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr1 = np.random.randn(10000)\n", + "arr1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "利用random的randn()函数,生成一个numpy的array类型的对象,大小为10000,可理解为长度为10000的数组(所有数据元素类型相同)。\n", + "\n", + "数组内数据分布为正态分布。randn即random normal。" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 2.28112862, 0.51138372, 0.68988585, 0.67582702, 0.63808164,\n", + " -1.0410448 , -0.91601431, -1.64294384, 2.16465592, -0.67004449,\n", + " 0.46737616, 0.90362682, -0.34551556, -0.05367347, 0.46465691,\n", + " 1.37674635, -0.21249989, -2.14939938, -0.25040615, 1.43040674,\n", + " 0.27824394, 0.20567202, -0.68650085, 0.75210394, -1.12895709,\n", + " 0.68402948, -0.28490141, 0.29969392, 0.14210905, -0.11570231,\n", + " -0.48913203, -0.74924755, -1.52762847, -0.99353886, 1.81620157,\n", + " -1.20129803, -0.93263586, -0.36954506, 0.08467705, 0.61107937,\n", + " 0.50382233, -1.12408078, 0.398812 , 1.497698 , 0.78490215,\n", + " 0.55041055, -0.25888733, 0.39002582, -1.41102818, -2.09786379])" + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr2 = np.random.randn(50)\n", + "arr2" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "与前类似,生成了一个长度为50的array,数据为正态分布。" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "s_1 = Series(arr1)\n", + "s_2 = Series(arr2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Numpy的array类型可以直接初始化为Series类型的对象。" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 45, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\nH/98gfc9KgLvAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "s_1.plot(kind='hist')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**直方图**(histogram):又称质量分布图,是数值数据分布的精确图形表示。\n", + "- 将值的范围分段,即将整个值的范围分成一系列间隔(一般要相等)\n", + "- 计算每个间隔中有多少值\n", + "\n", + "当plot()函数的kind参数为hist时,即代表直方图。\n", + "\n", + "此外,Pandas内置hist()函数,可对Series对象直接绘制直方图:`s_norm.hist()`。" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 46, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\nrLEs8X/GAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "s_1.plot(kind='hist',bins=50)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Plot()函数有一个重要参数`bins`,指定了间隔个数。此处将间隔数设为50." + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 47, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "s_1.plot(kind='kde')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**核密度估计图**(Kernel Density Estimation, KDE):采用平滑的峰值函数(“核函数”)来拟合观察到的数据点,从而对真实的概率分布曲线进行模拟。\n", + "Pandas的plot()函数中,参数kind的值为kde时,即可绘制KDE图。" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "sns.distplot(s_1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Seaborn中内置的distplot()函数,可以直接对Series对象绘制直方图及KDE图的合一图。" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 49, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAeIAAAFJCAYAAABHMi6OAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xl8VOWhN/DfLJmZJJNlQjayQgKBEJaQsIoRFCKKSrFA\ngyJovfet9r691l7e3l77tlzLtUhv662t1bbat2pdShStV9xFURRZAwkkAQIh+75MSGbJbOe8f+QS\npQKTwEyemTO/7+fjR5KZzPweMsmPc+Y5z6OSZVkGERERCaEWHYCIiCiUsYiJiIgEYhETEREJxCIm\nIiISiEVMREQkEIuYiIhIIO1YP2FX18BYP6XfmEwRMJttomP4DccX/JQ+Ro4vuCl9fMCXY0xIiLrk\nfXhEfBW0Wo3oCH7F8QU/pY+R4wtuSh8fMLIxsoiJiIgEYhETEREJxCImIiISiEVMREQkEIuYiIhI\nIBYxERGRQCxiIiIigVjEREREArGIiYiIBGIRExERCcQiJiIiEohFTEREJNCY775ERGJ8Ut4iOsKI\nLMlPFR2BaEzxiJiIiEggFjEREZFALGIiIiKBWMREREQCeZ2sJUkSHn74YZw6dQo6nQ6PPPIIMjMz\nh29/7rnn8OqrryIuLg4A8LOf/QxZWVn+S0xERKQgXot4165dcDqdKC0tRXl5ObZt24bf//73w7dX\nVlbiF7/4BaZPn+7XoERERErktYjLyspQVFQEAMjPz0dlZeUFt1dVVeHpp59GV1cXlixZgvvuu88/\nSYmIiBTIaxFbLBYYjcbhjzUaDdxuN7TaoS+95ZZbcOedd8JoNOJ73/sedu/ejeuvv/6Sj2cyRUCr\n1fggemBISIgSHcGvOL7gd36MUUaD4CQjM9rvidK/hxxf8PM2Rq9FbDQaYbVahz+WJGm4hGVZxt13\n342oqKEnWbx4Maqrqy9bxGazbUTBg0FCQhS6ugZEx/Abji/4fXWMA5ZBwWlGZjTfE6V/Dzm+4Hd+\njJcrY6+zpgsKCrBnzx4AQHl5OXJycoZvs1gsuPXWW2G1WiHLMg4cOMD3iomIiEbB6xFxcXEx9u7d\ni3Xr1kGWZWzduhU7d+6EzWZDSUkJfvCDH2Djxo3Q6XRYuHAhFi9ePBa5iYiIFMFrEavVamzZsuWC\nz2VnZw//edWqVVi1apXvkxEREYUALuhBREQkEIuYiIhIIBYxERGRQCxiIiIigVjEREREArGIiYiI\nBGIRExERCcQiJiIiEohFTEREJBCLmIiISCAWMRERkUAsYiIiIoFYxERERAKxiImIiARiERMREQnE\nIiYiIhKIRUxERCQQi5iIiEggFjEREZFALGIiIiKBWMREREQCsYiJiIgEYhETEREJxCImIiISiEVM\nREQkEIuYiIhIIBYxERGRQCxiIiIigVjEREREArGIiYiIBGIRExERCcQiJiIiEohFTEREJBCLmIiI\nSCAWMRERkUAsYiIiIoFYxERERAKxiImIiARiERMREQnEIiYiIhKIRUxERCQQi5iIiEggFjEREZFA\nLGIiIiKBWMREREQCsYiJiIgEYhETEREJ5LWIJUnC5s2bUVJSgg0bNqChoeGi9/vpT3+KX/3qVz4P\nSEREpGRei3jXrl1wOp0oLS3Fpk2bsG3btq/dZ/v27aipqfFLQCIiIiXzWsRlZWUoKioCAOTn56Oy\nsvKC248cOYKKigqUlJT4JyEREZGCab3dwWKxwGg0Dn+s0Wjgdruh1WrR2dmJJ598Er/73e/w7rvv\njugJTaYIaLWaK08cYBISokRH8CuOL/idH2OU0SA4yciM9nui9O8hxxf8vI3RaxEbjUZYrdbhjyVJ\nglY79GXvvfcezGYzvvOd76CrqwuDg4PIysrCN7/5zUs+ntlsG2n2gJeQEIWurgHRMfyG4wt+Xx3j\ngGVQcJqRGc33ROnfQ44v+J0f4+XK2GsRFxQUYPfu3VixYgXKy8uRk5MzfNvGjRuxceNGAMDrr7+O\ns2fPXraEiYiI6EJei7i4uBh79+7FunXrIMsytm7dip07d8Jms/F9YSIioqvktYjVajW2bNlyweey\ns7O/dj8eCRMREY0eF/QgIiISiEVMREQkEIuYiIhIIBYxERGRQCxiIiIigVjEREREArGIiYiIBGIR\nExERCcQiJiIiEohFTEREJBCLmIiISCCva00TUWixDbrR1WdHV58d3ecG0ds/CF2YBnFResRFGxAX\nrUdyXAR0YcrZV5xIJBYxEQEA7A43yk9340zzOcj/8zkVgBijDg6XB81dVjR3De1NbtBpMH9aEjKT\nlb+pO5G/sYiJQpzbI6G63ozKsz1we2TEROqQlRqNhJhwjIsxIEw79A6W3eFGb78DHWYbTtSb8Wl5\nKzKSjJiXm4QIA3+VEF0p/vQQhbCOXhs+O9YG26AbBp0GhVPiMTktBmq16mv3DddrkZqgRWpCJCal\n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\nSL4+beDBAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "sns.distplot(s_2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "类似地,可以为s_2绘制histogram及kde图。" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(-0.0063696106929140347,\n", + " 0.027355468589977068,\n", + " -0.020933532783578457,\n", + " -0.20411177773807099)" + ] + }, + "execution_count": 50, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s_1.skew(),s_2.skew(),s_1.kurt(),s_2.kurt()," + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**偏度**(Skewness)、偏态、偏态系数,是统计数据分布偏斜方向和程度的度量,是统计数据分布非对称程度的数字特征。正态分布的偏度为零。\n", + "- Skewness=0 分布形态与正态分布偏度相同\n", + "- Skewness>0 正偏差数值较大,为正偏或右偏。长尾巴拖在右边。\n", + "- Skewness<0 负偏差数值较大,为负偏或左偏。长尾巴拖在左边。\n", + "\n", + "**峰度**(Kurtosis)、峰态、峰态系数,是描述总体中所有取值分布形态陡缓程度的统计量。正态分布的峰度为3(也有很多将计算得到的峰度-3,而使正态分布峰度为零的做法)。\n", + "- Kurtosis=3(或0) 分布形态与正态分布峰度相同\n", + "- Kurtosis>3(或0) 正偏差数值较大,尖峰,厚尾。\n", + "- Kurtosis<3(或0) 负偏差数值较大,扁峰,薄尾。\n", + "\n", + "本例中,s_1比s_2更接近于正态分布。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3. Series类型基本操作整理\n", + "**3.1 创建与查看**\n", + "\n", + "创建一个Series的基本方法是:s = Series(data, index=index)。其中,data指代许多不同的数据类型:\n", + "- a Python dict\n", + "- an ndarray\n", + "- a scalar value (like 6)\n", + "\n", + "index指一个标签序列,一般用list类型。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**3.1.1 利用list创建Series**" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0 0\n", + "1 1\n", + "2 4\n", + "3 9\n", + "4 16\n", + "5 25\n", + "6 36\n", + "7 49\n", + "8 64\n", + "9 81\n", + "10 100\n", + "11 121\n", + "12 144\n", + "13 169\n", + "14 196\n", + "15 225\n", + "16 256\n", + "17 289\n", + "18 324\n", + "19 361\n", + "20 400\n", + "21 441\n", + "22 484\n", + "23 529\n", + "24 576\n", + "25 625\n", + "26 676\n", + "27 729\n", + "28 784\n", + "29 841\n", + " ... \n", + "70 4900\n", + "71 5041\n", + "72 5184\n", + "73 5329\n", + "74 5476\n", + "75 5625\n", + "76 5776\n", + "77 5929\n", + "78 6084\n", + "79 6241\n", + "80 6400\n", + "81 6561\n", + "82 6724\n", + "83 6889\n", + "84 7056\n", + "85 7225\n", + "86 7396\n", + "87 7569\n", + "88 7744\n", + "89 7921\n", + "90 8100\n", + "91 8281\n", + "92 8464\n", + "93 8649\n", + "94 8836\n", + "95 9025\n", + "96 9216\n", + "97 9409\n", + "98 9604\n", + "99 9801\n", + "dtype: int64" + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s = Series([x*x for x in range(100)])\n", + "s" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 第一行利用一个list,创建了一个Series对象s\n", + "- 第二行查看该对象。\n", + "- 该对象由两部分组成,第一列为index,第二列为values。" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0 0\n", + "1 1\n", + "2 4\n", + "3 9\n", + "4 16\n", + "dtype: int64" + ] + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "数据太长,可用head()函数查看前几个数据。" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "90 8100\n", + "91 8281\n", + "92 8464\n", + "93 8649\n", + "94 8836\n", + "95 9025\n", + "96 9216\n", + "97 9409\n", + "98 9604\n", + "99 9801\n", + "dtype: int64" + ] + }, + "execution_count": 53, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s.tail(10)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "也可用tail()函数查看最后几个数据,head()及tail()函数内可放整型参数,代表列出的数据个数。" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100,\n", + " 121, 144, 169, 196, 225, 256, 289, 324, 361, 400, 441,\n", + " 484, 529, 576, 625, 676, 729, 784, 841, 900, 961, 1024,\n", + " 1089, 1156, 1225, 1296, 1369, 1444, 1521, 1600, 1681, 1764, 1849,\n", + " 1936, 2025, 2116, 2209, 2304, 2401, 2500, 2601, 2704, 2809, 2916,\n", + " 3025, 3136, 3249, 3364, 3481, 3600, 3721, 3844, 3969, 4096, 4225,\n", + " 4356, 4489, 4624, 4761, 4900, 5041, 5184, 5329, 5476, 5625, 5776,\n", + " 5929, 6084, 6241, 6400, 6561, 6724, 6889, 7056, 7225, 7396, 7569,\n", + " 7744, 7921, 8100, 8281, 8464, 8649, 8836, 9025, 9216, 9409, 9604,\n", + " 9801], dtype=int64)" + ] + }, + "execution_count": 54, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s.values" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "查看序列s的值" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "numpy.ndarray" + ] + }, + "execution_count": 55, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(s.values)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 查看s.values的类型\n", + "- Series对象的values的类型确实为numpy的array(数组)类型,即ndarray(n维数组)" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "RangeIndex(start=0, stop=100, step=1)" + ] + }, + "execution_count": 56, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s.index" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 查看s的index(索引)的值" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "pandas.indexes.range.RangeIndex" + ] + }, + "execution_count": 57, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(s.index)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 查看s.index的类型\n", + "- Series对象的索引在未指定时,为pandas内置的RangeIndex类型,类似于python的range类型。" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "n 0\n", + "o 1\n", + "w 4\n", + "s 9\n", + "g 16\n", + "dtype: int64" + ] + }, + "execution_count": 58, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s2 = Series([x*x for x in range(26)], index=set('abcdefghijklmnopqrstuvwxyz'))\n", + "s2.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用list创建Series对象时,可用index参数指定一个list或set对应索引。" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(pandas.indexes.base.Index,\n", + " Index(['n', 'o', 'w', 's', 'g', 'p', 'm', 'i', 'a', 'y', 'j', 'v', 'k', 'e',\n", + " 'u', 'x', 'r', 'q', 'l', 'c', 'b', 't', 'd', 'z', 'f', 'h'],\n", + " dtype='object'))" + ] + }, + "execution_count": 59, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(s2.index), s2.index" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 指定索引后,Series对象的索引是pandas内置的Index类型" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**3.1.2 利用dict创建Series**" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "喜欢 3000\n", + "恨 500\n", + "爱 7000\n", + "讨厌 1000\n", + "dtype: int64" + ] + }, + "execution_count": 60, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data = {'喜欢':3000,'爱':7000,'讨厌':1000,'恨':500}\n", + "s3 = Series(data)\n", + "s3" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 可用dict创建Series对象,则字典的键自动成为index" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "a NaN\n", + "b NaN\n", + "c NaN\n", + "爱 7000.0\n", + "dtype: float64" + ] + }, + "execution_count": 61, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s3 = Series(data, index = ['a','b','c','爱'])\n", + "s3" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 初始化时,也可以额外指定index。但是如果指定的index找不到对应的值,则该index对应值设为NaN(Not a Number)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**3.1.3 利用标量创建Series对象**" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "a 5\n", + "b 5\n", + "c 5\n", + "d 5\n", + "e 5\n", + "dtype: int64" + ] + }, + "execution_count": 62, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s0 = Series(5, index = ['a','b','c','d','e'])\n", + "s0" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用标量创建Series对象时,对象的值将均为标量的值" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**3.1.4 利用Series对象创建Series对象**" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "a NaN\n", + "b NaN\n", + "c NaN\n", + "爱 7000.0\n", + "dtype: float64" + ] + }, + "execution_count": 63, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s4 = Series(s3)\n", + "s4" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 这是最简单的利用Series对象创建Series对象的代码" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "喜欢 NaN\n", + "爱 7000.0\n", + "讨厌 NaN\n", + "中 NaN\n", + "dtype: float64" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s5 = Series(s4, index = ['喜欢','爱','讨厌','中'])\n", + "s5" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 与利用dict初始化类似,也可以额外指定index。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**3.2 访问Series对象的元素**" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(nan, 7000.0, 7000.0)" + ] + }, + "execution_count": 65, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s4[0], s4['爱'], s4.爱" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用位置索引或者index均可以访问对应元素\n", + "- 还可以利用index的值作为属性来访问对应元素" + ] + }, + { + "cell_type": "code", + "execution_count": 103, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "喜欢 NaN\n", + "爱 4078.0\n", + "dtype: float64" + ] + }, + "execution_count": 103, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s4[0:2]" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "爱 7000.0\n", + "dtype: float64" + ] + }, + "execution_count": 67, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s4['喜欢':'爱']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 位置索引及index的切片访问也适用,但利用index切片是包含末端的" + ] + }, + { + "cell_type": "code", + "execution_count": 105, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(4078.0, 爱 4078.0\n", + " 讨厌 NaN\n", + " dtype: float64)" + ] + }, + "execution_count": 105, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s4.iloc[1], s4.iloc[1:3]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 有时会遇到Index是整数的情况,为避免歧义,可以用iloc来利用位置进行元素选取" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['a', 'b', 'c', '爱'], dtype='object')" + ] + }, + "execution_count": 69, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s4.index" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 可以利用index属性访问Series对象的索引" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ nan, nan, nan, 7000.])" + ] + }, + "execution_count": 70, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s4.values" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 可以利用values属性访问Series对象的值" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "a nan\n", + "b nan\n", + "c nan\n", + "爱 7000.0\n" + ] + } + ], + "source": [ + "for k, v in s4.items():\n", + " print(k, v)" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "a\n", + "b\n", + "c\n", + "爱\n" + ] + } + ], + "source": [ + "for k in s4.keys():\n", + " print(k)" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "nan\n", + "nan\n", + "nan\n", + "7000.0\n" + ] + } + ], + "source": [ + "for v in s4:\n", + " print(v)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 可以类似dict一样迭代访问Series对象的各个元素" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "a\n", + "b\n", + "c\n", + "爱\n" + ] + } + ], + "source": [ + "for k in s4.index:\n", + " print(k)" + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "nan\n", + "nan\n", + "nan\n", + "7000.0\n" + ] + } + ], + "source": [ + "for v in s4.values:\n", + " print(v)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 也可以利用index与values属性迭代访问" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**3.3 修改、删除、排序等基本运算**" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "a 10000.0\n", + "b NaN\n", + "c NaN\n", + "爱 7000.0\n", + "dtype: float64" + ] + }, + "execution_count": 76, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s4[0] = 10000\n", + "s4" + ] + }, + { + "cell_type": "code", + "execution_count": 77, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "a 10000.0\n", + "b NaN\n", + "c NaN\n", + "爱 4078.0\n", + "dtype: float64" + ] + }, + "execution_count": 77, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s4['爱'] = 4078\n", + "s4" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- Series对象内的值可以直接根据位置或index被赋值(修改)" + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "a 666.0\n", + "b 666.0\n", + "c 666.0\n", + "爱 4078.0\n", + "dtype: float64" + ] + }, + "execution_count": 78, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s4[0:3] = 666\n", + "s4" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 可以切片式赋值" + ] + }, + { + "cell_type": "code", + "execution_count": 79, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "a 666.0\n", + "b 666.0\n", + "c 666.0\n", + "d 4078.0\n", + "dtype: float64" + ] + }, + "execution_count": 79, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s4.index = ['a', 'b', 'c', 'd']\n", + "s4" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- Series对象的index可以直接被赋值(修改),注意新的index的长度要与Series对象中index的长度一致。" + ] + }, + { + "cell_type": "code", + "execution_count": 80, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "喜欢 NaN\n", + "爱 4078.0\n", + "讨厌 NaN\n", + "中 NaN\n", + "e NaN\n", + "dtype: float64" + ] + }, + "execution_count": 80, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s4 = s3.reindex(['喜欢','爱','讨厌','中', 'e'])\n", + "s4" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 可用reindex方法来更改index,找不到对应值的index,则其值为NaN。" + ] + }, + { + "cell_type": "code", + "execution_count": 81, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "喜欢 NaN\n", + "爱 4078.0\n", + "讨厌 NaN\n", + "中 NaN\n", + "e NaN\n", + "dtype: float64" + ] + }, + "execution_count": 81, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s5 = s4.drop('e')\n", + "s4" + ] + }, + { + "cell_type": "code", + "execution_count": 82, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "喜欢 NaN\n", + "爱 4078.0\n", + "讨厌 NaN\n", + "中 NaN\n", + "dtype: float64" + ] + }, + "execution_count": 82, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s5" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 可利用drop函数删除指定索引及值,生成新的Series对象,但原series对象不变。" + ] + }, + { + "cell_type": "code", + "execution_count": 83, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "e NaN\n", + "中 NaN\n", + "喜欢 NaN\n", + "爱 8156.0\n", + "讨厌 NaN\n", + "dtype: float64" + ] + }, + "execution_count": 83, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s4+s5" + ] + }, + { + "cell_type": "code", + "execution_count": 84, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "e NaN\n", + "中 NaN\n", + "喜欢 NaN\n", + "爱 0.0\n", + "讨厌 NaN\n", + "dtype: float64" + ] + }, + "execution_count": 84, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s4-s5" + ] + }, + { + "cell_type": "code", + "execution_count": 85, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "e NaN\n", + "中 NaN\n", + "喜欢 NaN\n", + "爱 16630084.0\n", + "讨厌 NaN\n", + "dtype: float64" + ] + }, + "execution_count": 85, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s4*s5" + ] + }, + { + "cell_type": "code", + "execution_count": 86, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "e NaN\n", + "中 NaN\n", + "喜欢 NaN\n", + "爱 1.0\n", + "讨厌 NaN\n", + "dtype: float64" + ] + }, + "execution_count": 86, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s4/s5" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- Serires对象可以直接进行四则运算,运算规则是对应索引的值进行运算,整体运算结果仍然是Series对象。\n", + "- 如果索引值无法对应,则结果为NaN。" + ] + }, + { + "cell_type": "code", + "execution_count": 87, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "爱 4078.0\n", + "喜欢 NaN\n", + "讨厌 NaN\n", + "中 NaN\n", + "e NaN\n", + "dtype: float64" + ] + }, + "execution_count": 87, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s4.sort_values()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 按照values(值)进行排序,按值排序时,NaN将排在尾端" + ] + }, + { + "cell_type": "code", + "execution_count": 88, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "e NaN\n", + "中 NaN\n", + "喜欢 NaN\n", + "爱 4078.0\n", + "讨厌 NaN\n", + "dtype: float64" + ] + }, + "execution_count": 88, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s4.sort_index()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 按照index(索引)进行排序" + ] + }, + { + "cell_type": "code", + "execution_count": 89, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "爱 4078.0\n", + "喜欢 NaN\n", + "讨厌 NaN\n", + "中 NaN\n", + "e NaN\n", + "dtype: float64" + ] + }, + "execution_count": 89, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s4.sort_values(ascending=False)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 将ascending参数指定为False,则变为倒序排序" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**3.4 处理NaN值**" + ] + }, + { + "cell_type": "code", + "execution_count": 90, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "喜欢 1.0\n", + "爱 4078.0\n", + "讨厌 1.0\n", + "中 1.0\n", + "e 1.0\n", + "dtype: float64" + ] + }, + "execution_count": 90, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s5 = s4.fillna(1)\n", + "s5" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 可以利用内置fillna()函数,将NaN值替换为指定数值" + ] + }, + { + "cell_type": "code", + "execution_count": 91, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "喜欢 NaN\n", + "爱 4078.0\n", + "不讨厌 0.0\n", + "中 NaN\n", + "dtype: float64" + ] + }, + "execution_count": 91, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s6 = s4.reindex(['喜欢','爱','不讨厌','中'], fill_value = 0)\n", + "s6" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 可在reindex方法内利用fill_value参数,指定值来替换在重新索引时新出现的NaN值,\n", + "- 注意,fill_value参数与不会对原有NaN值进行替换。" + ] + }, + { + "cell_type": "code", + "execution_count": 92, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "e NaN\n", + "不讨厌 NaN\n", + "中 NaN\n", + "喜欢 NaN\n", + "爱 8156.0\n", + "讨厌 NaN\n", + "dtype: float64" + ] + }, + "execution_count": 92, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s4.add(s6)" + ] + }, + { + "cell_type": "code", + "execution_count": 93, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "e NaN\n", + "不讨厌 0.0\n", + "中 NaN\n", + "喜欢 NaN\n", + "爱 8156.0\n", + "讨厌 NaN\n", + "dtype: float64" + ] + }, + "execution_count": 93, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s4.add(s6, fill_value=0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 两个Series对象相加可用add方法,设置fill_value参数的值,替换非对齐index部分的NaN值。fill_value参数不会对运算前的NaN进行填充。\n", + "- 类似还有sub,div,mul方法,分别对应减法、除法及乘法。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**3.5 过滤**" + ] + }, + { + "cell_type": "code", + "execution_count": 94, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0 False\n", + "1 False\n", + "2 False\n", + "3 False\n", + "4 False\n", + "5 False\n", + "6 False\n", + "7 False\n", + "8 False\n", + "9 False\n", + "10 False\n", + "11 False\n", + "12 False\n", + "13 False\n", + "14 False\n", + "15 False\n", + "16 False\n", + "17 False\n", + "18 False\n", + "19 False\n", + "20 False\n", + "21 False\n", + "22 False\n", + "23 False\n", + "24 False\n", + "25 False\n", + "26 False\n", + "27 False\n", + "28 False\n", + "29 False\n", + " ... \n", + "70 True\n", + "71 True\n", + "72 True\n", + "73 True\n", + "74 True\n", + "75 True\n", + "76 True\n", + "77 True\n", + "78 True\n", + "79 True\n", + "80 True\n", + "81 True\n", + "82 True\n", + "83 True\n", + "84 True\n", + "85 True\n", + "86 True\n", + "87 True\n", + "88 True\n", + "89 True\n", + "90 True\n", + "91 True\n", + "92 True\n", + "93 True\n", + "94 True\n", + "95 True\n", + "96 True\n", + "97 True\n", + "98 True\n", + "99 True\n", + "dtype: bool" + ] + }, + "execution_count": 94, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s > 1000" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- Series对象进行比较等逻辑运算,结果仍然是一个Series对象,每一维度的值根据运算结果为True或False" + ] + }, + { + "cell_type": "code", + "execution_count": 95, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "32 1024\n", + "33 1089\n", + "34 1156\n", + "35 1225\n", + "36 1296\n", + "37 1369\n", + "38 1444\n", + "39 1521\n", + "40 1600\n", + "41 1681\n", + "42 1764\n", + "43 1849\n", + "44 1936\n", + "45 2025\n", + "46 2116\n", + "47 2209\n", + "48 2304\n", + "49 2401\n", + "50 2500\n", + "51 2601\n", + "52 2704\n", + "53 2809\n", + "54 2916\n", + "55 3025\n", + "56 3136\n", + "57 3249\n", + "58 3364\n", + "59 3481\n", + "60 3600\n", + "61 3721\n", + " ... \n", + "70 4900\n", + "71 5041\n", + "72 5184\n", + "73 5329\n", + "74 5476\n", + "75 5625\n", + "76 5776\n", + "77 5929\n", + "78 6084\n", + "79 6241\n", + "80 6400\n", + "81 6561\n", + "82 6724\n", + "83 6889\n", + "84 7056\n", + "85 7225\n", + "86 7396\n", + "87 7569\n", + "88 7744\n", + "89 7921\n", + "90 8100\n", + "91 8281\n", + "92 8464\n", + "93 8649\n", + "94 8836\n", + "95 9025\n", + "96 9216\n", + "97 9409\n", + "98 9604\n", + "99 9801\n", + "dtype: int64" + ] + }, + "execution_count": 95, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s[s>1000]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 可以利用逻辑运算的结果Series,对Series对象进行过滤,得到满足条件的Series" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**3.6 时间序列(Time Series)**示例" + ] + }, + { + "cell_type": "code", + "execution_count": 96, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "DatetimeIndex(['2012-01-01 00:00:00', '2012-01-01 00:00:01',\n", + " '2012-01-01 00:00:02', '2012-01-01 00:00:03',\n", + " '2012-01-01 00:00:04', '2012-01-01 00:00:05',\n", + " '2012-01-01 00:00:06', '2012-01-01 00:00:07',\n", + " '2012-01-01 00:00:08', '2012-01-01 00:00:09',\n", + " '2012-01-01 00:00:10', '2012-01-01 00:00:11',\n", + " '2012-01-01 00:00:12', '2012-01-01 00:00:13',\n", + " '2012-01-01 00:00:14', '2012-01-01 00:00:15',\n", + " '2012-01-01 00:00:16', '2012-01-01 00:00:17',\n", + " '2012-01-01 00:00:18', '2012-01-01 00:00:19',\n", + " '2012-01-01 00:00:20', '2012-01-01 00:00:21',\n", + " '2012-01-01 00:00:22', '2012-01-01 00:00:23',\n", + " '2012-01-01 00:00:24', '2012-01-01 00:00:25',\n", + " '2012-01-01 00:00:26', '2012-01-01 00:00:27',\n", + " '2012-01-01 00:00:28', '2012-01-01 00:00:29',\n", + " '2012-01-01 00:00:30', '2012-01-01 00:00:31',\n", + " '2012-01-01 00:00:32', '2012-01-01 00:00:33',\n", + " '2012-01-01 00:00:34', '2012-01-01 00:00:35',\n", + " '2012-01-01 00:00:36', '2012-01-01 00:00:37',\n", + " '2012-01-01 00:00:38', '2012-01-01 00:00:39',\n", + " '2012-01-01 00:00:40', '2012-01-01 00:00:41',\n", + " '2012-01-01 00:00:42', '2012-01-01 00:00:43',\n", + " '2012-01-01 00:00:44', '2012-01-01 00:00:45',\n", + " '2012-01-01 00:00:46', '2012-01-01 00:00:47',\n", + " '2012-01-01 00:00:48', '2012-01-01 00:00:49',\n", + " '2012-01-01 00:00:50', '2012-01-01 00:00:51',\n", + " '2012-01-01 00:00:52', '2012-01-01 00:00:53',\n", + " '2012-01-01 00:00:54', '2012-01-01 00:00:55',\n", + " '2012-01-01 00:00:56', '2012-01-01 00:00:57',\n", + " '2012-01-01 00:00:58', '2012-01-01 00:00:59',\n", + " '2012-01-01 00:01:00', '2012-01-01 00:01:01',\n", + " '2012-01-01 00:01:02', '2012-01-01 00:01:03',\n", + " '2012-01-01 00:01:04', '2012-01-01 00:01:05',\n", + " '2012-01-01 00:01:06', '2012-01-01 00:01:07',\n", + " '2012-01-01 00:01:08', '2012-01-01 00:01:09',\n", + " '2012-01-01 00:01:10', '2012-01-01 00:01:11',\n", + " '2012-01-01 00:01:12', '2012-01-01 00:01:13',\n", + " '2012-01-01 00:01:14', '2012-01-01 00:01:15',\n", + " '2012-01-01 00:01:16', '2012-01-01 00:01:17',\n", + " '2012-01-01 00:01:18', '2012-01-01 00:01:19',\n", + " '2012-01-01 00:01:20', '2012-01-01 00:01:21',\n", + " '2012-01-01 00:01:22', '2012-01-01 00:01:23',\n", + " '2012-01-01 00:01:24', '2012-01-01 00:01:25',\n", + " '2012-01-01 00:01:26', '2012-01-01 00:01:27',\n", + " '2012-01-01 00:01:28', '2012-01-01 00:01:29',\n", + " '2012-01-01 00:01:30', '2012-01-01 00:01:31',\n", + " '2012-01-01 00:01:32', '2012-01-01 00:01:33',\n", + " '2012-01-01 00:01:34', '2012-01-01 00:01:35',\n", + " '2012-01-01 00:01:36', '2012-01-01 00:01:37',\n", + " '2012-01-01 00:01:38', '2012-01-01 00:01:39'],\n", + " dtype='datetime64[ns]', freq='S')" + ] + }, + "execution_count": 96, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "rng = pd.date_range('1/1/2012', periods=100, freq='S')\n", + "rng" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- Pandas内置的date_range()函数,可以很方便的得到时间标签\n", + "- 第一个参数'1/1/2012'为时间字符串,表示开始时间\n", + "- 第二个参数periods为时间标签个数,此处设为100\n", + "- 第三个参数freq为时间频率间隔,此处的'S'表示间隔为秒,常用的为S,Min,H,D,M分别为秒、分、小时、天,月。" + ] + }, + { + "cell_type": "code", + "execution_count": 97, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "2012-01-01 00:00:00 18\n", + "2012-01-01 00:00:01 98\n", + "2012-01-01 00:00:02 182\n", + "2012-01-01 00:00:03 371\n", + "2012-01-01 00:00:04 193\n", + "Freq: S, dtype: int32" + ] + }, + "execution_count": 97, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ts = Series(np.random.randint(0, 500, len(rng)), index=rng)\n", + "ts.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 将时间标签作为Series对象的index,随机生成0-500间100个整数,作为Series对象的值。" + ] + }, + { + "cell_type": "code", + "execution_count": 98, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 98, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\nRK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "ts.plot()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用plot()函数绘图" + ] + }, + { + "cell_type": "code", + "execution_count": 99, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "2012-01-01 00:00:00 244.950\n", + "2012-01-01 00:01:00 218.425\n", + "Freq: T, dtype: float64" + ] + }, + "execution_count": 99, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ts1 = ts.resample('Min').mean()\n", + "ts1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用resample()函数,可将时间序列重新抽样。\n", + "- 样本时间间隔根据resample()函数参数决定,本例中,样本时间间隔设为分钟(Min)\n", + "- 重新设定样本间隔后,可利用mean()函数,求得每个时间间隔内值的均值,作为新的index对应的值" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**3.7 输出**" + ] + }, + { + "cell_type": "code", + "execution_count": 100, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nSUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "s.plot()\n", + "plt.savefig('test.jpg')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用内置的plot()函数展示图片后,可利用plt的savefig()函数将图片保存为文件输出。\n", + "- 可以查看当前目录下的test.jpg文件,与当前显示一致。" + ] + }, + { + "cell_type": "code", + "execution_count": 101, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "s.to_csv('test.csv')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用to_csv()函数,可将Series对象输出为.csv文件\n", + "- 可在当前目录下,找到test.csv,双击打开查看" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.0" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/chapter4/pandas_Tutorial_2(DataFrame).ipynb b/chapter4/pandas_Tutorial_2(DataFrame).ipynb new file mode 100644 index 000000000..23a227fc0 --- /dev/null +++ b/chapter4/pandas_Tutorial_2(DataFrame).ipynb @@ -0,0 +1,4830 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Pandas统计分析入门(2)\n", + "- 转载注明转自:https://github.com/liupengyuan/\n", + "- ## 二维数据统计分析(DataFrame基础)\n", + "\n", + "---" + ] + }, + { + "cell_type": "code", + "execution_count": 181, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "from pandas import Series, DataFrame\n", + "import pandas as pd\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import seaborn as sns" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 二、二维数据统计分析(DataFrame基础)\n", + "\n", + "- 数据的描述、分析、可视化展示、概括性度量、输入与输出\n", + "df:多维条形图,多维折线图,多层图" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "### 1. DataFrame对象及数据展示\n", + "\n", + "- DataFrame是pandas最重要最基础的数据对象之一,可用来表示数据表\n", + "- 如果将Series视为表格中的一列,则DataFrame可以视为表中多列,或者是具有相同index的多个Series\n", + "- 如果将Series视为向量(带索引),则DataFrame即可视为矩阵(带索引)。\n", + "- 本小节仍将以一个词频统计结果作为实例,进行介绍。\n", + "- 教程中的各个代码段,请自行建立新的python程序,依次键入并顺序执行,观察执行结果。" + ] + }, + { + "cell_type": "code", + "execution_count": 182, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "words_freq = np.array([200,300,400,350,390,600,900,400,300,120])\n", + "freq_dict = {'boy':words_freq,'girl':words_freq*2,'children':words_freq+100, 'child': words_freq+300}\n", + "total_words_freq = [12345000,23456000,22333000,45632000,11144000,65433000,44444000,55555000,34522000,55566000]\n", + "years = pd.date_range('2006', periods=10, freq='A')" + ] + }, + { + "cell_type": "code", + "execution_count": 183, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      boychildchildrengirl
      0200500300400
      1300600400600
      2400700500800
      3350650450700
      4390690490780
      56009007001200
      6900120010001800
      7400700500800
      8300600400600
      9120420220240
      \n", + "
      " + ], + "text/plain": [ + " boy child children girl\n", + "0 200 500 300 400\n", + "1 300 600 400 600\n", + "2 400 700 500 800\n", + "3 350 650 450 700\n", + "4 390 690 490 780\n", + "5 600 900 700 1200\n", + "6 900 1200 1000 1800\n", + "7 400 700 500 800\n", + "8 300 600 400 600\n", + "9 120 420 220 240" + ] + }, + "execution_count": 183, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = DataFrame(freq_dict)\n", + "df" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用dict创建一个DataFrame对象,其index默认为从0开始的整数" + ] + }, + { + "cell_type": "code", + "execution_count": 184, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      boychildchildrengirl
      2006-12-31200500300400
      2007-12-31300600400600
      2008-12-31400700500800
      2009-12-31350650450700
      2010-12-31390690490780
      2011-12-316009007001200
      2012-12-31900120010001800
      2013-12-31400700500800
      2014-12-31300600400600
      2015-12-31120420220240
      \n", + "
      " + ], + "text/plain": [ + " boy child children girl\n", + "2006-12-31 200 500 300 400\n", + "2007-12-31 300 600 400 600\n", + "2008-12-31 400 700 500 800\n", + "2009-12-31 350 650 450 700\n", + "2010-12-31 390 690 490 780\n", + "2011-12-31 600 900 700 1200\n", + "2012-12-31 900 1200 1000 1800\n", + "2013-12-31 400 700 500 800\n", + "2014-12-31 300 600 400 600\n", + "2015-12-31 120 420 220 240" + ] + }, + "execution_count": 184, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = DataFrame(freq_dict, index = years)\n", + "df" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 与Series对象类似,可以在初始化DataFrame的时候,指定index\n", + "- 数据可视为3个有相同index的Series" + ] + }, + { + "cell_type": "code", + "execution_count": 185, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 185, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df.plot()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 与Series对象类似,DataFrame对象可以利用plot()函数直接绘制折线图" + ] + }, + { + "cell_type": "code", + "execution_count": 186, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 186, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\nU2cX0CkAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df.plot(kind='bar')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 绘制柱状图(统计学中一般称为复式柱状图)" + ] + }, + { + "cell_type": "code", + "execution_count": 187, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 187, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n/w/2F5GoCKIVigAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df.plot(kind='barh')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 绘制条形图" + ] + }, + { + "cell_type": "code", + "execution_count": 188, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 188, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\nQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df.plot(kind = 'area')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 绘制(面积)堆积图" + ] + }, + { + "cell_type": "code", + "execution_count": 189, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 189, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df.plot(kind='box')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 绘制箱型图" + ] + }, + { + "cell_type": "code", + "execution_count": 190, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "D:\\Anaconda\\lib\\site-packages\\seaborn\\categorical.py:2171: UserWarning: The boxplot API has been changed. Attempting to adjust your arguments for the new API (which might not work). Please update your code. See the version 0.6 release notes for more info.\n", + " warnings.warn(msg, UserWarning)\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 190, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\nrkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "sns.boxplot(df)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用seaborn绘制箱型图" + ] + }, + { + "cell_type": "code", + "execution_count": 191, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 191, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\ngg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df.plot(kind='scatter', x='boy',y='girl')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 当plot()函数kind为scatter时,可绘制散点图\n", + "- 散点图展现的是2组数据(2个变量)之间的关系\n", + "- 可见当前`boy`与`girl`两组数据之间是一种线性关系" + ] + }, + { + "cell_type": "code", + "execution_count": 192, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 192, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df.plot(kind='scatter', x='boy',y='girl',s=df['child'].values)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 对散点图,如果设置s参数,将一组list类型的数据传入,代表对应点的大小,则绘制出气泡图\n", + "- 气泡图展示的是三组数据(三个变量)之间的关系。上图可以解释为:当男孩数量增加时,女孩增加,同时小孩儿的数量增加。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2. DataFrame汇总与描述统计" + ] + }, + { + "cell_type": "code", + "execution_count": 193, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "boy 3960\n", + "child 6960\n", + "children 4960\n", + "girl 7920\n", + "dtype: int64" + ] + }, + "execution_count": 193, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.sum()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- Series对象的各类求值及描述统计函数,DataFrame对象均可以使用\n", + "- 默认参数是axis=0,表示以行方向为数据轴(基准),取每列做为一个Series对象对其进行统计" + ] + }, + { + "cell_type": "code", + "execution_count": 194, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "2006-12-31 1400\n", + "2007-12-31 1900\n", + "2008-12-31 2400\n", + "2009-12-31 2150\n", + "2010-12-31 2350\n", + "2011-12-31 3400\n", + "2012-12-31 4900\n", + "2013-12-31 2400\n", + "2014-12-31 1900\n", + "2015-12-31 1000\n", + "Freq: A-DEC, dtype: int64" + ] + }, + "execution_count": 194, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.sum(axis=1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 参数如果指定axis=1,表示以列方向为数据轴(基准),取每行做为一个Series对象对其进行统计" + ] + }, + { + "cell_type": "code", + "execution_count": 195, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "boy 120\n", + "child 420\n", + "children 220\n", + "girl 240\n", + "dtype: int32" + ] + }, + "execution_count": 195, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.min()" + ] + }, + { + "cell_type": "code", + "execution_count": 196, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "boy 396.0\n", + "child 696.0\n", + "children 496.0\n", + "girl 792.0\n", + "dtype: float64" + ] + }, + "execution_count": 196, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.mean()" + ] + }, + { + "cell_type": "code", + "execution_count": 197, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "boy 47871.111111\n", + "child 47871.111111\n", + "children 47871.111111\n", + "girl 191484.444444\n", + "dtype: float64" + ] + }, + "execution_count": 197, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.var()" + ] + }, + { + "cell_type": "code", + "execution_count": 198, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "boy 218.794678\n", + "child 218.794678\n", + "children 218.794678\n", + "girl 437.589356\n", + "dtype: float64" + ] + }, + "execution_count": 198, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.std()" + ] + }, + { + "cell_type": "code", + "execution_count": 199, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "boy 0.552512\n", + "child 0.314360\n", + "children 0.441118\n", + "girl 0.552512\n", + "dtype: float64" + ] + }, + "execution_count": 199, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.std()/df.mean()" + ] + }, + { + "cell_type": "code", + "execution_count": 200, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "boy 370.0\n", + "child 670.0\n", + "children 470.0\n", + "girl 740.0\n", + "dtype: float64" + ] + }, + "execution_count": 200, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.median()" + ] + }, + { + "cell_type": "code", + "execution_count": 201, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      boychildchildrengirl
      2006-12-31200500300400
      2007-12-3150011007001000
      2008-12-31900180012001800
      2009-12-311250245016502500
      2010-12-311640314021403280
      2011-12-312240404028404480
      2012-12-313140524038406280
      2013-12-313540594043407080
      2014-12-313840654047407680
      2015-12-313960696049607920
      \n", + "
      " + ], + "text/plain": [ + " boy child children girl\n", + "2006-12-31 200 500 300 400\n", + "2007-12-31 500 1100 700 1000\n", + "2008-12-31 900 1800 1200 1800\n", + "2009-12-31 1250 2450 1650 2500\n", + "2010-12-31 1640 3140 2140 3280\n", + "2011-12-31 2240 4040 2840 4480\n", + "2012-12-31 3140 5240 3840 6280\n", + "2013-12-31 3540 5940 4340 7080\n", + "2014-12-31 3840 6540 4740 7680\n", + "2015-12-31 3960 6960 4960 7920" + ] + }, + "execution_count": 201, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.cumsum()" + ] + }, + { + "cell_type": "code", + "execution_count": 202, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "boy 2.680685\n", + "child 2.680685\n", + "children 2.680685\n", + "girl 2.680685\n", + "dtype: float64" + ] + }, + "execution_count": 202, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.kurt()" + ] + }, + { + "cell_type": "code", + "execution_count": 203, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "boy 1.406834\n", + "child 1.406834\n", + "children 1.406834\n", + "girl 1.406834\n", + "dtype: float64" + ] + }, + "execution_count": 203, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.skew()" + ] + }, + { + "cell_type": "code", + "execution_count": 204, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      boychildchildrengirl
      count10.00000010.00000010.00000010.000000
      mean396.000000696.000000496.000000792.000000
      std218.794678218.794678218.794678437.589356
      min120.000000420.000000220.000000240.000000
      25%300.000000600.000000400.000000600.000000
      50%370.000000670.000000470.000000740.000000
      75%400.000000700.000000500.000000800.000000
      max900.0000001200.0000001000.0000001800.000000
      \n", + "
      " + ], + "text/plain": [ + " boy child children girl\n", + "count 10.000000 10.000000 10.000000 10.000000\n", + "mean 396.000000 696.000000 496.000000 792.000000\n", + "std 218.794678 218.794678 218.794678 437.589356\n", + "min 120.000000 420.000000 220.000000 240.000000\n", + "25% 300.000000 600.000000 400.000000 600.000000\n", + "50% 370.000000 670.000000 470.000000 740.000000\n", + "75% 400.000000 700.000000 500.000000 800.000000\n", + "max 900.000000 1200.000000 1000.000000 1800.000000" + ] + }, + "execution_count": 204, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.describe()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3. 查看DataFrame数据" + ] + }, + { + "cell_type": "code", + "execution_count": 205, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      boychildchildrengirl
      2006-12-31200500300400
      2007-12-31300600400600
      2008-12-31400700500800
      2009-12-31350650450700
      2010-12-31390690490780
      \n", + "
      " + ], + "text/plain": [ + " boy child children girl\n", + "2006-12-31 200 500 300 400\n", + "2007-12-31 300 600 400 600\n", + "2008-12-31 400 700 500 800\n", + "2009-12-31 350 650 450 700\n", + "2010-12-31 390 690 490 780" + ] + }, + "execution_count": 205, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 206, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      boychildchildrengirl
      2012-12-31900120010001800
      2013-12-31400700500800
      2014-12-31300600400600
      2015-12-31120420220240
      \n", + "
      " + ], + "text/plain": [ + " boy child children girl\n", + "2012-12-31 900 1200 1000 1800\n", + "2013-12-31 400 700 500 800\n", + "2014-12-31 300 600 400 600\n", + "2015-12-31 120 420 220 240" + ] + }, + "execution_count": 206, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.tail(4)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 与Series类似,一样可以利用head()与tail()查看数据的前几行与后几行。" + ] + }, + { + "cell_type": "code", + "execution_count": 207, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "DatetimeIndex(['2006-12-31', '2007-12-31', '2008-12-31', '2009-12-31',\n", + " '2010-12-31', '2011-12-31', '2012-12-31', '2013-12-31',\n", + " '2014-12-31', '2015-12-31'],\n", + " dtype='datetime64[ns]', freq='A-DEC')" + ] + }, + "execution_count": 207, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.index" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 查看index属性,index也可称为行索引" + ] + }, + { + "cell_type": "code", + "execution_count": 208, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 200, 500, 300, 400],\n", + " [ 300, 600, 400, 600],\n", + " [ 400, 700, 500, 800],\n", + " [ 350, 650, 450, 700],\n", + " [ 390, 690, 490, 780],\n", + " [ 600, 900, 700, 1200],\n", + " [ 900, 1200, 1000, 1800],\n", + " [ 400, 700, 500, 800],\n", + " [ 300, 600, 400, 600],\n", + " [ 120, 420, 220, 240]])" + ] + }, + "execution_count": 208, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.values" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 查看values属性,可见DataFrame对象的values是一个numpy的ndarray类型。" + ] + }, + { + "cell_type": "code", + "execution_count": 209, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['boy', 'child', 'children', 'girl'], dtype='object')" + ] + }, + "execution_count": 209, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.columns" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 查看columns属性,columns也可称为列索引。此时列标签是pandas的Index对象,类似list,其中有个三个元素,类型为`object`,在pandas中,非数字类型一般均为object类型。" + ] + }, + { + "cell_type": "code", + "execution_count": 210, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      2006-12-31 00:00:002007-12-31 00:00:002008-12-31 00:00:002009-12-31 00:00:002010-12-31 00:00:002011-12-31 00:00:002012-12-31 00:00:002013-12-31 00:00:002014-12-31 00:00:002015-12-31 00:00:00
      boy200300400350390600900400300120
      child5006007006506909001200700600420
      children3004005004504907001000500400220
      girl40060080070078012001800800600240
      \n", + "
      " + ], + "text/plain": [ + " 2006-12-31 2007-12-31 2008-12-31 2009-12-31 2010-12-31 \\\n", + "boy 200 300 400 350 390 \n", + "child 500 600 700 650 690 \n", + "children 300 400 500 450 490 \n", + "girl 400 600 800 700 780 \n", + "\n", + " 2011-12-31 2012-12-31 2013-12-31 2014-12-31 2015-12-31 \n", + "boy 600 900 400 300 120 \n", + "child 900 1200 700 600 420 \n", + "children 700 1000 500 400 220 \n", + "girl 1200 1800 800 600 240 " + ] + }, + "execution_count": 210, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dft = df.T\n", + "dft" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 可将DataFrame对象转置。\n", + "- 注意,转置并不改变原DataFrame对象,而是新生成一个DataFrame对象。" + ] + }, + { + "cell_type": "code", + "execution_count": 211, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['boy', 'child', 'children', 'girl'], dtype='object')" + ] + }, + "execution_count": 211, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dft.index" + ] + }, + { + "cell_type": "code", + "execution_count": 212, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "DatetimeIndex(['2006-12-31', '2007-12-31', '2008-12-31', '2009-12-31',\n", + " '2010-12-31', '2011-12-31', '2012-12-31', '2013-12-31',\n", + " '2014-12-31', '2015-12-31'],\n", + " dtype='datetime64[ns]', freq='A-DEC')" + ] + }, + "execution_count": 212, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dft.columns" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 转置后,index与columns的值互换" + ] + }, + { + "cell_type": "code", + "execution_count": 213, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      boychildchildrengirl
      2015-12-31120420220240
      2014-12-31300600400600
      2013-12-31400700500800
      2012-12-31900120010001800
      2011-12-316009007001200
      2010-12-31390690490780
      2009-12-31350650450700
      2008-12-31400700500800
      2007-12-31300600400600
      2006-12-31200500300400
      \n", + "
      " + ], + "text/plain": [ + " boy child children girl\n", + "2015-12-31 120 420 220 240\n", + "2014-12-31 300 600 400 600\n", + "2013-12-31 400 700 500 800\n", + "2012-12-31 900 1200 1000 1800\n", + "2011-12-31 600 900 700 1200\n", + "2010-12-31 390 690 490 780\n", + "2009-12-31 350 650 450 700\n", + "2008-12-31 400 700 500 800\n", + "2007-12-31 300 600 400 600\n", + "2006-12-31 200 500 300 400" + ] + }, + "execution_count": 213, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.sort_index(ascending = False) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 根据索引进行排序,默认是升序,并对行索引进行排序。定义逐行变化方向为0轴方向:axis=0\n", + "- `ascending = False`,使之降序排列" + ] + }, + { + "cell_type": "code", + "execution_count": 214, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      girlchildrenchildboy
      2006-12-31400300500200
      2007-12-31600400600300
      2008-12-31800500700400
      2009-12-31700450650350
      2010-12-31780490690390
      2011-12-311200700900600
      2012-12-31180010001200900
      2013-12-31800500700400
      2014-12-31600400600300
      2015-12-31240220420120
      \n", + "
      " + ], + "text/plain": [ + " girl children child boy\n", + "2006-12-31 400 300 500 200\n", + "2007-12-31 600 400 600 300\n", + "2008-12-31 800 500 700 400\n", + "2009-12-31 700 450 650 350\n", + "2010-12-31 780 490 690 390\n", + "2011-12-31 1200 700 900 600\n", + "2012-12-31 1800 1000 1200 900\n", + "2013-12-31 800 500 700 400\n", + "2014-12-31 600 400 600 300\n", + "2015-12-31 240 220 420 120" + ] + }, + "execution_count": 214, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.sort_index(axis = 1, ascending = False) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 将参数axis设为1,排序即按照列索引进行排序" + ] + }, + { + "cell_type": "code", + "execution_count": 215, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      boychildchildrengirl
      2015-12-31120420220240
      2006-12-31200500300400
      2007-12-31300600400600
      2014-12-31300600400600
      2009-12-31350650450700
      2010-12-31390690490780
      2008-12-31400700500800
      2013-12-31400700500800
      2011-12-316009007001200
      2012-12-31900120010001800
      \n", + "
      " + ], + "text/plain": [ + " boy child children girl\n", + "2015-12-31 120 420 220 240\n", + "2006-12-31 200 500 300 400\n", + "2007-12-31 300 600 400 600\n", + "2014-12-31 300 600 400 600\n", + "2009-12-31 350 650 450 700\n", + "2010-12-31 390 690 490 780\n", + "2008-12-31 400 700 500 800\n", + "2013-12-31 400 700 500 800\n", + "2011-12-31 600 900 700 1200\n", + "2012-12-31 900 1200 1000 1800" + ] + }, + "execution_count": 215, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.sort_values(by='boy')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 根据值进行排序,如是根据某对应列的值进行排序,需要在参数by中指定数据列索引" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 4. 选择DataFrame数据\n", + "**4.1 列选择**" + ] + }, + { + "cell_type": "code", + "execution_count": 216, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "2006-12-31 200\n", + "2007-12-31 300\n", + "2008-12-31 400\n", + "2009-12-31 350\n", + "2010-12-31 390\n", + "2011-12-31 600\n", + "2012-12-31 900\n", + "2013-12-31 400\n", + "2014-12-31 300\n", + "2015-12-31 120\n", + "Freq: A-DEC, Name: boy, dtype: int32" + ] + }, + "execution_count": 216, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df['boy']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用列索引选择一列,将返回该列,且为Series对象。也可以用`df.boy`来访问,效果相同。" + ] + }, + { + "cell_type": "code", + "execution_count": 217, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      boy
      2006-12-31200
      2007-12-31300
      2008-12-31400
      2009-12-31350
      2010-12-31390
      2011-12-31600
      2012-12-31900
      2013-12-31400
      2014-12-31300
      2015-12-31120
      \n", + "
      " + ], + "text/plain": [ + " boy\n", + "2006-12-31 200\n", + "2007-12-31 300\n", + "2008-12-31 400\n", + "2009-12-31 350\n", + "2010-12-31 390\n", + "2011-12-31 600\n", + "2012-12-31 900\n", + "2013-12-31 400\n", + "2014-12-31 300\n", + "2015-12-31 120" + ] + }, + "execution_count": 217, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[['boy']]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 指定一个列标签,放入list中,可以获取对应colums标签的列,返回DataFrame对象。" + ] + }, + { + "cell_type": "code", + "execution_count": 218, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      boychildren
      2006-12-31200300
      2007-12-31300400
      2008-12-31400500
      2009-12-31350450
      2010-12-31390490
      2011-12-31600700
      2012-12-319001000
      2013-12-31400500
      2014-12-31300400
      2015-12-31120220
      \n", + "
      " + ], + "text/plain": [ + " boy children\n", + "2006-12-31 200 300\n", + "2007-12-31 300 400\n", + "2008-12-31 400 500\n", + "2009-12-31 350 450\n", + "2010-12-31 390 490\n", + "2011-12-31 600 700\n", + "2012-12-31 900 1000\n", + "2013-12-31 400 500\n", + "2014-12-31 300 400\n", + "2015-12-31 120 220" + ] + }, + "execution_count": 218, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[['boy','children']]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用指定多个列标签colums的list,可以获取对应colums标签的列,返回DataFrame对象。" + ] + }, + { + "cell_type": "code", + "execution_count": 219, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      boychildren
      2006-12-31200300
      2007-12-31300400
      2008-12-31400500
      2009-12-31350450
      2010-12-31390490
      2011-12-31600700
      2012-12-319001000
      2013-12-31400500
      2014-12-31300400
      2015-12-31120220
      \n", + "
      " + ], + "text/plain": [ + " boy children\n", + "2006-12-31 200 300\n", + "2007-12-31 300 400\n", + "2008-12-31 400 500\n", + "2009-12-31 350 450\n", + "2010-12-31 390 490\n", + "2011-12-31 600 700\n", + "2012-12-31 900 1000\n", + "2013-12-31 400 500\n", + "2014-12-31 300 400\n", + "2015-12-31 120 220" + ] + }, + "execution_count": 219, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[[0,2]]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用代表列整数索引的list,可以获取对应colums标签的列,返回DataFrame对象。" + ] + }, + { + "cell_type": "code", + "execution_count": 220, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "2006-12-31 200\n", + "2007-12-31 300\n", + "2008-12-31 400\n", + "2009-12-31 350\n", + "2010-12-31 390\n", + "2011-12-31 600\n", + "2012-12-31 900\n", + "2013-12-31 400\n", + "2014-12-31 300\n", + "2015-12-31 120\n", + "Freq: A-DEC, Name: boy, dtype: int32" + ] + }, + "execution_count": 220, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + " df.loc[:,'boy']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 也可以利用DataFrame的loc属性进行列选取\n", + "- loc属性主要通过标签进行数据选取\n", + "- 其中第一个位置参数表示行方向(即axis=0)元素,为`:`即为全部选取\n", + "- 第二个位置参数表示列方向(即axis=1)元素,选取当前指定列标签的数据\n", + "- 返回一个Series对象" + ] + }, + { + "cell_type": "code", + "execution_count": 221, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      boy
      2006-12-31200
      2007-12-31300
      2008-12-31400
      2009-12-31350
      2010-12-31390
      2011-12-31600
      2012-12-31900
      2013-12-31400
      2014-12-31300
      2015-12-31120
      \n", + "
      " + ], + "text/plain": [ + " boy\n", + "2006-12-31 200\n", + "2007-12-31 300\n", + "2008-12-31 400\n", + "2009-12-31 350\n", + "2010-12-31 390\n", + "2011-12-31 600\n", + "2012-12-31 900\n", + "2013-12-31 400\n", + "2014-12-31 300\n", + "2015-12-31 120" + ] + }, + "execution_count": 221, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + " df.loc[:,['boy']]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 与前类似,如在list中指定列标签,则返回一个DataFrame对象" + ] + }, + { + "cell_type": "code", + "execution_count": 222, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      boygirl
      2006-12-31200400
      2007-12-31300600
      2008-12-31400800
      2009-12-31350700
      2010-12-31390780
      2011-12-316001200
      2012-12-319001800
      2013-12-31400800
      2014-12-31300600
      2015-12-31120240
      \n", + "
      " + ], + "text/plain": [ + " boy girl\n", + "2006-12-31 200 400\n", + "2007-12-31 300 600\n", + "2008-12-31 400 800\n", + "2009-12-31 350 700\n", + "2010-12-31 390 780\n", + "2011-12-31 600 1200\n", + "2012-12-31 900 1800\n", + "2013-12-31 400 800\n", + "2014-12-31 300 600\n", + "2015-12-31 120 240" + ] + }, + "execution_count": 222, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.loc[:,['boy', 'girl']]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 与前类似,可以选择多个列,返回一个DataFrame对象" + ] + }, + { + "cell_type": "code", + "execution_count": 223, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      boychildchildrengirl
      2006-12-31200500300400
      2007-12-31300600400600
      2008-12-31400700500800
      2009-12-31350650450700
      2010-12-31390690490780
      2011-12-316009007001200
      2012-12-31900120010001800
      2013-12-31400700500800
      2014-12-31300600400600
      2015-12-31120420220240
      \n", + "
      " + ], + "text/plain": [ + " boy child children girl\n", + "2006-12-31 200 500 300 400\n", + "2007-12-31 300 600 400 600\n", + "2008-12-31 400 700 500 800\n", + "2009-12-31 350 650 450 700\n", + "2010-12-31 390 690 490 780\n", + "2011-12-31 600 900 700 1200\n", + "2012-12-31 900 1200 1000 1800\n", + "2013-12-31 400 700 500 800\n", + "2014-12-31 300 600 400 600\n", + "2015-12-31 120 420 220 240" + ] + }, + "execution_count": 223, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.loc[:,'boy': 'girl']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 可以利用列索引进行切片选取\n", + "- 注意切片是两端包含\n", + "- 注意切片不需要在list中" + ] + }, + { + "cell_type": "code", + "execution_count": 224, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "2006-12-31 200\n", + "2007-12-31 300\n", + "2008-12-31 400\n", + "2009-12-31 350\n", + "2010-12-31 390\n", + "2011-12-31 600\n", + "2012-12-31 900\n", + "2013-12-31 400\n", + "2014-12-31 300\n", + "2015-12-31 120\n", + "Freq: A-DEC, Name: boy, dtype: int32" + ] + }, + "execution_count": 224, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.iloc[:,0]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 还可以利用DataFrame的iloc属性进行列选取\n", + "- iloc属性也称为位置(position)属性,主要通过位置(即对应整数索引)进行数据选取\n", + "- 其中第一个位置参数仍然表示行方向(即axis=0)元素,为`:`即为全部选取\n", + "- 第二个位置参数仍然表示列方向(即axis=1)元素,选取当前指定列标签的数据\n", + "- 返回一个Series对象" + ] + }, + { + "cell_type": "code", + "execution_count": 225, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      child
      2006-12-31500
      2007-12-31600
      2008-12-31700
      2009-12-31650
      2010-12-31690
      2011-12-31900
      2012-12-311200
      2013-12-31700
      2014-12-31600
      2015-12-31420
      \n", + "
      " + ], + "text/plain": [ + " child\n", + "2006-12-31 500\n", + "2007-12-31 600\n", + "2008-12-31 700\n", + "2009-12-31 650\n", + "2010-12-31 690\n", + "2011-12-31 900\n", + "2012-12-31 1200\n", + "2013-12-31 700\n", + "2014-12-31 600\n", + "2015-12-31 420" + ] + }, + "execution_count": 225, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.iloc[:,[1]]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 与前类似,如在list中指定列位置,则返回一个DataFrame对象" + ] + }, + { + "cell_type": "code", + "execution_count": 226, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      childchildren
      2006-12-31500300
      2007-12-31600400
      2008-12-31700500
      2009-12-31650450
      2010-12-31690490
      2011-12-31900700
      2012-12-3112001000
      2013-12-31700500
      2014-12-31600400
      2015-12-31420220
      \n", + "
      " + ], + "text/plain": [ + " child children\n", + "2006-12-31 500 300\n", + "2007-12-31 600 400\n", + "2008-12-31 700 500\n", + "2009-12-31 650 450\n", + "2010-12-31 690 490\n", + "2011-12-31 900 700\n", + "2012-12-31 1200 1000\n", + "2013-12-31 700 500\n", + "2014-12-31 600 400\n", + "2015-12-31 420 220" + ] + }, + "execution_count": 226, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.iloc[:,[1,2]]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 与前类似,可以根据位置选择多个列,返回一个DataFrame对象" + ] + }, + { + "cell_type": "code", + "execution_count": 227, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      boychild
      2006-12-31200500
      2007-12-31300600
      2008-12-31400700
      2009-12-31350650
      2010-12-31390690
      2011-12-31600900
      2012-12-319001200
      2013-12-31400700
      2014-12-31300600
      2015-12-31120420
      \n", + "
      " + ], + "text/plain": [ + " boy child\n", + "2006-12-31 200 500\n", + "2007-12-31 300 600\n", + "2008-12-31 400 700\n", + "2009-12-31 350 650\n", + "2010-12-31 390 690\n", + "2011-12-31 600 900\n", + "2012-12-31 900 1200\n", + "2013-12-31 400 700\n", + "2014-12-31 300 600\n", + "2015-12-31 120 420" + ] + }, + "execution_count": 227, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.iloc[:,0:2]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 与前类似,可以通过列位置进行切片选择多个列,返回一个DataFrame对象" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**4.2 行选择**" + ] + }, + { + "cell_type": "code", + "execution_count": 228, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "boy 200\n", + "child 500\n", + "children 300\n", + "girl 400\n", + "Name: 2006-12-31 00:00:00, dtype: int32" + ] + }, + "execution_count": 228, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.loc[years[0]]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用DataFrame的loc属性也可以进行行选取\n", + "- loc属性主要通过标签进行数据选取\n", + "- 其中第一个位置参数表示行方向(即axis=0)元素\n", + "- 第二个位置参数表示列方向(即axis=1)元素,不指定时,默认为全部选取\n", + "- 返回一个Series对象" + ] + }, + { + "cell_type": "code", + "execution_count": 229, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      boychildchildrengirl
      2006-12-31200500300400
      \n", + "
      " + ], + "text/plain": [ + " boy child children girl\n", + "2006-12-31 200 500 300 400" + ] + }, + "execution_count": 229, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.loc[[years[0]]]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 与前类似,如在list中指定行标签,则可选择该行,并返回一个DataFrame对象" + ] + }, + { + "cell_type": "code", + "execution_count": 230, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      boychildchildrengirl
      2006-12-31200500300400
      2008-12-31400700500800
      \n", + "
      " + ], + "text/plain": [ + " boy child children girl\n", + "2006-12-31 200 500 300 400\n", + "2008-12-31 400 700 500 800" + ] + }, + "execution_count": 230, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.loc[[years[0], years[2]]]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 与前类似,如在list中指定多个行标签,则可选择多行,并返回一个DataFrame对象" + ] + }, + { + "cell_type": "code", + "execution_count": 231, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      boychildchildrengirl
      2006-12-31200500300400
      2007-12-31300600400600
      2008-12-31400700500800
      \n", + "
      " + ], + "text/plain": [ + " boy child children girl\n", + "2006-12-31 200 500 300 400\n", + "2007-12-31 300 600 400 600\n", + "2008-12-31 400 700 500 800" + ] + }, + "execution_count": 231, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.loc[years[0]: years[2]]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 与前类似,还可以利用标签切片来选择多行,并返回一个DataFrame对象" + ] + }, + { + "cell_type": "code", + "execution_count": 232, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "boy 200\n", + "child 500\n", + "children 300\n", + "girl 400\n", + "Name: 2006-12-31 00:00:00, dtype: int32" + ] + }, + "execution_count": 232, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.iloc[0]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 还可以利用DataFrame的iloc属性进行行选取\n", + "- iloc属性也称为位置(position)属性,主要通过位置(即对应整数索引)进行数据选取\n", + "- 其中第一个位置参数仍然表示行方向(即axis=0)元素\n", + "- 第二个位置参数仍然表示列方向(即axis=1)元素,不指定时,默认为全部选取\n", + "- 返回一个Series对象" + ] + }, + { + "cell_type": "code", + "execution_count": 233, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      boychildchildrengirl
      2006-12-31200500300400
      \n", + "
      " + ], + "text/plain": [ + " boy child children girl\n", + "2006-12-31 200 500 300 400" + ] + }, + "execution_count": 233, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.iloc[[0]]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 与前类似,如在list中指定行位置,则返回一个DataFrame对象" + ] + }, + { + "cell_type": "code", + "execution_count": 234, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      boychildchildrengirl
      2006-12-31200500300400
      2007-12-31300600400600
      2008-12-31400700500800
      \n", + "
      " + ], + "text/plain": [ + " boy child children girl\n", + "2006-12-31 200 500 300 400\n", + "2007-12-31 300 600 400 600\n", + "2008-12-31 400 700 500 800" + ] + }, + "execution_count": 234, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.iloc[[0,1,2]]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 与前类似,可以根据位置选择多个行,返回一个DataFrame对象" + ] + }, + { + "cell_type": "code", + "execution_count": 235, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      boychildchildrengirl
      2007-12-31300600400600
      2008-12-31400700500800
      \n", + "
      " + ], + "text/plain": [ + " boy child children girl\n", + "2007-12-31 300 600 400 600\n", + "2008-12-31 400 700 500 800" + ] + }, + "execution_count": 235, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.iloc[1:3]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 与前类似,可以根据位置进行切片选择多个行,返回一个DataFrame对象" + ] + }, + { + "cell_type": "code", + "execution_count": 236, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      boychildchildrengirl
      2006-12-31200500300400
      2007-12-31300600400600
      2008-12-31400700500800
      \n", + "
      " + ], + "text/plain": [ + " boy child children girl\n", + "2006-12-31 200 500 300 400\n", + "2007-12-31 300 600 400 600\n", + "2008-12-31 400 700 500 800" + ] + }, + "execution_count": 236, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[0:3]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 可以利用行切片,选取多行数据,返回一个DataFrame对象\n", + "- 个人觉得容易与选取列数据的混淆,不建议使用" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**4.3 选择区块**" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**4.3.1 利用loc**" + ] + }, + { + "cell_type": "code", + "execution_count": 237, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "200" + ] + }, + "execution_count": 237, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.loc[years[0],'boy']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用loc,可以选择指定行标签、列标签的数据" + ] + }, + { + "cell_type": "code", + "execution_count": 238, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "boy 200\n", + "Name: 2006-12-31 00:00:00, dtype: int32" + ] + }, + "execution_count": 238, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.loc[years[0],['boy']]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用loc,指定行标签,在list中指定一个列标签,可以选择指定行列的数据\n", + "- 返回一个Series" + ] + }, + { + "cell_type": "code", + "execution_count": 239, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      boy
      2006-12-31200
      \n", + "
      " + ], + "text/plain": [ + " boy\n", + "2006-12-31 200" + ] + }, + "execution_count": 239, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.loc[[years[0]],['boy']]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用loc,在list中指定一个行标签,在list中指定一个列标签,可以选择指定行列的数据\n", + "- 返回一个DataFrame对象" + ] + }, + { + "cell_type": "code", + "execution_count": 240, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "boy 200\n", + "girl 400\n", + "Name: 2006-12-31 00:00:00, dtype: int32" + ] + }, + "execution_count": 240, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.loc[years[0],['boy', 'girl']]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用loc,指定行标签,在list中指定多个列标签,可以选择指定行的多个列的数据\n", + "- 返回一个Series" + ] + }, + { + "cell_type": "code", + "execution_count": 241, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "boy 200\n", + "child 500\n", + "children 300\n", + "girl 400\n", + "Name: 2006-12-31 00:00:00, dtype: int32" + ] + }, + "execution_count": 241, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.loc[years[0],'boy':'girl']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 与前类似,还可以切片选择给定行的多列数据\n", + "- 返回一个Series" + ] + }, + { + "cell_type": "code", + "execution_count": 242, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      boychildchildrengirl
      2006-12-31200500300400
      \n", + "
      " + ], + "text/plain": [ + " boy child children girl\n", + "2006-12-31 200 500 300 400" + ] + }, + "execution_count": 242, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.loc[[years[0]],'boy':'girl']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 与前类似,但是将返回一个DataFrame对象" + ] + }, + { + "cell_type": "code", + "execution_count": 243, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      boychildchildrengirl
      2006-12-31200500300400
      2007-12-31300600400600
      2008-12-31400700500800
      \n", + "
      " + ], + "text/plain": [ + " boy child children girl\n", + "2006-12-31 200 500 300 400\n", + "2007-12-31 300 600 400 600\n", + "2008-12-31 400 700 500 800" + ] + }, + "execution_count": 243, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.loc[years[0]:years[2],'boy':'girl']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 行列标签切片,选择对应数据\n", + "- 利用loc方式的行与列均可以如上类似处理" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**4.3.2 利用iloc**\n", + "\n", + "利用iloc进行区域选择的方式与loc基本类似,只是利用位置而非标签信息进行选取,请参照前面理解" + ] + }, + { + "cell_type": "code", + "execution_count": 244, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "200" + ] + }, + "execution_count": 244, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.iloc[0,0]" + ] + }, + { + "cell_type": "code", + "execution_count": 245, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "boy 200\n", + "child 500\n", + "children 300\n", + "Name: 2006-12-31 00:00:00, dtype: int32" + ] + }, + "execution_count": 245, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.iloc[0,[0,1,2]]" + ] + }, + { + "cell_type": "code", + "execution_count": 246, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "2006-12-31 200\n", + "2007-12-31 300\n", + "2008-12-31 400\n", + "Freq: A-DEC, Name: boy, dtype: int32" + ] + }, + "execution_count": 246, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.iloc[[0,1,2],0]" + ] + }, + { + "cell_type": "code", + "execution_count": 247, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      childchildren
      2006-12-31500300
      2007-12-31600400
      2008-12-31700500
      \n", + "
      " + ], + "text/plain": [ + " child children\n", + "2006-12-31 500 300\n", + "2007-12-31 600 400\n", + "2008-12-31 700 500" + ] + }, + "execution_count": 247, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.iloc[[0,1,2],[1, 2]]" + ] + }, + { + "cell_type": "code", + "execution_count": 248, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      childchildren
      2006-12-31500300
      2007-12-31600400
      \n", + "
      " + ], + "text/plain": [ + " child children\n", + "2006-12-31 500 300\n", + "2007-12-31 600 400" + ] + }, + "execution_count": 248, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.iloc[0:2,[1, 2]]" + ] + }, + { + "cell_type": "code", + "execution_count": 249, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      boychildchildren
      2006-12-31200500300
      2007-12-31300600400
      2008-12-31400700500
      2009-12-31350650450
      2010-12-31390690490
      \n", + "
      " + ], + "text/plain": [ + " boy child children\n", + "2006-12-31 200 500 300\n", + "2007-12-31 300 600 400\n", + "2008-12-31 400 700 500\n", + "2009-12-31 350 650 450\n", + "2010-12-31 390 690 490" + ] + }, + "execution_count": 249, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.iloc[0:5,0:3]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**4.3.3 利用iat选择单个元素**" + ] + }, + { + "cell_type": "code", + "execution_count": 250, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "600" + ] + }, + "execution_count": 250, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.iat[1,1]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 在以上进行行、列选取的各类方法中,推荐使用loc及iloc方法,虽然稍显繁琐,但是逻辑较为严密,且性能更优。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 5. 条件选择DataFrame数据(布尔索引)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 对DataFrame按照条件来选择数据较为方便记忆的方式是:`对象[布尔索引]`,其中对象可以是整个DataFrame对象,也可以是DataFrame经过前一部分选择出的列、行或者区块。注意布尔索引要与选择出的数据对齐。\n", + "### 达到数据选择结果的方法较为多样,但为避免造成记忆及使用的混乱,其他条件选择数据的方式本教程不予介绍。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 5.1 列" + ] + }, + { + "cell_type": "code", + "execution_count": 251, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "2006-12-31 False\n", + "2007-12-31 False\n", + "2008-12-31 False\n", + "2009-12-31 False\n", + "2010-12-31 False\n", + "2011-12-31 True\n", + "2012-12-31 True\n", + "2013-12-31 False\n", + "2014-12-31 False\n", + "2015-12-31 False\n", + "Freq: A-DEC, Name: boy, dtype: bool" + ] + }, + "execution_count": 251, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.boy > 400" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 与Series中的类似,是每个元素比较后的布尔值\n", + "- 返回一个Series" + ] + }, + { + "cell_type": "code", + "execution_count": 252, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      boychildchildrengirl
      2011-12-316009007001200
      2012-12-31900120010001800
      \n", + "
      " + ], + "text/plain": [ + " boy child children girl\n", + "2011-12-31 600 900 700 1200\n", + "2012-12-31 900 1200 1000 1800" + ] + }, + "execution_count": 252, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + " df[df.boy > 400]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 可利用DataFrame对象的某一列数据,进行布尔运算,根据布尔运算的结果过滤数据\n", + "- 返回一个DataFrame对象" + ] + }, + { + "cell_type": "code", + "execution_count": 253, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      boychildchildrengirl
      2011-12-316009007001200
      2012-12-31900120010001800
      \n", + "
      " + ], + "text/plain": [ + " boy child children girl\n", + "2011-12-31 600 900 700 1200\n", + "2012-12-31 900 1200 1000 1800" + ] + }, + "execution_count": 253, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[(df.boy >300) & (df.girl > 900)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 可利用DataFrame对象的多列数据,进行多个布尔运算,注意用括号括起每个部分,表示`and`操作用`&`,'or'用`|`,`not`用`~`。\n", + "- 返回一个DataFrame对象" + ] + }, + { + "cell_type": "code", + "execution_count": 254, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "2008-12-31 800\n", + "2009-12-31 700\n", + "2010-12-31 780\n", + "2011-12-31 1200\n", + "2012-12-31 1800\n", + "2013-12-31 800\n", + "Freq: A-DEC, Name: girl, dtype: int32" + ] + }, + "execution_count": 254, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df['girl'][df.boy >300]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 选择df中的一列,再根据布尔索引进行过滤选择\n", + "- 返回一个Series" + ] + }, + { + "cell_type": "code", + "execution_count": 255, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      girl
      2008-12-31800
      2009-12-31700
      2010-12-31780
      2011-12-311200
      2012-12-311800
      2013-12-31800
      \n", + "
      " + ], + "text/plain": [ + " girl\n", + "2008-12-31 800\n", + "2009-12-31 700\n", + "2010-12-31 780\n", + "2011-12-31 1200\n", + "2012-12-31 1800\n", + "2013-12-31 800" + ] + }, + "execution_count": 255, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[['girl']][df.boy >300]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 与前类似,但返回一个DataFrame对象" + ] + }, + { + "cell_type": "code", + "execution_count": 256, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      girlchild
      2011-12-311200900
      2012-12-3118001200
      \n", + "
      " + ], + "text/plain": [ + " girl child\n", + "2011-12-31 1200 900\n", + "2012-12-31 1800 1200" + ] + }, + "execution_count": 256, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[['girl', 'child']][(df.boy >300) & (df.girl > 900)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 选择多列,并用组合的布尔索引进行数据选择" + ] + }, + { + "cell_type": "code", + "execution_count": 257, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "2006-12-31 False\n", + "2007-12-31 False\n", + "2008-12-31 True\n", + "2009-12-31 True\n", + "2010-12-31 False\n", + "2011-12-31 False\n", + "2012-12-31 False\n", + "2013-12-31 True\n", + "2014-12-31 False\n", + "2015-12-31 False\n", + "Freq: A-DEC, Name: girl, dtype: bool" + ] + }, + "execution_count": 257, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df['girl'].isin([700,800])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 对Series对象应用`isin()`函数,是判断该Series中的values是否在给定的数据表中\n", + "- 返回一个都是布尔值的Series" + ] + }, + { + "cell_type": "code", + "execution_count": 258, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      boychildchildrengirl
      2008-12-31400700500800
      2009-12-31350650450700
      2013-12-31400700500800
      \n", + "
      " + ], + "text/plain": [ + " boy child children girl\n", + "2008-12-31 400 700 500 800\n", + "2009-12-31 350 650 450 700\n", + "2013-12-31 400 700 500 800" + ] + }, + "execution_count": 258, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[df['girl'].isin([700,800])]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用isin()函数,选择某列数据进行数据过滤" + ] + }, + { + "cell_type": "code", + "execution_count": 259, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      girlchildren
      2008-12-31800500
      2009-12-31700450
      2013-12-31800500
      \n", + "
      " + ], + "text/plain": [ + " girl children\n", + "2008-12-31 800 500\n", + "2009-12-31 700 450\n", + "2013-12-31 800 500" + ] + }, + "execution_count": 259, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[['girl', 'children']][df['girl'].isin([700,800])]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 选择后利用isin生成的布尔索引进行数据选择" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 5.2 行\n", + "\n", + "- pandas以布尔索引选择行数据的功能至今较弱" + ] + }, + { + "cell_type": "code", + "execution_count": 260, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "boy False\n", + "child True\n", + "children False\n", + "girl True\n", + "Name: 2007-12-31 00:00:00, dtype: bool" + ] + }, + "execution_count": 260, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.loc[years[1]]>500" + ] + }, + { + "cell_type": "code", + "execution_count": 261, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "child 500\n", + "girl 400\n", + "Name: 2006-12-31 00:00:00, dtype: int32" + ] + }, + "execution_count": 261, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.loc[years[0]][df.loc[years[1]]>500]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 但是暂时还无法将以往行对象选择后,应用`对象[行条件]`的方式进行条件数据选取,个人认为是pandas设计没有考虑周全的地方。虽然布尔索引选择行数据的应用场景较少。" + ] + }, + { + "cell_type": "code", + "execution_count": 262, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      childgirl
      2006-12-31500400
      2007-12-31600600
      \n", + "
      " + ], + "text/plain": [ + " child girl\n", + "2006-12-31 500 400\n", + "2007-12-31 600 600" + ] + }, + "execution_count": 262, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.T[[years[0],years[1]]][df.loc[years[2]]>500].T" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 如确有需求,可以对DataFrame对象进行转置,然后利用列布尔选择,再转置" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.0" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/chapter4/pandas_Tutorial_3(group).ipynb b/chapter4/pandas_Tutorial_3(group).ipynb new file mode 100644 index 000000000..71e0a80ec --- /dev/null +++ b/chapter4/pandas_Tutorial_3(group).ipynb @@ -0,0 +1,3653 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Pandas统计分析入门(3)\n", + "- 转载注明转自:https://github.com/liupengyuan/\n", + "- ## 数据分组技术\n", + "\n", + "---" + ] + }, + { + "cell_type": "code", + "execution_count": 161, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "from pandas import Series, DataFrame\n", + "import pandas as pd\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import seaborn as sns" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 数据分组技术\n", + "\n", + "- 多层索引、数据分组、计算、合并、处理缺失数据、输入输出" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1. 多层索引" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**1.1 Series多层索引**" + ] + }, + { + "cell_type": "code", + "execution_count": 162, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "a 0 -0.849212\n", + " 1 -1.117469\n", + " 2 0.472500\n", + "b 0 -1.272573\n", + " 1 0.252942\n", + " 2 0.360228\n", + "c 0 0.425634\n", + " 1 -0.674811\n", + "d 0 1.335875\n", + " 1 -0.228149\n", + "dtype: float64" + ] + }, + "execution_count": 162, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data = Series(np.random.randn(10),index=[['a','a','a','b','b','b','c','c','d','d'],[0,1,2,0,1,2,0,1,0,1]])\n", + "data" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- `index`参数中有两个list,其中第一个为外层索引,第二个为内层索引" + ] + }, + { + "cell_type": "code", + "execution_count": 163, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "MultiIndex(levels=[['a', 'b', 'c', 'd'], [0, 1, 2]],\n", + " labels=[[0, 0, 0, 1, 1, 1, 2, 2, 3, 3], [0, 1, 2, 0, 1, 2, 0, 1, 0, 1]])" + ] + }, + "execution_count": 163, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.index" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 查看index发现,有两个层次的索引,索引list分别为['a', 'b', 'c', 'd'], [0, 1, 2],各位置元素对应的索引标签为:[0, 0, 0, 1, 1, 1, 2, 2, 3, 3], [0, 1, 2, 0, 1, 2, 0, 1, 0, 1],以索引标签在索引list中的位置来记录。" + ] + }, + { + "cell_type": "code", + "execution_count": 164, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0 -1.272573\n", + "1 0.252942\n", + "2 0.360228\n", + "dtype: float64" + ] + }, + "execution_count": 164, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data['b']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 外层索引进行元素选取" + ] + }, + { + "cell_type": "code", + "execution_count": 165, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "a 0 -0.849212\n", + " 1 -1.117469\n", + " 2 0.472500\n", + "b 0 -1.272573\n", + " 1 0.252942\n", + " 2 0.360228\n", + "c 0 0.425634\n", + " 1 -0.674811\n", + "dtype: float64" + ] + }, + "execution_count": 165, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data['a':'c']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 外层标签切片" + ] + }, + { + "cell_type": "code", + "execution_count": 166, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "a 0 -0.849212\n", + " 1 -1.117469\n", + " 2 0.472500\n", + "c 0 0.425634\n", + " 1 -0.674811\n", + "dtype: float64" + ] + }, + "execution_count": 166, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data[['a','c']]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 选取外层多个标签" + ] + }, + { + "cell_type": "code", + "execution_count": 167, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "a -1.117469\n", + "b 0.252942\n", + "c -0.674811\n", + "d -0.228149\n", + "dtype: float64" + ] + }, + "execution_count": 167, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data[:,1]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 选取全部外层索引,且内层索引为1的元素\n", + "- 返回一个Series" + ] + }, + { + "cell_type": "code", + "execution_count": 168, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "-0.84921151400187134" + ] + }, + "execution_count": 168, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data['a',0]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 选取某外层索引,且内存索引为0的元素" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 注意,目前多层索引并不支持形如data['a',:]这种符合逻辑的形式,个人认为可能也是设计缺陷之一" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "** 2.DataFrame多层索引** " + ] + }, + { + "cell_type": "code", + "execution_count": 169, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      beijingshanghai
      boygirlboy
      a1-0.226582-0.858561-1.849417
      20.653603-1.096843-1.113718
      b1-1.196253-2.840656-2.057308
      2-0.758351-1.166275-0.464505
      c11.419848-1.046008-1.126064
      2-1.6131541.410900-1.241607
      \n", + "
      " + ], + "text/plain": [ + " beijing shanghai\n", + " boy girl boy\n", + "a 1 -0.226582 -0.858561 -1.849417\n", + " 2 0.653603 -1.096843 -1.113718\n", + "b 1 -1.196253 -2.840656 -2.057308\n", + " 2 -0.758351 -1.166275 -0.464505\n", + "c 1 1.419848 -1.046008 -1.126064\n", + " 2 -1.613154 1.410900 -1.241607" + ] + }, + "execution_count": 169, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = DataFrame(np.random.randn(6,3), \n", + " index = [['a','a','b','b','c','c'],[1,2,1,2,1,2]], \n", + " columns = [['beijing','beijing','shanghai'],['boy','girl','boy']])\n", + "df" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- DataFrame可以在两个轴都有多层索引" + ] + }, + { + "cell_type": "code", + "execution_count": 170, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      boygirl
      a1-0.226582-0.858561
      20.653603-1.096843
      b1-1.196253-2.840656
      2-0.758351-1.166275
      c11.419848-1.046008
      2-1.6131541.410900
      \n", + "
      " + ], + "text/plain": [ + " boy girl\n", + "a 1 -0.226582 -0.858561\n", + " 2 0.653603 -1.096843\n", + "b 1 -1.196253 -2.840656\n", + " 2 -0.758351 -1.166275\n", + "c 1 1.419848 -1.046008\n", + " 2 -1.613154 1.410900" + ] + }, + "execution_count": 170, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df['beijing']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 通过外层索引选择列数据" + ] + }, + { + "cell_type": "code", + "execution_count": 171, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      beijingshanghai
      boygirlboy
      a1-0.226582-0.858561-1.849417
      20.653603-1.096843-1.113718
      b1-1.196253-2.840656-2.057308
      2-0.758351-1.166275-0.464505
      c11.419848-1.046008-1.126064
      2-1.6131541.410900-1.241607
      \n", + "
      " + ], + "text/plain": [ + " beijing shanghai\n", + " boy girl boy\n", + "a 1 -0.226582 -0.858561 -1.849417\n", + " 2 0.653603 -1.096843 -1.113718\n", + "b 1 -1.196253 -2.840656 -2.057308\n", + " 2 -0.758351 -1.166275 -0.464505\n", + "c 1 1.419848 -1.046008 -1.126064\n", + " 2 -1.613154 1.410900 -1.241607" + ] + }, + "execution_count": 171, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[['beijing','shanghai']]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 通过外层多个标签选取列数据" + ] + }, + { + "cell_type": "code", + "execution_count": 172, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "a 1 -0.226582\n", + " 2 0.653603\n", + "b 1 -1.196253\n", + " 2 -0.758351\n", + "c 1 1.419848\n", + " 2 -1.613154\n", + "Name: boy, dtype: float64" + ] + }, + "execution_count": 172, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df['beijing']['boy']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 外层索引选取列后再根据列内层标签选取列数据" + ] + }, + { + "cell_type": "code", + "execution_count": 173, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      beijingshanghai
      boygirlboy
      1-0.226582-0.858561-1.849417
      20.653603-1.096843-1.113718
      \n", + "
      " + ], + "text/plain": [ + " beijing shanghai\n", + " boy girl boy\n", + "1 -0.226582 -0.858561 -1.849417\n", + "2 0.653603 -1.096843 -1.113718" + ] + }, + "execution_count": 173, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.loc['a',:]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用loc及外层行索引选择行数据" + ] + }, + { + "cell_type": "code", + "execution_count": 174, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      boygirl
      a1-0.226582-0.858561
      20.653603-1.096843
      b1-1.196253-2.840656
      2-0.758351-1.166275
      \n", + "
      " + ], + "text/plain": [ + " boy girl\n", + "a 1 -0.226582 -0.858561\n", + " 2 0.653603 -1.096843\n", + "b 1 -1.196253 -2.840656\n", + " 2 -0.758351 -1.166275" + ] + }, + "execution_count": 174, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.loc[['a','b'],'beijing']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 多个外层索引选择多行,并限定选择特定的列" + ] + }, + { + "cell_type": "code", + "execution_count": 175, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      boygirl
      a1-0.226582-0.858561
      20.653603-1.096843
      b1-1.196253-2.840656
      2-0.758351-1.166275
      \n", + "
      " + ], + "text/plain": [ + " boy girl\n", + "a 1 -0.226582 -0.858561\n", + " 2 0.653603 -1.096843\n", + "b 1 -1.196253 -2.840656\n", + " 2 -0.758351 -1.166275" + ] + }, + "execution_count": 175, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df['beijing'].loc[['a','b']]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 也可结合之前单层索引的思路来进行数据选取" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1.3 重新分层(重塑)" + ] + }, + { + "cell_type": "code", + "execution_count": 176, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "a 0 aa -0.849212\n", + " 1 aa -1.117469\n", + " 2 aa 0.472500\n", + "b 0 aa -1.272573\n", + " 1 aa 0.252942\n", + " 2 bb 0.360228\n", + "c 0 bb 0.425634\n", + " 1 bb -0.674811\n", + "d 0 bb 1.335875\n", + " 1 bb -0.228149\n", + "dtype: float64" + ] + }, + "execution_count": 176, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.index = [\n", + " ['a','a','a','b','b','b','c','c','d','d'],\n", + " ['0','1','2','0','1','2','0','1','0','1'],\n", + " ['aa','aa','aa','aa','aa','bb','bb','bb','bb','bb']\n", + "]\n", + "data" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 新建立一个有3层索引的Series对象" + ] + }, + { + "cell_type": "code", + "execution_count": 177, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "a aa 0 -0.849212\n", + " 1 -1.117469\n", + " 2 0.472500\n", + "b aa 0 -1.272573\n", + " 1 0.252942\n", + " bb 2 0.360228\n", + "c bb 0 0.425634\n", + " 1 -0.674811\n", + "d bb 0 1.335875\n", + " 1 -0.228149\n", + "dtype: float64" + ] + }, + "execution_count": 177, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.swaplevel()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用`swaplevel()`函数将索引进行层级交换\n", + "- 不指定参数时,将交换内层两个索引的层级" + ] + }, + { + "cell_type": "code", + "execution_count": 178, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "aa 0 a -0.849212\n", + " 1 a -1.117469\n", + " 2 a 0.472500\n", + " 0 b -1.272573\n", + " 1 b 0.252942\n", + "bb 2 b 0.360228\n", + " 0 c 0.425634\n", + " 1 c -0.674811\n", + " 0 d 1.335875\n", + " 1 d -0.228149\n", + "dtype: float64" + ] + }, + "execution_count": 178, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.swaplevel(0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 可在swaplevel()函数中放入数字参数来变换要交换层次的索引" + ] + }, + { + "cell_type": "code", + "execution_count": 179, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "one two three\n", + "a 0 aa -0.849212\n", + " 1 aa -1.117469\n", + " 2 aa 0.472500\n", + "b 0 aa -1.272573\n", + " 1 aa 0.252942\n", + " 2 bb 0.360228\n", + "c 0 bb 0.425634\n", + " 1 bb -0.674811\n", + "d 0 bb 1.335875\n", + " 1 bb -0.228149\n", + "dtype: float64" + ] + }, + "execution_count": 179, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.index.names = ['one','two','three']\n", + "data" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 可以为Serise对象的多层索引分别指定名称(name)" + ] + }, + { + "cell_type": "code", + "execution_count": 180, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "three two one\n", + "aa 0 a -0.849212\n", + " 1 a -1.117469\n", + " 2 a 0.472500\n", + " 0 b -1.272573\n", + " 1 b 0.252942\n", + "bb 2 b 0.360228\n", + " 0 c 0.425634\n", + " 1 c -0.674811\n", + " 0 d 1.335875\n", + " 1 d -0.228149\n", + "dtype: float64" + ] + }, + "execution_count": 180, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.swaplevel('one','three')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 指定了name后,就可以在`swaplevel()`函数中指定索引的name进行索引层次交换" + ] + }, + { + "cell_type": "code", + "execution_count": 181, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      threeaabb
      onetwo
      a0-0.849212NaN
      1-1.117469NaN
      20.472500NaN
      b0-1.272573NaN
      10.252942NaN
      2NaN0.360228
      c0NaN0.425634
      1NaN-0.674811
      d0NaN1.335875
      1NaN-0.228149
      \n", + "
      " + ], + "text/plain": [ + "three aa bb\n", + "one two \n", + "a 0 -0.849212 NaN\n", + " 1 -1.117469 NaN\n", + " 2 0.472500 NaN\n", + "b 0 -1.272573 NaN\n", + " 1 0.252942 NaN\n", + " 2 NaN 0.360228\n", + "c 0 NaN 0.425634\n", + " 1 NaN -0.674811\n", + "d 0 NaN 1.335875\n", + " 1 NaN -0.228149" + ] + }, + "execution_count": 181, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "frame = data.unstack()\n", + "frame" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 多层索引的对象可以通过unstack()函数来进行索引退层,不指定参数时默认为最内层\n", + "- 退层后,原来最内层的索引转换为每列的索引,无法对其的索引数据,则与统一赋值为NaN\n", + "- 对Series进行unstack(),则回返回DataFrame对象" + ] + }, + { + "cell_type": "code", + "execution_count": 182, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "one two three\n", + "a 0 aa -0.849212\n", + " 1 aa -1.117469\n", + " 2 aa 0.472500\n", + "b 0 aa -1.272573\n", + " 1 aa 0.252942\n", + " 2 bb 0.360228\n", + "c 0 bb 0.425634\n", + " 1 bb -0.674811\n", + "d 0 bb 1.335875\n", + " 1 bb -0.228149\n", + "dtype: float64" + ] + }, + "execution_count": 182, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "frame.stack()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- unstack()的拟操作是stack()" + ] + }, + { + "cell_type": "code", + "execution_count": 183, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      two012
      onethree
      aaa-0.849212-1.1174690.472500
      baa-1.2725730.252942NaN
      bbNaNNaN0.360228
      cbb0.425634-0.674811NaN
      dbb1.335875-0.228149NaN
      \n", + "
      " + ], + "text/plain": [ + "two 0 1 2\n", + "one three \n", + "a aa -0.849212 -1.117469 0.472500\n", + "b aa -1.272573 0.252942 NaN\n", + " bb NaN NaN 0.360228\n", + "c bb 0.425634 -0.674811 NaN\n", + "d bb 1.335875 -0.228149 NaN" + ] + }, + "execution_count": 183, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "frame = data.unstack('two')\n", + "frame" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 可以根据索引的name来指定unstack的索引层\n", + "- 返回一个以unstack的索引为列索引的DataFrame" + ] + }, + { + "cell_type": "code", + "execution_count": 184, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      two012
      threeaabbaabbaabb
      one
      a-0.849212NaN-1.117469NaN0.4725NaN
      b-1.272573NaN0.252942NaNNaN0.360228
      cNaN0.425634NaN-0.674811NaNNaN
      dNaN1.335875NaN-0.228149NaNNaN
      \n", + "
      " + ], + "text/plain": [ + "two 0 1 2 \n", + "three aa bb aa bb aa bb\n", + "one \n", + "a -0.849212 NaN -1.117469 NaN 0.4725 NaN\n", + "b -1.272573 NaN 0.252942 NaN NaN 0.360228\n", + "c NaN 0.425634 NaN -0.674811 NaN NaN\n", + "d NaN 1.335875 NaN -0.228149 NaN NaN" + ] + }, + "execution_count": 184, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "frame = frame.unstack()\n", + "frame" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 可以继续退层" + ] + }, + { + "cell_type": "code", + "execution_count": 185, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      threeaabb
      one
      a-0.849212NaN
      b-1.272573NaN
      cNaN0.425634
      dNaN1.335875
      \n", + "
      " + ], + "text/plain": [ + "three aa bb\n", + "one \n", + "a -0.849212 NaN\n", + "b -1.272573 NaN\n", + "c NaN 0.425634\n", + "d NaN 1.335875" + ] + }, + "execution_count": 185, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "frame['0']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 选择列数据" + ] + }, + { + "cell_type": "code", + "execution_count": 186, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "-0.84921151400187134" + ] + }, + "execution_count": 186, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "frame['0']['aa'].loc['a']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 仿照之前的方法,选择区域数据" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1.4 利用层级择、汇总计算数据" + ] + }, + { + "cell_type": "code", + "execution_count": 187, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "one two three\n", + "a 0 aa -0.849212\n", + " 1 aa -1.117469\n", + " 2 aa 0.472500\n", + "b 0 aa -1.272573\n", + " 1 aa 0.252942\n", + " 2 bb 0.360228\n", + "c 0 bb 0.425634\n", + " 1 bb -0.674811\n", + "d 0 bb 1.335875\n", + " 1 bb -0.228149\n", + "dtype: float64" + ] + }, + "execution_count": 187, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 还是用先前的Series做例子" + ] + }, + { + "cell_type": "code", + "execution_count": 188, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "one\n", + "a -1.494180\n", + "b -0.659403\n", + "c -0.249177\n", + "d 1.107726\n", + "dtype: float64" + ] + }, + "execution_count": 188, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.sum(level = 'one')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用sum()求和,用参数level指明以哪层的index为基准进行求和" + ] + }, + { + "cell_type": "code", + "execution_count": 189, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "two\n", + "0 1.193577\n", + "1 0.588540\n", + "2 0.079388\n", + "dtype: float64" + ] + }, + "execution_count": 189, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.std(level='two')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 其他函数也可以类似进行对特定层级的计算" + ] + }, + { + "cell_type": "code", + "execution_count": 190, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      beijingshanghai
      boygirlboy
      a1-0.226582-0.858561-1.849417
      20.653603-1.096843-1.113718
      b1-1.196253-2.840656-2.057308
      2-0.758351-1.166275-0.464505
      c11.419848-1.046008-1.126064
      2-1.6131541.410900-1.241607
      \n", + "
      " + ], + "text/plain": [ + " beijing shanghai\n", + " boy girl boy\n", + "a 1 -0.226582 -0.858561 -1.849417\n", + " 2 0.653603 -1.096843 -1.113718\n", + "b 1 -1.196253 -2.840656 -2.057308\n", + " 2 -0.758351 -1.166275 -0.464505\n", + "c 1 1.419848 -1.046008 -1.126064\n", + " 2 -1.613154 1.410900 -1.241607" + ] + }, + "execution_count": 190, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 仍然以前面的DataFrame作为例子" + ] + }, + { + "cell_type": "code", + "execution_count": 191, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      labeijingshanghai
      lbboygirlboy
      onetwo
      a1-0.226582-0.858561-1.849417
      20.653603-1.096843-1.113718
      b1-1.196253-2.840656-2.057308
      2-0.758351-1.166275-0.464505
      c11.419848-1.046008-1.126064
      2-1.6131541.410900-1.241607
      \n", + "
      " + ], + "text/plain": [ + "la beijing shanghai\n", + "lb boy girl boy\n", + "one two \n", + "a 1 -0.226582 -0.858561 -1.849417\n", + " 2 0.653603 -1.096843 -1.113718\n", + "b 1 -1.196253 -2.840656 -2.057308\n", + " 2 -0.758351 -1.166275 -0.464505\n", + "c 1 1.419848 -1.046008 -1.126064\n", + " 2 -1.613154 1.410900 -1.241607" + ] + }, + "execution_count": 191, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.index.names = ['one', 'two']\n", + "df.columns.names = ['la','lb']\n", + "df" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 为DataFrame对象的index的names赋值,为其columns的names赋值" + ] + }, + { + "cell_type": "code", + "execution_count": 192, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      labeijingshanghai
      lbboygirlboy
      one
      a0.427021-1.955404-2.963135
      b-1.954603-4.006931-2.521813
      c-0.1933050.364892-2.367671
      \n", + "
      " + ], + "text/plain": [ + "la beijing shanghai\n", + "lb boy girl boy\n", + "one \n", + "a 0.427021 -1.955404 -2.963135\n", + "b -1.954603 -4.006931 -2.521813\n", + "c -0.193305 0.364892 -2.367671" + ] + }, + "execution_count": 192, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.sum(level = 'one')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 可以利用各类计算的level参数,根据索引的name,来对指定层次的索引进行求值\n", + "- level参数默认为指定行索引的name" + ] + }, + { + "cell_type": "code", + "execution_count": 193, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      labeijingshanghai
      lbboygirlboy
      two
      11.3225591.0942730.488820
      21.1447341.4683000.416677
      \n", + "
      " + ], + "text/plain": [ + "la beijing shanghai\n", + "lb boy girl boy\n", + "two \n", + "1 1.322559 1.094273 0.488820\n", + "2 1.144734 1.468300 0.416677" + ] + }, + "execution_count": 193, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.std(level = 'two')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 之前所用到的各类计算,均可以这样对指定层进行计算" + ] + }, + { + "cell_type": "code", + "execution_count": 194, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      labeijingshanghai
      onetwo
      a1-1.085143-1.849417
      2-0.443240-1.113718
      b1-4.036908-2.057308
      2-1.924626-0.464505
      c10.373841-1.126064
      2-0.202254-1.241607
      \n", + "
      " + ], + "text/plain": [ + "la beijing shanghai\n", + "one two \n", + "a 1 -1.085143 -1.849417\n", + " 2 -0.443240 -1.113718\n", + "b 1 -4.036908 -2.057308\n", + " 2 -1.924626 -0.464505\n", + "c 1 0.373841 -1.126064\n", + " 2 -0.202254 -1.241607" + ] + }, + "execution_count": 194, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.sum(level = 'la',axis=1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用axis参数,可以指定列索引名称进行相应计算\n", + "- 其余指定columns值的计算均类似" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "### 2. 数据分组(Groupby)计算\n", + "\n", + "- 数据分组是Pandas常用操作\n", + "- 1.将数据按照某个规律(如标签、数据的规律)分组\n", + "- 2.对每个分组施加(Apply)运算\n", + "- 3.将运算结果合并(Combine)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.1 对Series进行分组计算" + ] + }, + { + "cell_type": "code", + "execution_count": 195, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "one two three\n", + "a 0 aa -0.849212\n", + " 1 aa -1.117469\n", + " 2 aa 0.472500\n", + "b 0 aa -1.272573\n", + " 1 aa 0.252942\n", + " 2 bb 0.360228\n", + "c 0 bb 0.425634\n", + " 1 bb -0.674811\n", + "d 0 bb 1.335875\n", + " 1 bb -0.228149\n", + "dtype: float64" + ] + }, + "execution_count": 195, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 仍然是以之前的Series作为例子" + ] + }, + { + "cell_type": "code", + "execution_count": 196, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 196, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "grouped = data.groupby(level='one')\n", + "grouped" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用groupby()函数,可以将数根据据指定level对应的index,进行分组。\n", + "- grouped是groupby类型,可视为含有一些分组信息的视图(类似dict)" + ] + }, + { + "cell_type": "code", + "execution_count": 197, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "a\n", + "---------------------------\n", + "one two three\n", + "a 0 aa -0.849212\n", + " 1 aa -1.117469\n", + " 2 aa 0.472500\n", + "dtype: float64\n", + "b\n", + "---------------------------\n", + "one two three\n", + "b 0 aa -1.272573\n", + " 1 aa 0.252942\n", + " 2 bb 0.360228\n", + "dtype: float64\n", + "c\n", + "---------------------------\n", + "one two three\n", + "c 0 bb 0.425634\n", + " 1 bb -0.674811\n", + "dtype: float64\n", + "d\n", + "---------------------------\n", + "one two three\n", + "d 0 bb 1.335875\n", + " 1 bb -0.228149\n", + "dtype: float64\n" + ] + } + ], + "source": [ + "for name, group in grouped:\n", + " print(name)\n", + " print('---------------------------')\n", + " print(group)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用类似dict一样对名字和对应的组进行迭代" + ] + }, + { + "cell_type": "code", + "execution_count": 198, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "one\n", + "a 3\n", + "b 3\n", + "c 2\n", + "d 2\n", + "dtype: int64" + ] + }, + "execution_count": 198, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "grouped.size()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 可以利用groupby对象的size()方法,来查看分组对象的信息\n", + "- 在本例中,对应索引a,b,c,d的数据个数分别为:3,3,2,2" + ] + }, + { + "cell_type": "code", + "execution_count": 199, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "one\n", + "a -1.494180\n", + "b -0.659403\n", + "c -0.249177\n", + "d 1.107726\n", + "dtype: float64" + ] + }, + "execution_count": 199, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "grouped.sum()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 对分好的组进行分组计算,之前的各种计算均可以直接应用" + ] + }, + { + "cell_type": "code", + "execution_count": 200, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "one\n", + "a -1.494180\n", + "b -0.659403\n", + "c -0.249177\n", + "d 1.107726\n", + "dtype: float64" + ] + }, + "execution_count": 200, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.groupby(level='one').sum()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 可以合并为一条语句来写,其功能与data.sum(level = 'one')一样" + ] + }, + { + "cell_type": "code", + "execution_count": 201, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1\n", + "-------------------\n", + "one two three\n", + "a 0 aa -0.849212\n", + " 1 aa -1.117469\n", + " 2 aa 0.472500\n", + "b 0 aa -1.272573\n", + " 1 aa 0.252942\n", + "dtype: float64\n", + "2\n", + "-------------------\n", + "one two three\n", + "b 2 bb 0.360228\n", + "c 0 bb 0.425634\n", + " 1 bb -0.674811\n", + "d 0 bb 1.335875\n", + " 1 bb -0.228149\n", + "dtype: float64\n" + ] + } + ], + "source": [ + "key = [1,1,1,1,1,2,2,2,2,2]\n", + "for name, group in data.groupby(key):\n", + " print(name)\n", + " print('-------------------')\n", + " print(group)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- groupby()强大还在于可以利用任意序列或数组对数据进行分组,不需要该数据一定在数据表中,前提是要两者等长\n", + "- 本例中用[1,1,1,1,1,2,2,2,2,2]将data进行分组" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.2 对DataFrame进行分组计算" + ] + }, + { + "cell_type": "code", + "execution_count": 202, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      labeijingshanghai
      lbboygirlboy
      onetwo
      a1-0.226582-0.858561-1.849417
      20.653603-1.096843-1.113718
      b1-1.196253-2.840656-2.057308
      2-0.758351-1.166275-0.464505
      c11.419848-1.046008-1.126064
      2-1.6131541.410900-1.241607
      \n", + "
      " + ], + "text/plain": [ + "la beijing shanghai\n", + "lb boy girl boy\n", + "one two \n", + "a 1 -0.226582 -0.858561 -1.849417\n", + " 2 0.653603 -1.096843 -1.113718\n", + "b 1 -1.196253 -2.840656 -2.057308\n", + " 2 -0.758351 -1.166275 -0.464505\n", + "c 1 1.419848 -1.046008 -1.126064\n", + " 2 -1.613154 1.410900 -1.241607" + ] + }, + "execution_count": 202, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 用先前已经添加index及colums的name的DataFrame对象作为例子" + ] + }, + { + "cell_type": "code", + "execution_count": 226, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "one\n", + "a 2\n", + "b 2\n", + "c 2\n", + "dtype: int64" + ] + }, + "execution_count": 226, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_grouped = df.groupby(level = 'one')\n", + "df_grouped.size()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 对DataFrame对象进行groupby()与前述Series类似\n", + "- 本例中以index为'a'的行进行分组\n", + "- 利用size()函数显示:index为'a'的数据为2行,'b'的数据为两行" + ] + }, + { + "cell_type": "code", + "execution_count": 204, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "a\n", + "---------------------\n", + "la beijing shanghai\n", + "lb boy girl boy\n", + "one two \n", + "a 1 -0.226582 -0.858561 -1.849417\n", + " 2 0.653603 -1.096843 -1.113718\n", + "b\n", + "---------------------\n", + "la beijing shanghai\n", + "lb boy girl boy\n", + "one two \n", + "b 1 -1.196253 -2.840656 -2.057308\n", + " 2 -0.758351 -1.166275 -0.464505\n", + "c\n", + "---------------------\n", + "la beijing shanghai\n", + "lb boy girl boy\n", + "one two \n", + "c 1 1.419848 -1.046008 -1.126064\n", + " 2 -1.613154 1.410900 -1.241607\n" + ] + } + ], + "source": [ + "for name, group in df_grouped:\n", + " print(name)\n", + " print('---------------------')\n", + " print(group)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 依然可以对grouped对象进行迭代\n", + "- 可以看出DataFrame已经基于'one'这个index进行了分组" + ] + }, + { + "cell_type": "code", + "execution_count": 205, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      labeijingshanghai
      lbboygirlboy
      one
      a0.427021-1.955404-2.963135
      b-1.954603-4.006931-2.521813
      c-0.1933050.364892-2.367671
      \n", + "
      " + ], + "text/plain": [ + "la beijing shanghai\n", + "lb boy girl boy\n", + "one \n", + "a 0.427021 -1.955404 -2.963135\n", + "b -1.954603 -4.006931 -2.521813\n", + "c -0.193305 0.364892 -2.367671" + ] + }, + "execution_count": 205, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_grouped.sum()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 可以对分组应用各种计算函数\n", + "- 本例中是sum()函数" + ] + }, + { + "cell_type": "code", + "execution_count": 206, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      labeijingshanghai
      onetwo
      a1-1.085143-1.849417
      2-0.443240-1.113718
      b1-4.036908-2.057308
      2-1.924626-0.464505
      c10.373841-1.126064
      2-0.202254-1.241607
      \n", + "
      " + ], + "text/plain": [ + "la beijing shanghai\n", + "one two \n", + "a 1 -1.085143 -1.849417\n", + " 2 -0.443240 -1.113718\n", + "b 1 -4.036908 -2.057308\n", + " 2 -1.924626 -0.464505\n", + "c 1 0.373841 -1.126064\n", + " 2 -0.202254 -1.241607" + ] + }, + "execution_count": 206, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.groupby(level = 'la', axis = 1).sum()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 可以在groupby()函数中指定axis=1,选取columns的name作为分组基准\n", + "- 本例中,选取name为'la'的columns索引作为分组基准进行分组及计算sum()" + ] + }, + { + "cell_type": "code", + "execution_count": 208, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      labeijingshanghaikey1
      lbboygirlboy
      onetwo
      a1-0.226582-0.858561-1.849417male
      20.653603-1.096843-1.113718famale
      b1-1.196253-2.840656-2.057308male
      2-0.758351-1.166275-0.464505famale
      c11.419848-1.046008-1.126064male
      2-1.6131541.410900-1.241607male
      \n", + "
      " + ], + "text/plain": [ + "la beijing shanghai key1\n", + "lb boy girl boy \n", + "one two \n", + "a 1 -0.226582 -0.858561 -1.849417 male\n", + " 2 0.653603 -1.096843 -1.113718 famale\n", + "b 1 -1.196253 -2.840656 -2.057308 male\n", + " 2 -0.758351 -1.166275 -0.464505 famale\n", + "c 1 1.419848 -1.046008 -1.126064 male\n", + " 2 -1.613154 1.410900 -1.241607 male" + ] + }, + "execution_count": 208, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df['key1'] = ['male', 'famale', 'male', 'famale','male', 'male']\n", + "df" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 为df增加一列" + ] + }, + { + "cell_type": "code", + "execution_count": 209, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      labeijingshanghai
      lbboygirlboy
      key1
      famale-0.052374-1.131559-0.789112
      male-0.404035-0.833581-1.568599
      \n", + "
      " + ], + "text/plain": [ + "la beijing shanghai\n", + "lb boy girl boy\n", + "key1 \n", + "famale -0.052374 -1.131559 -0.789112\n", + "male -0.404035 -0.833581 -1.568599" + ] + }, + "execution_count": 209, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.groupby('key1').mean()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- groupby()函数中参数可直接为columns中某列的索引,此时以某列为基准进行分组计算," + ] + }, + { + "cell_type": "code", + "execution_count": 211, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      labeijingshanghai
      lbboygirlboy
      abc-0.298053-1.898226-3.945894
      bat-1.422835-3.699217-3.906725
      \n", + "
      " + ], + "text/plain": [ + "la beijing shanghai\n", + "lb boy girl boy\n", + "abc -0.298053 -1.898226 -3.945894\n", + "bat -1.422835 -3.699217 -3.906725" + ] + }, + "execution_count": 211, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "key2 = ['bat','abc','bat','abc','abc','abc']\n", + "df.groupby(key2).sum()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 与前面Series对象的分组类似,利用任意序列或数组对DataFrame数据进行分组计算,不需要该数据一定在数据表中,前提是要两者等长" + ] + }, + { + "cell_type": "code", + "execution_count": 212, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      labeijingshanghaikey1
      lbboygirlboy
      onetwo
      a1-0.226582-0.858561-1.849417male
      20.653603-1.096843-1.113718famale
      b1-1.196253-2.840656-2.057308male
      2-0.758351-1.166275-0.464505famale
      c11.419848-1.046008-1.126064male
      2-1.6131541.410900-1.241607male
      \n", + "
      " + ], + "text/plain": [ + "la beijing shanghai key1\n", + "lb boy girl boy \n", + "one two \n", + "a 1 -0.226582 -0.858561 -1.849417 male\n", + " 2 0.653603 -1.096843 -1.113718 famale\n", + "b 1 -1.196253 -2.840656 -2.057308 male\n", + " 2 -0.758351 -1.166275 -0.464505 famale\n", + "c 1 1.419848 -1.046008 -1.126064 male\n", + " 2 -1.613154 1.410900 -1.241607 male" + ] + }, + "execution_count": 212, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 222, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      labeijingshanghaikey1key2
      lbboygirlboy
      onetwo
      a1-0.226582-0.858561-1.849417malebat
      20.653603-1.096843-1.113718famaleabc
      b1-1.196253-2.840656-2.057308malebat
      2-0.758351-1.166275-0.464505famaleabc
      c11.419848-1.046008-1.126064maleabc
      2-1.6131541.410900-1.241607maleabc
      \n", + "
      " + ], + "text/plain": [ + "la beijing shanghai key1 key2\n", + "lb boy girl boy \n", + "one two \n", + "a 1 -0.226582 -0.858561 -1.849417 male bat\n", + " 2 0.653603 -1.096843 -1.113718 famale abc\n", + "b 1 -1.196253 -2.840656 -2.057308 male bat\n", + " 2 -0.758351 -1.166275 -0.464505 famale abc\n", + "c 1 1.419848 -1.046008 -1.126064 male abc\n", + " 2 -1.613154 1.410900 -1.241607 male abc" + ] + }, + "execution_count": 222, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df['key2'] = ['bat','abc','bat','abc', 'abc', 'abc']\n", + "df" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 为df再增加一列" + ] + }, + { + "cell_type": "code", + "execution_count": 223, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      labeijingshanghai
      lbboygirlboy
      key1key2
      famaleabc-0.052374-1.131559-0.789112
      maleabc-0.0966530.182446-1.183836
      bat-0.711417-1.849608-1.953362
      \n", + "
      " + ], + "text/plain": [ + "la beijing shanghai\n", + "lb boy girl boy\n", + "key1 key2 \n", + "famale abc -0.052374 -1.131559 -0.789112\n", + "male abc -0.096653 0.182446 -1.183836\n", + " bat -0.711417 -1.849608 -1.953362" + ] + }, + "execution_count": 223, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.groupby(['key1', 'key2']).mean()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 可以利用两或多个索引进行分组和计算" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 有关分组聚合应用的进一步使用,可参考官方文档" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3. 透视表(Pivot table)\n", + "是各种电子表格程序和其他数据分析软件中一种常见的数据汇总工具,可以动态地根据一\n", + "个或多个键对数据进行聚合改变它们的版面布置,并根据行和列上的分组键将数据分配到各个矩形区域,以便按照不同方式分析数据。" + ] + }, + { + "cell_type": "code", + "execution_count": 234, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      ABCDE
      0oneAfoo0.2528840.336282
      1oneBfoo-0.119435-0.222245
      2twoCfoo0.1305362.150678
      3threeAbar-1.8019650.866635
      4oneBbar0.7247172.154735
      5oneCbar0.713373-0.538733
      6twoAfoo-0.0631140.026495
      7threeBfoo-0.5053130.779623
      8oneCfoo-0.0535160.256542
      9oneAbar0.6303960.424185
      10twoBbar0.1955920.971294
      11threeCbar-0.209705-1.513072
      \n", + "
      " + ], + "text/plain": [ + " A B C D E\n", + "0 one A foo 0.252884 0.336282\n", + "1 one B foo -0.119435 -0.222245\n", + "2 two C foo 0.130536 2.150678\n", + "3 three A bar -1.801965 0.866635\n", + "4 one B bar 0.724717 2.154735\n", + "5 one C bar 0.713373 -0.538733\n", + "6 two A foo -0.063114 0.026495\n", + "7 three B foo -0.505313 0.779623\n", + "8 one C foo -0.053516 0.256542\n", + "9 one A bar 0.630396 0.424185\n", + "10 two B bar 0.195592 0.971294\n", + "11 three C bar -0.209705 -1.513072" + ] + }, + "execution_count": 234, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = pd.DataFrame({'A' : ['one', 'one', 'two', 'three'] * 3,\n", + " 'B' : ['A', 'B', 'C'] * 4,\n", + " 'C' : ['foo', 'foo', 'foo', 'bar', 'bar', 'bar'] * 2,\n", + " 'D' : np.random.randn(12),\n", + " 'E' : np.random.randn(12)})\n", + "df" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用dict新建立一个DataFrame对象" + ] + }, + { + "cell_type": "code", + "execution_count": 239, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
      \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
      Cbarfoo
      AB
      oneA0.6303960.252884
      B0.724717-0.119435
      C0.713373-0.053516
      threeA-1.801965NaN
      BNaN-0.505313
      C-0.209705NaN
      twoANaN-0.063114
      B0.195592NaN
      CNaN0.130536
      \n", + "
      " + ], + "text/plain": [ + "C bar foo\n", + "A B \n", + "one A 0.630396 0.252884\n", + " B 0.724717 -0.119435\n", + " C 0.713373 -0.053516\n", + "three A -1.801965 NaN\n", + " B NaN -0.505313\n", + " C -0.209705 NaN\n", + "two A NaN -0.063114\n", + " B 0.195592 NaN\n", + " C NaN 0.130536" + ] + }, + "execution_count": 239, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pivot_df = df.pivot_table(values='D', index=['A', 'B'], columns=['C'])\n", + "pivot_df" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用pivot_table()函数,选择'D'列的数据,以['A', 'B']为index索引,以['C']为columns索引来列出数据\n", + "- pivot_table()函数中的各个参数,均为可选参数,但index或columns必须至少有一个,其值作为透视分组的依据" + ] + }, + { + "cell_type": "code", + "execution_count": 242, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "A B\n", + "one A 0.630396\n", + " B 0.724717\n", + " C 0.713373\n", + "three A -1.801965\n", + " B NaN\n", + " C -0.209705\n", + "two A NaN\n", + " B 0.195592\n", + " C NaN\n", + "Name: bar, dtype: float64" + ] + }, + "execution_count": 242, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pivot_df['bar']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 本例中pivot_table()函数透视的结果,仍然是DataFrame对象,因此可以对该DataFrame对象施加前面介绍的各类操作与计算" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.0" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} From 1df3b5639aea06e30e27f2690466085508941a0b Mon Sep 17 00:00:00 2001 From: liupengyuan Date: Sun, 22 Oct 2017 01:03:53 +0800 Subject: [PATCH 37/44] Delete pandas+Tutorial+DataFrame.ipynb --- chapter4/pandas+Tutorial+DataFrame.ipynb | 4830 ---------------------- 1 file changed, 4830 deletions(-) delete mode 100644 chapter4/pandas+Tutorial+DataFrame.ipynb diff --git a/chapter4/pandas+Tutorial+DataFrame.ipynb b/chapter4/pandas+Tutorial+DataFrame.ipynb deleted file mode 100644 index 23a227fc0..000000000 --- a/chapter4/pandas+Tutorial+DataFrame.ipynb +++ /dev/null @@ -1,4830 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Pandas统计分析入门(2)\n", - "- 转载注明转自:https://github.com/liupengyuan/\n", - "- ## 二维数据统计分析(DataFrame基础)\n", - "\n", - "---" - ] - }, - { - "cell_type": "code", - "execution_count": 181, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "%matplotlib inline\n", - "from pandas import Series, DataFrame\n", - "import pandas as pd\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "import seaborn as sns" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 二、二维数据统计分析(DataFrame基础)\n", - "\n", - "- 数据的描述、分析、可视化展示、概括性度量、输入与输出\n", - "df:多维条形图,多维折线图,多层图" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": true - }, - "source": [ - "### 1. DataFrame对象及数据展示\n", - "\n", - "- DataFrame是pandas最重要最基础的数据对象之一,可用来表示数据表\n", - "- 如果将Series视为表格中的一列,则DataFrame可以视为表中多列,或者是具有相同index的多个Series\n", - "- 如果将Series视为向量(带索引),则DataFrame即可视为矩阵(带索引)。\n", - "- 本小节仍将以一个词频统计结果作为实例,进行介绍。\n", - "- 教程中的各个代码段,请自行建立新的python程序,依次键入并顺序执行,观察执行结果。" - ] - }, - { - "cell_type": "code", - "execution_count": 182, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "words_freq = np.array([200,300,400,350,390,600,900,400,300,120])\n", - "freq_dict = {'boy':words_freq,'girl':words_freq*2,'children':words_freq+100, 'child': words_freq+300}\n", - "total_words_freq = [12345000,23456000,22333000,45632000,11144000,65433000,44444000,55555000,34522000,55566000]\n", - "years = pd.date_range('2006', periods=10, freq='A')" - ] - }, - { - "cell_type": "code", - "execution_count": 183, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
      \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
      boychildchildrengirl
      0200500300400
      1300600400600
      2400700500800
      3350650450700
      4390690490780
      56009007001200
      6900120010001800
      7400700500800
      8300600400600
      9120420220240
      \n", - "
      " - ], - "text/plain": [ - " boy child children girl\n", - "0 200 500 300 400\n", - "1 300 600 400 600\n", - "2 400 700 500 800\n", - "3 350 650 450 700\n", - "4 390 690 490 780\n", - "5 600 900 700 1200\n", - "6 900 1200 1000 1800\n", - "7 400 700 500 800\n", - "8 300 600 400 600\n", - "9 120 420 220 240" - ] - }, - "execution_count": 183, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df = DataFrame(freq_dict)\n", - "df" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 利用dict创建一个DataFrame对象,其index默认为从0开始的整数" - ] - }, - { - "cell_type": "code", - "execution_count": 184, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
      \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
      boychildchildrengirl
      2006-12-31200500300400
      2007-12-31300600400600
      2008-12-31400700500800
      2009-12-31350650450700
      2010-12-31390690490780
      2011-12-316009007001200
      2012-12-31900120010001800
      2013-12-31400700500800
      2014-12-31300600400600
      2015-12-31120420220240
      \n", - "
      " - ], - "text/plain": [ - " boy child children girl\n", - "2006-12-31 200 500 300 400\n", - "2007-12-31 300 600 400 600\n", - "2008-12-31 400 700 500 800\n", - "2009-12-31 350 650 450 700\n", - "2010-12-31 390 690 490 780\n", - "2011-12-31 600 900 700 1200\n", - "2012-12-31 900 1200 1000 1800\n", - "2013-12-31 400 700 500 800\n", - "2014-12-31 300 600 400 600\n", - "2015-12-31 120 420 220 240" - ] - }, - "execution_count": 184, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df = DataFrame(freq_dict, index = years)\n", - "df" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 与Series对象类似,可以在初始化DataFrame的时候,指定index\n", - "- 数据可视为3个有相同index的Series" - ] - }, - { - "cell_type": "code", - "execution_count": 185, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 185, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "df.plot()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 与Series对象类似,DataFrame对象可以利用plot()函数直接绘制折线图" - ] - }, - { - "cell_type": "code", - "execution_count": 186, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 186, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\nU2cX0CkAAAAASUVORK5CYII=\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "df.plot(kind='bar')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 绘制柱状图(统计学中一般称为复式柱状图)" - ] - }, - { - "cell_type": "code", - "execution_count": 187, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 187, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n/w/2F5GoCKIVigAAAABJRU5ErkJggg==\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "df.plot(kind='barh')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 绘制条形图" - ] - }, - { - "cell_type": "code", - "execution_count": 188, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 188, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\nQmCC\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "df.plot(kind = 'area')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 绘制(面积)堆积图" - ] - }, - { - "cell_type": "code", - "execution_count": 189, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 189, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "df.plot(kind='box')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 绘制箱型图" - ] - }, - { - "cell_type": "code", - "execution_count": 190, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "D:\\Anaconda\\lib\\site-packages\\seaborn\\categorical.py:2171: UserWarning: The boxplot API has been changed. Attempting to adjust your arguments for the new API (which might not work). Please update your code. See the version 0.6 release notes for more info.\n", - " warnings.warn(msg, UserWarning)\n" - ] - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 190, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAD3CAYAAAAT+Z8iAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAFiNJREFUeJzt3X9wXeV95/G3LOFfQnbEVJTtzHaZbcnXJlPSFAJNAoln\nwjSFTKpd2HQZmjQZdoCw2ZJsd0JnwUzojsMusGEXaEKDSZYQ2m3aEEqGKQnZhh+224QUmtm4tr4J\n+bHNZpqtsGVbyLYsS9o/7pVRhIzkc6987330fs14fO5zzrn3e4+vPnr83HOe0zU9PY0kqVwrWl2A\nJGlpGfSSVDiDXpIKZ9BLUuEMekkqXE+rC5jP8PCopwJJ0gkaGOjrmq/dHr0kFc6gl6TCGfSSVDiD\nXpIKZ9BLUuEMekl6FUNDuxga2tXqMhrSlqdXSlK7ePTRhwHYsOHsFldSnT16STqOoaFdZO4mc3dH\n9+oNekk6jpne/NzlTmPQS1LhDHpJOo7BwcvnXe40fhkrScexYcPZRGw8ttypFhX0EXEBcFtmboqI\nPwHOqK86E/h6Zl4REXcBFwKj9XWDwBHgIeD0evv7MnO4ifVL0pLq5J78jAWDPiJuAN4LjAFk5hX1\n9n7gSeDf1zc9F3hHZr44a9/fBb6dmbdExBXAZuBDTX0HkrSEOrknP2MxY/TfAy6bp/33gXsy8x8i\nYgVwFnBfROyIiKvq21wIfLm+/DhwcaMFS5JOzII9+sx8OCLOnN0WEacDb+fl3nwvcA9wJ9ANPBkR\nfwOsA/bXtxkF1i+mqP7+tfT0dC9mU0nSAqp+GfuvgD/OzMn644PAXZl5ECAivga8HjgA9NW36QP2\nLebJR0YOVixLkpavgYG+edurnl55MbWhmBmvBXZERHdEnEJtyOZ5YAdwaX2bS4BtFV9PklRR1aAP\n4PszDzJzN/A54OvA08CDmfl3wL3A6yJiO3ANtXF9SdJJ1DU93X63Z/WesZJ04rxnrCQtUwa9JBXO\noJekwhn0klQ4g16SCmfQS1LhDHpJKpxBL0mFM+glqXAGvSQVzqCXpMIZ9JJUOINekgpn0EtS4Qx6\nSSqcQS9JhTPoJalwBr0kFc6gl6TCGfSSVDiDXpIKZ9BLUuF6FrNRRFwA3JaZmyLiDcBjwHfrq+/N\nzM9HxNXAtcBRYEtmPhYRa4CHgNOBUeB9mTnc9HchSTquBYM+Im4A3guM1ZvOBe7MzI/P2uYM4Hrg\nPGA1sD0ivgpcB3w7M2+JiCuAzcCHmvsWJEmvZjE9+u8BlwGfqz8+F4iIGKTWq/8wcD6wIzPHgfGI\neAE4B7gQuL2+3+PAzU2sXZK0CAsGfWY+HBFnzmp6Frg/M5+LiJuAjwLfAvbP2mYUWA+sm9U+07ag\n/v619PR0L2ZTSdICFjVGP8cjmblvZhm4B3gG6Ju1TR+wDzgwq32mbUEjIwcrlCVJy9vAQN+87VXO\nuvlKRJxfX3478By1Xv5FEbE6ItYDG4GdwA7g0vq2lwDbKryeJKkBVXr01wH3RMQE8BPgmsw8EBF3\nUwvyFcBNmXk4Iu4FPhsR24EjwJXNKlyStDhd09PTra7hFYaHR9uvKElqcwMDfV3ztXvBlCQVzqCX\npMIZ9JJUOINekgpn0EtS4Qx6SSqcQS9JhTPoJalwBr0kFc6gl6TCGfSSVDiDXpIKZ9BLUuEMekkq\nnEEvSYUz6CWpcAa9JBXOoJekwhn0klQ4g16SCmfQS1LhehazUURcANyWmZsi4peBe4BJYBz47cz8\nfxFxF3AhMFrfbRA4AjwEnF5vf19mDjf5PUiSXsWCPfqIuAG4H1hdb7oL+J3M3AR8Efi9evu5wDsy\nc1P9z37gOuDbmXkR8CCwucn1S5IWsJihm+8Bl816fEVmfqu+3AMcjogVwFnAfRGxIyKuqq+/EPhy\nfflx4OIm1CxJOgELDt1k5sMRceasx/8AEBFvBv4d8Fagl9pwzp1AN/BkRPwNsA7YX991FFi/mKL6\n+9fS09O9+HchSTquRY3RzxUR/xq4CXhnZg5HRDdwV2YerK//GvB64ADQV9+tD9i3mOcfGTlYpSxJ\nWtYGBvrmbT/hoI+I9wDXApsyc2+9+bXA5yPiDdSGgy4EPkvtS9hLgWeBS4BtJ1y5ijc0tAuADRvO\nbnEl0iuV8Pk8oaCv99zvBv4e+GJEADydmR+NiM8BXwcmgAcz8+8i4gfAZyNiO7UzcK5savUqwqOP\nPgx09g+SylXC53NRQZ+ZPwR+tf7wtONscwdwx5y2g8C7G6hPhRsa2kXm7mPLnfzDpPKU8vn0gim1\n1Exvae6y1A5K+Xwa9JJUOINeLTU4ePm8y1I7KOXzWen0SqlZNmw4m4iNx5aldlLK59OgV8t1ck9J\n5Svh89k1PT3d6hpeYXh4tP2KkqQ2NzDQ1zVfu2P0klQ4g16SCmfQS1LhDHpJKpxBL0mFM+glqXAG\nvSQVzqCXpMIZ9JJUOINekgpn0EtS4Qx6SSqcQS9JhTPoJalwBr1UmKGhXQwN7Wp1GWoj3nhEKszM\nTaw7+Y5Iaq5FBX1EXADclpmbIuIXgQeAaWAn8MHMnIqIq4FrgaPAlsx8LCLWAA8BpwOjwPsyc3gJ\n3ockar35zN3Hlg17wSKGbiLiBuB+YHW96U5gc2ZeBHQBgxFxBnA98BbgHcB/johVwHXAt+vbPghs\nbv5bkDRjpjc/d1nL22J69N8DLgM+V398LvB0fflx4NeASWBHZo4D4xHxAnAOcCFw+6xtb15MUf39\na+np6V7UG5D0slNO6f6p5YGBvhZWo3axYNBn5sMRceaspq7MnLmn6yiwHlgH7J+1zXztM20LGhk5\nuJjNJM1x6aX/gp07dx5bHh4ebXFFOpmO94u9ypexU7OW+4B9wIH68qu1z7RJWiIbNpxNxMZjyxJU\nC/q/jYhNmfkUcAnwJPAs8LGIWA2sAjZS+6J2B3Bpff0lwLZmFC3p+AYHL291CWozVYL+PwBbI2Il\nsBv4QmZORsTd1IJ8BXBTZh6OiHuBz0bEduAIcGWzCpc0P3vymqtrenp64a1OsuHh0fYrSpLa3MBA\nX9d87V4ZK0mFM+glqXAGfUXOJ9I8HktpaTnXTUXOJ9I8Hktpadmjr2BmPpHM3fZEG+SxlJaeQV+B\n84k0j8dSWnoGvSQVzqCvYPaVh16F2BiPpbT0/DK2AucTaR6PpbT0DPqK7H02j8dSWlpOgSBJhXAK\nBElapgx6SSqcQS9JhTPoJalwBr0kFc6gl6TCeR69pLZ06623MDKyt6HnGBsb48iR8SZVVN3Klavo\n7e1t6Dn6+0/jxhtvqbSvQS+pLY2M7GXPnj2sOmVt5ec4OnmUqanWX5YzceQoL00eqrz/+MTBhl7f\noJfUtladspZf2eiV08/vbmxmV8foJalwlXr0EfF+4P31h6uBXwbeBDwGfLfefm9mfj4irgauBY4C\nWzLzsUYKliSdmEpBn5kPAA8ARMQngM8A5wJ3ZubHZ7aLiDOA64HzqP1C2B4RX83M1n87IknLREND\nNxFxHvC6zLyPWtC/MyKeiYhPR0QfcD6wIzPHM3M/8AJwTsNVS5IWrdEvY28Efr++/Cxwf2Y+FxE3\nAR8FvgXsn7X9KLB+oSft719LT093g6VJ6mSHDh1kfOJQw19ElmB84iDdh6YZGOirtH/loI+I1wCR\nmU/Wmx7JzH0zy8A9wDPA7Mr6gH0sYGSksVOJJHW+djgtsp1MTU0zPDz6qtsc7xdBIz36twJ/Oevx\nVyLidzLzWeDtwHPUevkfi4jVwCpgI7CzgdeUtIChoV1A59+xq7e3l+nJFZ5eSe30yt7eNZX3byTo\nA/j+rMfXAfdExATwE+CazDwQEXcD26h9H3BTZh5u4DUlLeDRR2tDHZ0e9GqeykGfmXfMefw88JZ5\nttsKbK36OpIWb2hoF5m7jy0b9gKvjF32nE/kpzUyn0g7mOnNzywb9AKDftkbGdnLnr0vsmJN9Y/C\n1NFJaIN7Dx8+epgjhyYq7z916GgTq5Hah0EvVqzpof/Xf77VZbTcyJf/vtUlNGxw8HJuv33LsWUJ\nDPplb2xsjKnxo0WEXKOmDh1lbGqs1WU0ZMOGs4nYeGxZAoNeKo49ec1l0C9zvb29HFkx4dANtaGb\n3jWNfZnbDuzJay6nKZakwhn0klQ4g76ioaFdxy41l6R25hh9RV5mLqlT2KOvYOYy88zd9uoltT17\n9BWUdpn51KHWnkc/dWQSgBUrW3sPgqlDR6H6BIFaAuMTB1s+H/3RySMA9HSvbFkN4xMHObWBD6dB\nv8z195/W6hIYOVyba6d/zWtaW8ia9jgeqmmXf4uRkUMAnLqudb2AU1nT0PHomm6DOUrmGh4ebb+i\nZhka2nXsMvMbbtjc8T36VvvIR64H4I477m5xJdIrddLnc2Cgr2u+dnv0FXiZuaROYtBX5GXmkjqF\nQV+RPXlJncLTKyWpcAa9JBXOoJekwhn0klQ4g16SClf5rJuIeB44UH/4A+BjwAPANLAT+GBmTkXE\n1cC1wFFgS2Y+1lDFkqQTUinoI2I10JWZm2a1fQnYnJlPRcQfAoMR8dfA9cB5wGpge0R8NTPHGy9d\n7eJP//SP+OY3v1F5/5GR2hQIM1cgVvXGN17Ab/7mbzX0HI249dZbjr2XqsbGxjhypD1+PFauXEVv\nb/U7bvX3n8aNN97SvIJUWdUe/euBtRHxRP05bgTOBZ6ur38c+DVgEthRD/bxiHgBOAf45qs9eX//\nWnp6WjvBlRZvzZqVdHdXHwVcvXo1QEPPMVPHwEBfQ8/RiAMH9rF3z4ucuqL6+5icmqJd5v+YPHyo\n8i+dl6am6O5e0dJ/j2aZ+Vx28nupGvQHgf8K3A+cRS3YuzJz5jM6CqwH1gH7Z+030/6qRkYOVixL\nrfCud72bd73r3a0uA4Dh4dGWvfbk5BSnrljBe9a3x2RcrfTQ/r1MTk619N+jWSYnp4DWfrYW63i/\njKoG/XeAF+rB/p2I2EOtRz+jD9hHbQy/b552SdJJUjXorwJ+Cfi3EfFz1HruT0TEpsx8CrgEeBJ4\nFvhYfUx/FbCR2he1UnHGxsYYn5riof2NjdOX4KWpKVaNjbW6DNVVDfpPAw9ExHZqZ9lcBbwIbI2I\nlcBu4AuZORkRdwPbqJ3KeVNmHm5C3ZKkRaoU9Jl5BLhynlVvm2fbrcDWKq8jdZLe3l5OOTLuGD21\nMfqVDZyxo+bygim13NDQLu+9Ky0hpylWy83cg9epn6WlYY9eLTU0tIvM3WTutlcvLRGDXi0105uf\nuyypeQx6SSpcx43RlzSfSKNziUDnzycyOHg5t9++5dhyp3upDc6jPzxVu5JzdQNTMTTqpakp2uHc\no0bnYYLmzMXU6nmYOi7oR0b2smfPHrpOWVP5OaYnJ2Cq9TOKHD4ywfhk9ekepicONbGa1tiw4Wwi\nNh5b7mT9/e0QbTBWD6aVLaznNNrneDRq5cpVrS6hYV3T060PvLmGh0ePW9RHPnI9ew8c5NRf/I2T\nWVJbeumFL3HaurXcccfdrS6lITNfwnZ60LeLmZ5np38udOIGBvq65mvvuB69ymPAS0ur44J+bGyM\n6YnDvPTCl1pdSstNTxxibKz9/kcmqb141o0kFa7jevS9vb2MT3Y5Rk9tjL63d22ry5DU5uzRS1Lh\nDHpJKpxBL0mFM+glqXAGvSQVruPOuoHa+eOtPo9+evIIAF3dK1tXw8QhwLNuStIuc7NA6+dnUfN0\nXNC3y/wZIyO1W9/2r2tl0K5tm+Oh9lHC3Cxqro6b66ZdOJ+IpHZzvLluHKOXpMJVGrqJiFOAzwBn\nAquALcCPgMeA79Y3uzczPx8RVwPXAkeBLZn5WKNFS9LJUsLsqlXH6N8D7MnM90bEacC3gP8E3JmZ\nH5/ZKCLOAK4HzgNWA9sj4quZ2fq7fkjSIpRw8/qqQf9nwBfqy13UeuvnAhERg9R69R8Gzgd21IN9\nPCJeAM4BvtlQ1ZKOq4QeaLuYuXn9zHKnHtNKQZ+ZLwFERB+1wN9MbQjn/sx8LiJuAj5Krae/f9au\no8D6hZ6/v38tPT3dVUo7abq7a19vDAz0tbgS6afdeeefA3DRRRe0uJLON3MsAf7iL/68Y49p5dMr\nI+KfAo8An8zMP46I12TmvvrqR4B7gGeA2UnYB+xjASMj1W+vd7JMTtbuyzk8PNriSqSXDQ3tYufO\nnQBs2/aNju2BtouJicmfWm73n/fjdTwrnXUTET8LPAH8XmZ+pt78lYg4v778duA54FngoohYHRHr\ngY3AziqvKWlhM+PJc5dVzewb1nfyzeur9uhvBPqBmyPi5nrb7wL/LSImgJ8A12TmgYi4G9hG7ZfK\nTZl5uNGiJelkKOXm9VXH6D8EfGieVW+ZZ9utwNYqryPpxAwOXs7tt285tqzGlXAcO24KhGZol/lE\nnEtEzVZKD7SdlHAcl2XQN4PziahdldADVXM5140kFcK5biRpmTLoJalwBr0kFc6gr2hoaNexOUUk\nqZ151k1FJcxoJ2l5sEdfwcyMdpm77dVLansGfQXOJyKpkxj0klQ4g76CUma0k7Q8+GVsBc4nIqmT\nGPQV2ZOX1Cmc60aSCuFcN5K0TBn0klQ4g16SCmfQS1LhDHpJKlxbnnUjSWoee/SSVDiDXpIKZ9BL\nUuEMekkqnEEvSYUz6CWpcAa9JBXOoH8VEfH+iPgvra6jJMc7phHxJxGxMiIeiIhfn7NudUT88GTV\n2G48Zq0TEf89In5+TtuZEfH1VtVUhfPRqy1k5hUAEdHqUjqGx2zpZeaHW11DMxj0C3tTRPwlsA64\nBTgCbAEOA3uAq4AbgB9n5icioh/4X5l5bovqbSsRsQb4H8A/A1YCXwB+NSKeAAaAezPzvnrvc8Os\n/U4F/gjoB144yWW3VLOPWUQ8BfwjcBrwTuCTwFnU/ke/OTOfioj/DTwNnANMA4OZuX9J32ibqR/3\nB4GfA34EvBX4DvAB4ArgzcCpwL9pVY1VOXSzsDHgYmo/IH8A3Adclplvo/aDsRm4H/jt+vZXUvth\nU80HgB9m5puo/bAcAiaAdwD/Ejhej+kDwM7MfCvwqZNRaBtZimP2PzPzYmodkxfr2wwCn6ivX1ff\n5m3Aj4FLmvh+OsU1wA8y8y3UOnU/O2f97sx8M7V/j45i0C9se2ZOZ+Y/AgeBg5n54/q6Z4DXZeb3\ngdGIOBv4LWq9AtUE8NcAmfldYB/wfGZOAz8B1h5nv9cCz9b3+wa1oFsuluKYZf3vXwIurffyHwZ6\nIuJn6uv+tv73j4DVTXknnWUj8FcAmTkEDM9Zn6/Yo0MY9At7I0BEnEHtw782Iv5Jfd3bqP3XDmAr\ncDPwfzPzxZNeZfvazcvH8J8Dt1IbGljILuBN9f3eAJyyVAW2oaU4ZlP1v4eo9dw3Ueu1/xmwt75u\nuc9wuJOXj98vAD8zZ/3UK/boEI7RL2xNRHyN2tjcNUAX8MWImAJGgPfXt3uE2tDOe1pRZBv7FPCZ\niHga6Abu5JU/QPP5Q+DBiNhOLZzGl67EtrOUx+xTwNb6c68DPpmZU36hC8CngQci4hng/1D7Hq4I\nTlPcJBGxltqY/QWZ2bG/+aXlKiLeDJyamU9ExFnAlzPzF1pdVzM4dNME9Q/IN4DbDHmpY30f+I8R\nsYPaCRUfbHE9TWOPXpIKZ49ekgpn0EtS4Qx6SSqcQS9JhTPoJalw/x/VivpvbL6sUAAAAABJRU5E\nrkJggg==\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "sns.boxplot(df)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 利用seaborn绘制箱型图" - ] - }, - { - "cell_type": "code", - "execution_count": 191, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 191, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYgAAAEFCAYAAAD5bXAgAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAGMxJREFUeJzt3X2QXfV93/G3pNUzi7Sur6y4tY3TlG+JGZUOLhCDQDMF\nyxBqKC1pBhvjOJGJhho79oBrSyRxAmEAP0VpDck6BBD20BpsJtEMRq4xRFJTC6emg1zzFVDjuLUJ\nW7wSKxatHvvHOWuulrOr5aJ79nj3/ZphuOd3zt397JVWn3se7vnNOnz4MJIkjTV7qgNIkprJgpAk\nVbIgJEmVLAhJUiULQpJUqWeqAxxLAwND416S1de3iMHB4TrjTJrZOmO2zpitM9M5W6vVO6tqfMbs\nQfT0zJnqCOMyW2fM1hmzdWYmZpsxBSFJenUsCElSJQtCklTJgpAkVbIgJEmVLAhJUqWufg4iIk4H\nbsrMVRFxCnAbcADYCfxWZh6KiDXAleX49Zm5KSIWAncDy4Ah4IrMHOhmVkn6ebNneB8bN+9k14v7\nWLp4HpevPpHjFs47Zl+/a3sQEXEt8EVgQTn0e8AfZOZZwHzgVyNiOXA1cCawGrgxIuYDa4HHM3Ml\ncBewvls5Jenn1cbNO3n0ied48ke7ePSJ59j44M5j+vW7uQfxNHAJsLFc/i7wuoiYBfQC+4HTgG2Z\nOQKMRMRTwArgLODm8nkPANdN5hv29S2a8AMjrVZvBz9GPczWGbN1xmydaVq2XS/ue8XysczYtYLI\nzPsi4oS2oSeB/0SxN7AbeBj4t+XjUUPAEuD4tvHRsaOa6KPmrVYvAwNDkwtfM7N1xmydMVtnmpht\n6eJ5r1juJON4pVLnvZj+GFiZmd+LiKuAzwAPUuxNjOoFdgEvtI2PjkmS2ly++kSAI85BHEt1FsRP\nKf7hB/gxxXmH7cANEbGA4rzEScAOYBtwQbn+fGBLjTkl6efCcQvnsfbik7u2d1NnQfwWcE9EHAD2\nAWsy89mI2EBRALOBdZm5NyJuBe6MiK3ltpfVmFOSRJcLIjOfAc4oH2+l2GsYu00/0D9mbBi4tJvZ\nJEkT84NykqRKFoQkqZIFIUmqZEFIkipZEJKkShaEJKmSBSFJqmRBSJIqWRCSpEoWhCSpkgUhSapk\nQUiSKlkQkqRKFoQkqZIFIUmqZEFIkipZEJKkSl2dUS4iTgduysxVEbGMYua4PmAO8L7MfDoi1gBX\nAgeA6zNzU0QsBO4GlgFDwBWZOdDNrJKkI3VtDyIirgW+CCwoh24GvpSZZwPrgX8aEcuBqymmIl0N\n3BgR84G1wOOZuRK4q9xeklSjbh5iehq4pG35TOAfRcR/Bd4DPAycBmzLzJHM3A08BawAzgK+Xj7v\nAeDcLuaUJFXo2iGmzLwvIk5oGzoBGMzMcyPid4GPAzuB3W3bDAFLgOPbxkfHjqqvbxE9PXPGXd9q\n9U42fu3M1hmzdcZsnZlp2bp6DmKM54G/LB//FXAD8B2g/afqBXYBL7SNj44d1eDg8LjrWq1eBgaG\nXl3impitM2brjNk6M52zjVcudV7FtBW4oHx8NvA9YDuwMiIWRMQS4CRgB7CtbdvzgS015pQkUW9B\nfAx4X0T8N+BdwB9l5rPABooCeAhYl5l7gVuBt0XEVuCDwKdqzClJosuHmDLzGeCM8vEPgfMqtumn\nuPy1fWwYuLSb2SRJE/ODcpKkShaEJKmSBSFJqmRBSJIqWRCSpEoWhCSpkgUhSapkQUiSKlkQkqRK\nFoQkqZIFIUmqZEFIkipZEJKkShaEJKmSBSFJqmRBSJIqWRCSpEpdnVEuIk4HbsrMVW1jlwEfysxf\nKZfXAFcCB4DrM3NTRCwE7gaWAUPAFZk50M2skqQjdW0PIiKuBb4ILGgb++fAbwKzyuXlwNXAmcBq\n4MaImA+sBR7PzJXAXcD6buWUJFXr5iGmp4FLRhci4h8AfwR8pG2b04BtmTmSmbuBp4AVwFnA18tt\nHgDO7WJOSVKFrh1iysz7IuIEgIiYA/w58FHgpbbNjgd2ty0PAUvGjI+OHVVf3yJ6euaMu77V6p1k\n+vqZrTNm64zZOjPTsnX1HESbU4F/AtxKccjplyPi88BDQPtP1QvsAl5oGx8dO6rBweFx17VavQwM\nDL3q4HUwW2fM1hmzdWY6ZxuvXGopiMzcDrwNoNyruCczP1Keg7ghIhYA84GTgB3ANuACYDtwPrCl\njpySpJdN6WWumfkssIGiAB4C1mXmXoo9jbdFxFbgg8Cnpi6lJM1MXd2DyMxngDMmGsvMfqB/zDbD\nwKXdzCZJmpgflJMkVbIgJEmVLAhJUiULQpJUyYKQJFWyICRJlSwISVIlC0KSVMmCkCRVsiAkSZUs\nCElSJQtCklTJgpAkVbIgJEmVLAhJUiULQpJUyYKQJFWyICRJlbo65WhEnA7clJmrIuIU4E+Ag8AI\n8L7M/PuIWANcCRwArs/MTRGxELgbWAYMAVdk5kA3s0rT3Z7hfWzcvJNdL+5j6eJ5XL76RI5bOG+q\nY6nBurYHERHXAl8EFpRDfwx8KDNXAV8FPh4Ry4GrgTOB1cCNETEfWAs8npkrgbuA9d3KKc0UGzfv\n5NEnnuPJH+3i0SeeY+ODO6c6khqum3sQTwOXABvL5V/PzJ+0fd+9wGnAtswcAUYi4ilgBXAWcHO5\n7QPAdZP5hn19i+jpmTPu+lar99X+DLUxW2fMNnm7Xtz3iuWmZYTmvW7tZlq2rhVEZt4XESe0Lf8E\nICLeAfx74GyKvYbdbU8bApYAx7eNj44d1eDg8LjrWq1eBgaGJv8D1MhsnTHbq7N08bxXLDctYxNf\nt1HTOdt45dLVcxBjRcS/A9YBv5qZAxHxAtCerBfYBbSPj45Jeg0uX30iwBHnIKSJ1FYQEfFeipPR\nqzLzp+XwduCGiFgAzAdOAnYA24ALyvXnA1vqyilNV8ctnMfai09u9DthNUstBRERc4ANwN8BX40I\ngEcy8/ciYgNFAcwG1mXm3oi4FbgzIrYC+4DL6sgpSXpZVwsiM58BzigXXzfONv1A/5ixYeDSbmaT\nJE3MD8pJkipZEJKkShaEJKmSBSFJqmRBSJIqWRCSpEoWhCSpkgUhSapkQUiSKlkQkqRKFoQkqZIF\nIUmqNOHN+iLizROtz8y/O7ZxJElNcbS7uT4CHC4fzxqz7jDwi8c8kSSpESYsiMx8K0BEXJiZm+qJ\nJElqgsmeg7ipqykkSY0z2QmDno6I24FvAy+NDmbmXV1JJUmacpMtiOcpzkGc0TZ2GJiwICLidOCm\nzFwVEb8E3FE+bwdwVWYeiog1FHNVHwCuz8xNEbEQuBtYBgwBV2TmwOR/LEnSazWpgsjM33i1Xzgi\nrgUuB14shz4LrM/MhyPiNuCiiPgb4Grg7cACYGtEfANYCzyemb8fEb8OrAc+/GozSJI6d7TLXDdl\n5oUR8QNevprpZzJzoquYngYuATaWy6dSXBUF8ADwTuAgsC0zR4CRiHgKWAGcBdzctu11k/txJEnH\nytH2INaU///9MeNvAV6KiJMzc0fVEzPzvog4oW1oVmaOlswQsAQ4Htjdtk3V+OjYUfX1LaKnZ864\n61ut3sl8mSlhts6YrTNm68xMy3a0y1x/Uj58N3AKcD/FuYgLgf8L/FpEfDkzPzeJ73Wo7XEvsAt4\noXw80fjo2FENDg6Pu67V6mVgYGgyX6Z2ZuuM2Tpjts5M52zjlctkL3NdDpyamR/LzI9SnDOYDfwK\n8P5Jfo3vRsSq8vH5wBZgO7AyIhZExBLgJIoT2NuAC8ZsK0mq0WQLokVxqGfUS8DrMvMAFecmxvEx\n4FPliel5wL2Z+SywgaIAHgLWZeZe4FbgbRGxFfgg8KlJfg9J0jEy2ctc7wMeioj/QlEq/wa4PyLe\nB/xkvCdl5jOUl8Zm5k7gnIpt+oH+MWPDwKWTzCZJ6oJJ7UFk5ieAW4ATgbdSfLbhOmAncFn34kmS\npspk9yAo78W0aczYfz/miSRJjeB8EJKkShaEJKmSBSFJqmRBSJIqWRCSpEoWhCSpkgUhSapkQUiS\nKlkQkqRKFoQkqZIFIUmqZEFIkipZEJKkShaEJKmSBSFJqjTp+SCOhYiYC9wJnAAcBNYAB4A7KKYu\n3QFclZmHImINcGW5/vpyPgpJUk1qLQjgAqAnM98REecBNwBzgfWZ+XBE3AZcVM5bfTXwdmABsDUi\nvpGZIzXnVQM9+/yL3HLPYwzv3c+i+XO55j2nsLxv8VTHkqadug8x7QR6ImI2cDywHzgVeKRc/wBw\nLnAasC0zRzJzN/AUsKLmrGqoW+55jMGhEUb2H2Jwzwi3fPmxqY4kTUt170HsoTi89ATweuBC4OzM\nPFyuHwKWUJTH7rbnjY5PqK9vET09c8Zd32r1dhS6DmYb3+4X93Hbff+Tv//pMG943SJefGn/EeuH\n9+6f8oxVmphplNk6M9Oy1V0QvwM8mJmfiIg3AQ8B89rW9wK7gBfKx2PHJzQ4ODzuularl4GBoU4y\nd53ZJnbr/Tt49InnAHjyR7uYO2fWEesXLZg75RnHasLrNh6zdWY6ZxuvXOo+xDTIy3sGP6U4//Dd\niFhVjp0PbAG2AysjYkFELAFOojiBrRloYNdLRywv61tAX+985s+dTV/vfK657JQpSiZNb3XvQXwO\nuD0itlDsOXwS+A7QHxHzgO8D92bmwYjYQFEWs4F1mbm35qxqiNbShTzz7Mvvjt74+l7WXnxyo9/R\nSdNBrQWRmXuAX6tYdU7Ftv1Af9dDqfEuX30iUOxJtJYu/NmypO6qew9CetWOWziPtRefPNUxpBnH\nT1JLkipZEJKkShaEJKmSBSFJqmRBSJIqeRWTarFneB8bN+884lLV4xbOO/oTJU0ZC0K12Lh5589u\nlzH6oTcvXZWazUNMqsXY22WMXZbUPBaEatFaunDCZUnN4yEm1cLbZUg/fywI1cLbZUg/fzzEJEmq\nZEFIkipZEJKkShaEJKmSBSFJqmRBSJIq1X6Za0R8Ang3xZzUXwAeAe4ADgM7gKsy81BErAGuBA4A\n12fmprqzzmTPPv8it9zzGMN797No/lyuec8pLO9bPNWxJNWo1j2IiFgFvAM4k2Ie6jcBnwXWZ+ZK\nYBZwUUQsB64ut1sN3BgR8+vMOtPdcs9jDA6NMLL/EIN7Rrjly49NdSRJNat7D2I18DjwNeB44Bpg\nDcVeBMADwDuBg8C2zBwBRiLiKWAF8OhEX7yvbxE9PXPGXd9q9b7W/F3TtGzDe/e/YrlpGaF5r1s7\ns3XGbJ3pRra6C+L1wFuAC4G3An8JzM7Mw+X6IWAJRXnsbnve6PiEBgeHx13XavUyMDDUWeoua2K2\nRfPnMrJ/5OXlBXMbl7GJr9sos3XGbJ15rdnGK5e6T1I/DzyYmfsyM4G9HPkPfy+wC3ihfDx2XDW5\n5j2n0Nc7n/lzZ9PXO59rLjtlqiNJqlndexBbgQ9HxGeBXwAWA9+MiFWZ+TBwPvAtYDtwQ0QsAOYD\nJ1GcwFZNlvct5jNXndnod02SuqvWgsjMTRFxNkUBzAauAn4A9EfEPOD7wL2ZeTAiNgBbyu3WZebe\nOrNK0kxX+2WumXltxfA5Fdv1A/3dTyRJquIH5SRJlSwISVIlC0KSVMmCkCRVsiAkSZUsCElSJQtC\nklTJgpAkVbIgJEmVLAhJUiULQpJUyYKQJFWyICRJlSwISVIlC0KSVMmCkCRVsiAkSZVqn1EOICKW\nAX8LnAccAO4ADlPMO31VZh6KiDXAleX66zNz01RklaSZqvY9iIiYC/wp8FI59FlgfWauBGYBF0XE\ncuBq4ExgNXBjRMyvO2u37Rnex6337+Cjn3+EW+/fwZ6X9k11JEn6manYg/g0cBvwiXL5VOCR8vED\nwDuBg8C2zBwBRiLiKWAF8GjNWbtq4+adPPrEc0eMrb345ClKI0lHqrUgIuL9wEBmPhgRowUxKzMP\nl4+HgCXA8cDutqeOjk+or28RPT1zxl3favV2Ertrdr247xXLTcsIzXvd2pmtM2brzEzLVvcexAeA\nwxFxLnAKcBewrG19L7ALeKF8PHZ8QoODw+Oua7V6GRgY6iBy9yxdPO8Vy03L2MTXbZTZOmO2zkzn\nbOOVS60FkZlnjz6OiIeB3wZuiYhVmfkwcD7wLWA7cENELADmAydRnMCeVi5ffSJQ7DksXTzvZ8uS\n1ARTchXTGB8D+iNiHvB94N7MPBgRG4AtFCfS12Xm3qkM2Q3HLZzH2otPbvQ7E0kz15QVRGauals8\np2J9P9BfWyBJ0hH8oJwkqZIFIUmqZEFIkipZEJKkShaEJKmSBSFJqmRBSJIqWRCSpEoWhCSpkgUh\nSapkQUiSKlkQkqRKFoQkqVITbvc9pfYM72Pj5p0M7HqJ1tKFXL76RI5bOO/oT5SkaW7GF0T7vNDP\nPFvMyeC80JLkISYGdr004bIkzVQzviBaSxdOuCxJM1Wth5giYi5wO3ACxVzT1wP/C7gDOEwx7/RV\nmXkoItYAVwIHgOszc1M3Mo3OA91+DkKSVP85iPcCz2fm5RHxOuCx8r/1mflwRNwGXBQRfwNcDbwd\nWABsjYhvZObIsQ40Oi+0JOlIdRfEV4B7y8ezKPYOTgUeKcceAN4JHAS2lYUwEhFPASuAR+uNK0kz\nV60FkZl7ACKil6Io1gOfzszD5SZDwBLgeGB321NHxyfU17eInp45465vtXo7C14Ds3XGbJ0xW2dm\nWrbaL3ONiDcBXwO+kJlfjoib21b3AruAF8rHY8cnNDg4PO66VquXgYGhjjJ3m9k6Y7bOmK0z0znb\neOVS61VMEfEGYDPw8cy8vRz+bkSsKh+fD2wBtgMrI2JBRCwBTqI4gS1JqkndexCfBPqA6yLiunLs\nw8CGiJgHfB+4NzMPRsQGirKYDazLzL01Z5WkGa3ucxAfpiiEsc6p2LYf6O96KElSpVmHDx8++laS\npBlnxn+SWpJUzYKQJFWyICRJlSwISVIlC0KSVMmCkCRVsiAkSZWm3ZSjEXE6cFNmroqIX2IK55po\ny9S4eTDass2h+EBilFl+G9jbhGxtGZcBfwucV37vRmSLiP9Bcd8wgB8ANzQo2yeAdwPzgC9Q3DF5\nyrNFxPuB95eLC4BTgLOAzzcg21zgTorf04PAGhry9y0i5gN/Afwixd+5q8pMXc02rfYgIuJa4IsU\nf/EAPksx18RKituLXxQRyynmmjgTWA3cWL743TQ6D8ZK4F3Af2xQtn8FkJlnUtxd94YGZRv9pf1T\nYHQu2EZki4gFwKzMXFX+9xsNyrYKeEf5Pc8B3tSUbJl5x+hrRlH6VwO/24RswAVAT2a+A/gDmvW7\nsAbYk5lnAB+ipn9DplVBAE8Dl7Qtj51r4lzgNMq5JjJzNzA610Q3fQUYvffUePNgTEm2zLwf+GC5\n+BaKu+Y2Ilvp08BtwI/L5aZk+2fAoojYHBEPRcQZDcq2Gnic4q7JfwVsalA2ACLi7cDbMvPPGpRt\nJ9ATEbMpphzY36Bsv1x+fzIzKW5g2vVs06ogMvM+ij/UUbOO1VwTrzHXnswcGjMPRiOylfkORMSd\nwJ8AX2pKtvJwxEBmPtg23IhswDBFea2mOCzXmNcNeD3FbIyXtmWb3ZBsoz4JfKp83JTXbQ/F4aUn\nKA67bmhQtseACyNiVvlm5B9Sw5/ptCqICofaHr+muSZeq3IejG8BGzPzy03KBpCZVwAnUvxiLGxI\ntg8A50XEwxTHqu8CljUk207g7sw8nJk7geeBNzQk2/PAg5m5r3y3uZcj/5GY6t+FpUBk5rfKoab8\nLvwOxet2IsUe4p0U53CakO328vtuAf41xeG5g93ONt0LohFzTTR5HoyIuLw8oQnFu+JDwHeakC0z\nz87Mc8rj1Y8B7wMeaEI2ivL6DEBEvJHindvmhmTbCryrfLf5RmAx8M2GZAM4G/hm23IjfheAQV5+\n9/1TYG6Dsv0L4JuZeRbFIev/XUe2aXcV0xgfA/obMNdEk+fB+CrwFxHx1xS/EB8p8zThdavSlD/T\nPwfuiIitFFeRfAD4f03IlpmbIuJsin8sZlNc8fKDJmQrBcU/cKOa8mf6OeD2iNhCsefwSeA7Dcn2\nJPCHEbGOYo/gN4Hjup3N231LkipN90NMkqQOWRCSpEoWhCSpkgUhSapkQUiSKlkQ0jEQEavKD/RJ\n04YFIUmqNN0/KCfV6fUR8XWK++R8m+IDaudR3N59NsWHw64ETgb+sLxrKBFxBXBGZq6dktTSONyD\nkI6dt1LcinkFxT1w/gPFrcovzswVwDaK2zQ/BCyPiH9cPu8Kivv6S41iQUjHzl9n5pPlHTa/RHHb\nku2Z+Uy5/s+Af1muvxN4b0S8GXhDZn57ShJLE/AQk3TsHGh7PIviHk2MGRv9nbsD+DrFnVbv6noy\nqQPuQUjHzlkR8eZywpkrgJuAMyLihHL9Bylu+U5m/hD4P8BaYOMUZJWOyj0I6dj5HsV9+3+B4jzD\npynmHv9aecfNH1LchXPUfwYuycwfj/1CUhN4N1dpCkRED8Wew1cy86tTnUeq4iEmqWYRMYtiju1D\nwP1THEcal3sQkqRK7kFIkipZEJKkShaEJKmSBSFJqmRBSJIq/X8yU300rC/xDwAAAABJRU5ErkJg\ngg==\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "df.plot(kind='scatter', x='boy',y='girl')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 当plot()函数kind为scatter时,可绘制散点图\n", - "- 散点图展现的是2组数据(2个变量)之间的关系\n", - "- 可见当前`boy`与`girl`两组数据之间是一种线性关系" - ] - }, - { - "cell_type": "code", - "execution_count": 192, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 192, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYgAAAEFCAYAAAD5bXAgAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xl8XOV97/HPjHbZkixbkneQjfEP22AwZnEwBkMAhyUb\nCSRNUkiTGMolpWlzL1kgbZOScknTpKW3WeqUAFle9AZI2pAQkmBMsAMYMJsB/7zgBW9YtiVZsnZp\n+seMEiFGi0dzzoxG3/frxYuZ55w55yvJM7855zzneSKxWAwREZH+opkOICIi2UkFQkREklKBEBGR\npFQgREQkKRUIERFJKj/TAdKprq5pwC5ZlZWl1Ne3hBln2JQtNcqWGmVLTdDZNr/RwL8+8BJH27oC\n20d/i06s4tNXnkJNTXkk2fIxcwSRn5+X6QgDUrbUKFtqlC01QWbr6u7hJ2u2hlocAF7cepDHNuwZ\ncPmYKRAiItnq0ed2s23PkdD32xODx15QgRARyVovbDmYsX3vqTs64DIVCBGRDHp1x2G27W3MdIyk\nVCBERDLouc11dHVn55BHKhAiIhlUV9+a6QgDUoEQEcmQnliMA1lcIAK9D8LMzgbucPflZnYa8B2g\nC9gMfMrde8xsJXB9ov02d3/IzEqAHwI1QBNwrbvXBZlVRCRsBxtaOXSkLdMxBhTYEYSZ3Qx8DyhO\nNP0t8BV3PxcoAi43synATcBSYAVwu5kVATcAL7v7MuBe4NagcoqIZEpzSyfdPdl5/QGCPYLYBlwJ\n/CDx/HlgoplFgDKgEzgLWOfu7UC7mW0FFgLnAl9LvO5h4EvD2WFlZemgN7NUV5el8GOEQ9lSo2yp\nUbbUpDvbgaaOtG4v3QIrEO7+gJnV9mnaAvwb8aOBRmAN8MHE415NQAVQ3qe9t21Ig90GX11dRl1d\n0/DCh0zZUqNsqVG21ASRra21Pa3bS7cwL1L/C7DM3U8iftron4AjxI8mepUBDf3ae9tERHJKVXkJ\n44qzd0i8MAvEYeIf/AB7gUpgPbDMzIrNrAKYB2wE1gGXJda9FHgixJwiIqEoLc6nprIk0zEGFGbp\n+hRwn5l1AR3ASnffb2Z3Ei8AUeAWd28zs28D95jZ2sS6Hwkxp4hIaKonlLB9X3aeVgu0QLj7DmBJ\n4vFa4r2V+q+zCljVr60FuCrIbCIi2WBG9XjWv3Yg0zGS0o1yIiIZ9M7FM5hYVpTpGEmpQIiIZFBJ\nUT7zayszuP+Bbw1QgRARybALFs3IWG+mBbUTB1ymAiEikmGzppWz9JSpoe+3qqKYqy+cM+ByFQgR\nkSzwweUncML08tD2F43AijOPo6pi4G62KhAiIlkgPy/Khy48kYnl4VywPnPeZC5cPH3QdVQgRESy\nxJzpFVxziVFZVhjofhadWMUnL59HJBIZdD0VCBGRLLJwThWfvGxeIHdYRyNw9vzJ3PC+k8nPG/rj\nXwVCRCTLzJ81iZv/ZBGnz60iOviX/GGrqijmTy6ay3Xvnj+s4gDhDrUhIiLDNLG8mBvffwprnt/D\nmhf28saB5pS2U1qUx4LaiVx14ZxBL0gnowIhIpKlIpEIF5w+g/NPm86Tr+znmU0H2LankaNtXYO+\nLhqBKRNLmV87kXcunsHkiaUp7V8FQkQky0WjEZaeMpWlp0zlaFsnr24/zK4DzRxsbKWzs4f8gjy6\nu3ooG1dAzYRS5h1fycya8URHeH5KBUJEZBQZV1zAmfMmc+a8yX9oC2qiJV2kFhGRpFQgREQkKRUI\nERFJSgVCRESSCvQitZmdDdzh7svNrIb4zHGVQB5wjbtvM7OVwPVAF3Cbuz9kZiXAD4EaoAm41t3r\ngswqIiJvFdgRhJndDHwPKE40fQ34kbufB9wKnGRmU4CbiE9FugK43cyKgBuAl919GXBvYn0REQlR\nkKeYtgFX9nm+FJhhZr8FPgqsAc4C1rl7u7s3AluBhcC5wK8Sr3sYuCjAnCIikkRgp5jc/QEzq+3T\nVAvUu/tFZvY3wOeAzUBjn3WagAqgvE97b9uQKitLyc8fePq86uqy4cYPnbKlRtlSo2ypGWvZwrxR\n7hDw34nHPwe+CjwL9P2pyoAG4Eif9t62IdXXtwy4LKgbSdJB2VKjbKlRttTkcraBikuYvZjWApcl\nHp8HvAKsB5aZWbGZVQDzgI3Auj7rXgo8EWJOEREh3ALxWeAaM/s98C7gH9x9P3An8QKwGrjF3duA\nbwMLzGwtcB3w5RBziogIAZ9icvcdwJLE453AxUnWWUW8+2vfthbgqiCziYjI4HSjnIiIJKUCISIi\nSalAiIhIUioQIiKSlAqEiIgkpQIhIiJJqUCIiEhSKhAiIpKUCoSIiCSlAiEiIkmpQIiISFIqECIi\nkpQKhIiIJKUCISIiSalAiIhIUioQIiKSlAqEiIgkFeiMcmZ2NnCHuy/v0/YR4C/c/R2J5yuB64Eu\n4DZ3f8jMSoAfAjVAE3Ctu9cFmVVERN4qsCMIM7sZ+B5Q3KdtEfBJIJJ4PgW4CVgKrABuN7Mi4Abg\nZXdfBtwL3BpUThERSS7IU0zbgCt7n5jZJOAfgM/0WecsYJ27t7t7I7AVWAicC/wqsc7DwEUB5hQR\nkSQCO8Xk7g+YWS2AmeUB/wH8NdDaZ7VyoLHP8yagol97b9uQKitLyc/PG3B5dXXZMNOHT9lSo2yp\nUbbUjLVsgV6D6GMxcCLwbeKnnOab2T8Dq4G+P1UZ0AAc6dPe2zak+vqWAZdVV5dRV9d0zMHDoGyp\nUbbUKFtqcjnbQMUllALh7uuBBQCJo4r73P0ziWsQXzWzYqAImAdsBNYBlwHrgUuBJ8LIKSIif5TR\nbq7uvh+4k3gBWA3c4u5txI80FpjZWuA64MuZSykiMjYFegTh7juAJYO1ufsqYFW/dVqAq4LMJiIi\ng9ONciIikpQKhIiIJKUCISIiSalAiIhIUioQIiKSVFg3yolIBuw7eJQNW+o40NBKXX0rbR3d5OVF\ngRiVZUVUV5Qya2oZp8+tJhqNZDquZBkVCJEcE4vFePKV/Tyz6QC+q4G2ju4hX3NczXgWzJ7IJWfO\npGJcUQgpZTRQgRDJIXsPHuW+R7ewcfvhY3rdrgPN7DrQzDOvHeBdZx/HBYumE4noiGKsU4EQyRGP\nPrebXz61k/qm9pS3cbCxjR//ZjOvbj/MJy6fR2lxQRoTymiji9QiOeDnv9/BT9ZsHVFx6NUTgw1b\nDnLn/S/R3NqRhnQyWqlAiIxyv332DX7x+x10dPakdbubdzfyrZ9tpKs7vduV0UMFQmQU232gmV8+\ntZOOrmA+xDftbOD+NdsC2bZkPxUIkVGqJxbjvke30NAc7GmgdS/vY9Ou+kD3IdlJBUJklPrdi3t5\ndWfwH9xH27r4xZM7At+PZB8VCJFR6jmvC21fW3Y38vrexqFXlJyiAiEyCm3fd4Qtu4c1E29adHT2\n8LsX94a2P8kOKhAio9CLWw+mvdfSUHa92Rzq/iTzVCBERqE361tD32ddQystbZ2h71cyJ9A7qc3s\nbOAOd19uZqcB/wp0A+3ANe7+ppmtBK4HuoDb3P0hMysBfgjUAE3Ate4hnnAVyXIHG8IvEEfbunht\nRz2LT6oJfd+SGYEdQZjZzcD3gOJE078Af+Huy4EHgc+Z2RTgJmApsAK43cyKgBuAl919GXAvcGtQ\nOUVGo5b2rozst7555Hdqy+gR5BHENuBK4AeJ5x9293199tsGnAWsc/d2oN3MtgILgXOBryXWfRj4\n0nB2WFlZSn5+3oDLq6vLjvVnCI2ypWasZsvU0NwlpYWB/87H6t90pILIFliBcPcHzKy2z/N9AGZ2\nDvBp4DziRw19+841ARVAeZ/23rYh1de3DLisurqMurqm4f8AIVK21IzpbLHgNj2Y9tbOQH+uMf03\nHYGRZhuouIR6kdrMPgR8B7g8cU3hCNA3WRnQ0K+9t01EEirLwp+zIRqBE6YP67ua5IjQCoSZfYz4\nkcNyd3890bweWGZmxWZWAcwDNgLrgMsS61wKPBFWTpHRoKayJPR9TiovZmbN+ND3K5kTynwQZpYH\n3AnsAh40M4DH3f1vzexO4gUgCtzi7m1m9m3gHjNbC3QAHwkjp8hoMXXSuND3WVNZomlJx5hAC4S7\n7wCWJJ5OHGCdVcCqfm0twFVBZhMZzc5dOJVfr99FXWNbaPucV1sZ2r4kO+hGOZFRqKggj/mzkn7n\nCkRVRTHvPH1maPuT7KACITJKvXPxDMpLw5kS9NQ5kygqHLgLueQmFQiRUWpG9XjOO21a4PupnVLG\nVcvnBL4fyT4qECKj2PvOnY0dNyGw7ZcU5fP+82ZTWKCjh7FIBUJkFItGI3zy8nmBdD8tLIjynqW1\nnDJ7Utq3LaODCoTIKFdVUcL/et8Cjp+cvqEWSgrzuHLZbFacdVzatimjjwqESA6YPHEcn/3wqSxZ\nMJmCvJHdqzCzZjwr3z2fS1QcxrxQbpQTkeCNLynkuncv4KkTJvHbZ3azfd+RYxqyaUJZEaedUMWH\nLpyjHksCqECI5Jwl86dw9rzJbNhcx9OvvsnuA80cPNJGV/fby0XFuAImV5ZyUm0lFy+ewbiSwgwk\nlmylAiGSgyKRCIuthsVWQywWY//hFl7dUU9rexclJQW0t3dx3OTxzJ0xQT2UZEAqECI5LhKJMHXS\nuD+M35TNw1ZLdtFFahERSWrQIwgzG7Qbg7vvSm8cERHJFkOdYnqcP85d1b/vXAyYnfZEIiKSFQYt\nEO4+C8DMrnD3h8KJJCIi2WC41yDuCDSFiIhkneH2YtpmZncBTwOtvY3ufm8gqUREJOOGWyAOEb8G\nsaRPWwwYtECY2dnAHe6+3MzmAHcnXrcRuNHde8xsJXA90AXc5u4PmVkJ8EOgBmgCrnX3uuH/WCIi\nMlLDKhDu/mfHumEzuxn4U+BooukbwK3uvsbMvgO818yeBG4CzgCKgbVm9hvgBuBld/87M/swcCvw\nl8eaQUREUjdUN9eH3P0KM9sObx/Wxd0H68W0DbgS+EHi+WLivaIAHgYuAbqBde7eDrSb2VZgIXAu\n8LU+635peD+OiIiky1BHECsT//+7fu3HA61mdrK7b0z2Qnd/wMxq+zRF3L23yDQBFUA50NhnnWTt\nvW1DqqwsJT9/4GEDqqvTNxxyuilbapQtNcqWmrGWbahurvsSD98DnAb8jPi1iCuAPcDVZvZjd//m\nMPbV0+dxGdAAHEk8Hqy9t21I9fUtAy7L5uEFlC01ypYaZUtNLmcbqLgMt5vrFGCxu3/W3f+a+DWD\nKPAO4OPD3MbzZrY88fhS4AlgPbDMzIrNrAKYR/wC9jrgsn7riohIiIZbIKqJn+rp1QpMdPcuklyb\nGMBngS8nLkwXAve7+37gTuIFYDVwi7u3Ad8GFpjZWuA64MvD3IeIiKTJcLu5PgCsNrP/T7yofAD4\nmZldA+wb6EXuvoNE11h33wycn2SdVcCqfm0twFXDzCYiIgEY1hGEu38B+EdgLjCL+L0NXwI2Ax8J\nLp6IiGTKsOeDSIzF9FC/tqfSnkhERLKC5oMQEZGkVCBERCQpFQgREUlKBUJERJIa9kVqkUzr6enh\n9b2NrN6wl8ajHRQU5BGJxTj9xCrOnD+Z4kL9cxZJJ72jJOtt8AM8+MTrHKhvpav77fdlvrjtEPc8\n4pSNK+SMuVV86KK55Ed1cCwyUioQkrX21x/ln+57gUON7UOu2xODxuYOHt2wl7Uv7+c9S2u5dElt\n8CFFcpgKhGSln6zewiPPvEHPcAdy6aO9s4efrHmdZzYd4IvXnKGjCZEU6Z0jWaW9o5u/u2s9D69P\nrTj0tWN/M1/87lN09fQMvbKIvI0KhGSN57fU8bnv/p5dB5rTts2DjW185fvPpG17ImOJCoRkXCwW\n4/412/jOf23kyNHOtG9/d91RHnx8a9q3K5LrVCAk436yZhu/enonnV0jPKc0iEee2U1LW1dg2xfJ\nRSoQklFrX9rLb58d+fWGoXR29fD9h18LdiciOUYFQjLmyNEOfvHkzqT3NgThtZ31oexHJFeoQEjG\nPPi7bbxZ3xra/lrauthTl74L4CK5LtT7IMysALgHqAW6gZVAF3A38alLNwI3unuPma0Erk8svy0x\nH4XkiNb2Ll7ZcTj0/f7m2Tf4+KXzQt+vyGgU9hHEZUC+u58DfAX4KvAN4FZ3XwZEgPea2RTgJmAp\nsAK43cyKQs4qAVrz/J5h3SGdbrt1BCEybGHfSb0ZyDezKFAOdBKfs/rxxPKHgUuIH12sc/d2oN3M\ntgILAXVoH4Va2rp4fW8jR9s6yc+LctzkMt6oa8pIlo4O3TQnMlxhF4hm4qeXNgFVwBXAee7ee5Wy\nCaggXjwa+7yut31QlZWl5OfnDbi8urospdBhyLVs295o4FdP7WDrngbePNRCU8sf728ozI8SzmXp\nt8svyAvtd51rf9OwKFtqgsgWdoH4K+ARd/+Cmc0EVgOFfZaXAQ3AkcTj/u2Dqq9vGXBZdXUZdRn6\n1jqUXMp2oL6F/1y9lVd3HKa9M/m39Y6uzH2Lz4sQyu86l/6mYVK21Iw020DFJewCUU/8tBLAYaAA\neN7Mlrv7GuBS4DFgPfBVMysGioB5xC9gSxZbvWE3v3xqJ4ePhH9tYbhqp5ZnOoLIqBF2gfgmcJeZ\nPUH8yOGLwLPAKjMrBF4D7nf3bjO7E3iC+IX0W9y9LeSscgx+vm47v3hyZ0aPDobjojNmZDqCyKgR\naoFw92bg6iSLzk+y7ipgVeChZMQe27BnVBSH8SUFTK4szXQMkVFDN8rJiBxsbOWXT2d/cQA4bc6k\nTEcQGVVUIGRE7nt0C4cas//sX1FBlI+tmJvpGCKjigqEpGxPXTOv7hgd4xu9/7zZFOZrAkWRY6EC\nISl7bMMe2jq6Mx1jSHOmV3DJmcdlOobIqKMCISlL58xvQZlRPY7Pf3RRpmOIjEo65paUdHR2U9cw\n8I2J2WB+bSV/ffWpRKP6HiSSChUIScnuumYaA5geNB1KivK45l3G2fOmZDqKyKimAiFJdXR1cbCh\nnaNdPcQ6uhhfWviW5dk4fWdeNMKKs2bwweUnZjqKSE5QgZA/eGrjfn7x9A7qj3TQ1tH1lmlAC/Oj\nlI0r5NTZE/nwxXMpyM+e0zYFeXD2/Kl8+J1zKC0uyHQckZyhAiE8+co+7vvtVppaBz5l1NHVw6HG\nNlY/v5e1L+9n4ZxJlBTl0dqeuV5M5eMKsZkTWHrKFBaeUJWxHCK5SgViDOvp6eHr973Apl1DDpT7\nFh1dPTy7qY5oJKBgfZyzYDLdsRhHW7voicUoyIsysaKYKZWlXHJOLbHO7O9mKzJaqUCMUT09PfzN\nXc+w9+DR1LcR8KQO1RNKuPbSeQOezqqaUJq1wy+L5ILsOZEsofq/P3p+RMUhDPOPr8yqax0iY43e\nfWPQo8/tZuuexqFXzKDiwjyWL5qe6RgiY5oKxBjT09PDg7/blukYQzrn5CkcPyV7p3cUGQtUIMaY\nn/9+R0Z7Hg1H7ZQyPnThnEzHEBnzVCDGmLUv7c90hEFNnVTKp66YT0F+XqajiIx56sU0xjQeDXa+\n6AiQauemWdPK+eRl85hWNS6dkUQkRaEXCDP7AvAe4nNSfwt4HLib+OfKRuBGd+8xs5XA9UAXcJu7\nPxR21lyzu66Zru5g+6ZOrSol1gP7Dg9/IL/SojzOOWUqVy2fo15LIlkk1HejmS0HzgGWEp+Heibw\nDeBWd19G/Avoe81sCnBTYr0VwO1mVhRm1lz08tZDge8jGonwpY+fwQfOn82c6eUUFST/JxaNwJSJ\nJVywaBpf+NhiPnJRdg3fISLhH0GsAF4GfgqUA/8HWEn8KALgYeASoBtY5+7tQLuZbQUWAs8MtvHK\nylLyBzl3XV2dvb1iwsiWXxj8nzsvL8rM6ZV8fHolsViMQ42tbPA69tU109HdQ14kwoSyIhbOqWLW\ntAry8kZWFMb63zRVypaasZYt7AJRBRwPXAHMAv4biLp773mPJqCCePHo21G/t31Q9fUDn9aori7L\n2rtuw8pWWhjC2Bjwtp9l0eyJLJo98W3rHT48shv19DdNjbKlJpezDVRcwj6mPwQ84u4d7u5AG2/9\n4C8DGoAjicf922UEFp1YQ9AlYnJlScB7EJGwhF0g1gLvMrOImU0DxgGPJq5NAFwKPAGsB5aZWbGZ\nVQDziF/AlhEoLc6nqDDY7qPLT9XdzyK5ItQCkeiJ9DzxAvBz4Ebgs8CXzexJ4j2b7nf3/cCdxIvF\nauAWd28LM2uumjqxNLBtFxfmcVJtZWDbF5Fwhd7N1d1vTtJ8fpL1VgGrgk80tvzpCuMr9zwbyLZt\n5pCXiURkFFG/wjGmdmo5Uyel/yiiMD/KyncvSPt2RSRzVCDGoM9/9HQK03zPwRXvOF7TfYrkGBWI\nMaistJAPLj8hbTPCzZ1ZwRVLZ6VnYyKSNVQgxqiLzpjJB86bPeIiceL0cj7/0cXpCSUiWUWD9Y1h\nl76jltpp5Xznv16hqaXzmF6bnxfhotNncPU7TwwonYhkmgrEGDfv+Il889NLueuXm3hx60GOtnUN\nun5BfpSZNeO54b3zmVQRXJdZEck8FQghGo3yqSvmA7DBD/C7l/ZR19BKa3sX0WiEaCTCpPIiTjq+\nksuX1JKvQfVExgQVCHmL062G063mD8+zefwZEQmWCkQGHDrSynN+kDfrW2g62kFhYT6RWIzqyhLm\n105kznTdcCYimacCESLfVc+jz+1m0656mluTn+v/xe93MHt6BWfPm8z5p00jEglnBFYRkf5UIELQ\n1d3D/Wu2sfblfbQMcRG4szuG72pgyxsNvLTtIB+5eC5VFRohVUTCpwIRsM6uHv7tpy/z0rZjm82t\nJwYvbD1EXcNLXP+e+cyoyd6JSkQkN6k7SoBisRj/8dCrx1wc+tpz8Cj//vNXaWrtSGMyEZGhqUAE\n6PEX9vKsHxjxdnbXHeXHv9mShkQiIsOnAhGQjs5ufv3MLnpiQ687HBv8AC9uPZiejYmIDIMKREAe\ne34P+w+3pm17nd0xfr9xf9q2JyIyFBWIgLy643Dat7n5jXraOgbvBSUiki4Z6cVkZjXAc8DFQBdw\nNxAjPu/0je7eY2YrgesTy29LTFc6KvTEYryZxqOHXo1HO9m0q57T5lSnfdsiIv2FfgRhZgXAd4He\nT9BvALe6+zIgArzXzKYANwFLgRXA7WZWFHbWVB1qbOPQkWCm0N71ZnMg2xUR6S8Tp5i+DnwH2Jt4\nvhh4PPH4YeAi4Cxgnbu3u3sjsBVYGHbQVDW3dtKdrqvT/XR29QSyXRGR/kI9xWRmHwfq3P0RM/tC\nojni7r2fpk1ABVAONPZ5aW/7oCorS8nPzxtweXV1ODebtXYHUxwAysYXhfZz9Ap7f8dC2VKjbKkZ\na9nCvgbxCSBmZhcBpwH3AjV9lpcBDcCRxOP+7YOqr28ZcFmYo5Lmx3qYML6Ihub2tG+7tCAa6uiq\n2Tyaq7KlRtlSk8vZBiouoRYIdz+v97GZrQH+HPhHM1vu7muAS4HHgPXAV82sGCgC5hG/gD0qFOTn\nUTOhOO0Forgwj1NOqErrNkVEBpIN3Vw/C3zZzJ4ECoH73X0/cCfwBLAauMXdg7nqG5DZ08rTvs1Z\nU8uoGFeY9u2KiCSTscH63H15n6fnJ1m+ClgVWqA0u/iMmax9eT/Nrcc21/NgFp2o7q0iEp5sOILI\nSZXlxZw9f3Latjd3RgUXnD49bdsTERmKCkSArr5gDrPScKqprLSAqy+cQ15Ufy4RCY8+cQJUkB/l\nk5fPY3rVuJS3Ma44n6sumMPsaZqGVETCpQIRsGmTxnHj+0/mpOMmHPNrp0ws4ZoVxrmnTA0gmYjI\n4MbsjHI9PTF27j/Ca7saaGnrBCKUjytkQW0l06rGpXUu6CmTxvG/P7yI/163nfWvvTnkKK9lpQWc\nPGsSH7pwDuXqtSQiGTLmCkRLWye/eHInG7cfZveBZvrf85wXjVA7pYxT51TxrrOPIz8vPQdZ0WiE\n9y2bzeXvqOXxF/awfd8RDtS30tTSSTQvQkFelJoJJUytKuXCRTOYUDZqhp4SkRw1pgrEc5sO8LO1\n29lz8OiA63T3xNi29wjb9h7hxa0HueqCOcydeeynhwZSkB/lojNmvqUtm+/QFJGxa8xcg3ho7evc\n9cvXBi0O/W3be4Rv/2wjG9IwbaiIyGgzJgrEc36AHzz8Gq0d3cf82sajHfzwN5vZuV/f8EVkbMn5\nAtHS1sl/rd1OS1vqM7E1NHfwn49toSegIbxFRLJRzheIXz69i911wz+tNJBNOxt44qW9Q68oIpIj\ncrpA9MRibHz9UNq2t2FzXdq2JSKS7XK6QOw+0MzuA+mbonPXm010dB77dQwRkdEopwvEa7vqSedl\ng8ajnWzePeS8RSIiOSGnC8TRltQvTA/kwBB3QYuI5IqcLhBEAuh1lL4ROEREslpOF4jK8ekdriIC\nHD8leyctFxFJp1CH2jCzAuAuoJb4XNO3Aa8CdwMx4vNO3+juPWa2Erge6AJuc/eHjnV/C2ZNpCA/\nSmdXT1ryTywv4vjJKhAiMjaEfQTxMeCQuy8D3gX8P+AbwK2JtgjwXjObAtwELAVWALeb2TEfDlRP\nKKF2avo+0GdPq0jb4H0iItku7E+7nwBfSjyOED86WAw8nmh7GLgIOAtY5+7t7t4IbAUWHuvOIpEI\ni+ZUjTg0QF4UlixI3xSiIiLZLtRTTO7eDGBmZcD9wK3A192992pyE1ABlAONfV7a2z6oyspS8vPz\n3tL2kUvn88rOel55/fCIsi85eRqXnDN7RNsYTHV19p66UrbUKFtqlC01QWQLfbhvM5sJ/BT4lrv/\n2My+1mdxGdAAHEk87t8+qPr6lqTtV547mzcPtXKwMbUuqtOqxvGB82oDG5I7m4f7VrbUKFtqlC01\nI802UHEJ9RSTmU0Gfg18zt3vSjQ/b2bLE48vBZ4A1gPLzKzYzCqAecQvYKdk1rRyPn31qUwqLz7m\n106vKuW6d89nwvhjf62IyGgW9hHEF4FK4Etm1nst4i+BO82sEHgNuN/du83sTuLFIgrc4u5tI9nx\n4pMm85k+303kAAAFJElEQVSrF3Lfo1t4ZXv9kOvnRSMsmlvFRy+aS0Wau8uKiIwGYV+D+EviBaG/\n85OsuwpYlc79T68az19dfRpPv7KfZzbVsfPNJuqb2v+wPBqBieXFzJ5WzjknT2XhCZPSuXsRkVEl\nEotpjgMREXk7deoXEZGkVCBERCQpFQgREUlKBUJERJJSgRARkaRUIEREJCkVCBERSSr0sZiCZmZn\nA3e4+3Izm0NAc00cY6ZQ58E4xmx5xG9ItESWPwfasiFbn4w1wHPAxYl9Z0U2M9tAfNwwgO3AV7Mo\n2xeA9wCFwLeIj5ic8Wxm9nHg44mnxcBpwLnAP2dBtgLgHuLv025gJVny7y0x3cH3gdnE/83dmMgU\naLacOoIws5uB7xH/hwcBzjVxjEKdB+MYvRvA3ZcSH133q1mUrfdN+12gd6TFrMhmZsVAxN2XJ/77\nsyzKthw4J7HP84GZ2ZLN3e/u/Z0RL/o3AX+TDdmAy4B8dz8H+ArZ9V5YCTS7+xLgLwjpMySnCgSw\nDbiyz/PA5po4RqHOg3Es3P1nwHWJp8cTHzU3K7IlfB34DrA38Txbsp0KlJrZr81stZktyaJsK4CX\niY+a/HPgoSzKBoCZnQEscPd/z6Jsm4F8M4sSn3KgM4uyzU/sH3d34gOYBp4tpwqEuz9A/I/aK5Ku\nuSZGmKvZ3Zv6zYORFdkS+brM7B7gX4EfZUu2xOmIOnd/pE9zVmQDWogXrxXET8tlze8NqALOAK7q\nky2aJdl6fRH4cuJxtvzemomfXtpE/LTrnVmU7QXgCjOLJL6MTCeEv2lOFYgk+k5GPaK5JkYqMQ/G\nY8AP3P3H2ZQNwN2vBeYSf2OUZEm2TwAXm9ka4ueq7wVqsiTbZuCH7h5z983AIaDvlIOZzHYIeMTd\nOxLfNtt464dEpt8LEwBz98cSTdnyXvgr4r+3ucSPEO8hfg0nG7LdldjvE8D7iZ+e6w46W64XiMDn\nmhiOTM2DMcxsf5q4oAnxb8U9wLPZkM3dz3P38xPnq18ArgEezoZsxIvXPwGY2TTi39x+nSXZ1gLv\nSnzbnAaMAx7NkmwA5wGP9nmeFe8FoJ4/fvs+DBRkUbYzgUfd/Vzip6xfDyNbzvVi6uezwKqg55oY\nhozNgzEMDwLfN7PfEX9DfCaRJxt+b8lky9/0P4C7zWwt8V4knwAOZkM2d3/IzM4j/mERJd7jZXs2\nZEsw4h9wvbLlb/pN4C4ze4L4kcMXgWezJNsW4O/N7BbiRwSfBMYHnU3DfYuISFK5fopJRERSpAIh\nIiJJqUCIiEhSKhAiIpKUCoSIiCSlAiGSBma2PHFDn0jOUIEQEZGkcv1GOZEwVZnZr4iPk/M08RvU\nLiY+vHuU+M1h1wMnA3+fGDUUM7sWWOLuN2QktcgAdAQhkj6ziA/FvJD4GDifJz5U+fvcfSGwjvgw\nzauBKWZ2QuJ11xIf118kq6hAiKTP79x9S2KEzR8RH7ZkvbvvSCz/d+CdieX3AB8zs+OAye7+dEYS\niwxCp5hE0qerz+MI8TGa6NfW+567G/gV8ZFW7w08mUgKdAQhkj7nmtlxiQlnrgXuAJaYWW1i+XXE\nh3zH3XcCu4EbgB9kIKvIkHQEIZI+rxAft38q8esMXyc+9/hPEyNu7iQ+Cmev/wSudPe9/Tckkg00\nmqtIBphZPvEjh5+4+4OZziOSjE4xiYTMzCLE59juAX6W4TgiA9IRhIiIJKUjCBERSUoFQkREklKB\nEBGRpFQgREQkKRUIERFJ6n8ADeRojEKEVSoAAAAASUVORK5CYII=\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "df.plot(kind='scatter', x='boy',y='girl',s=df['child'].values)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 对散点图,如果设置s参数,将一组list类型的数据传入,代表对应点的大小,则绘制出气泡图\n", - "- 气泡图展示的是三组数据(三个变量)之间的关系。上图可以解释为:当男孩数量增加时,女孩增加,同时小孩儿的数量增加。" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 2. DataFrame汇总与描述统计" - ] - }, - { - "cell_type": "code", - "execution_count": 193, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "boy 3960\n", - "child 6960\n", - "children 4960\n", - "girl 7920\n", - "dtype: int64" - ] - }, - "execution_count": 193, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.sum()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- Series对象的各类求值及描述统计函数,DataFrame对象均可以使用\n", - "- 默认参数是axis=0,表示以行方向为数据轴(基准),取每列做为一个Series对象对其进行统计" - ] - }, - { - "cell_type": "code", - "execution_count": 194, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "2006-12-31 1400\n", - "2007-12-31 1900\n", - "2008-12-31 2400\n", - "2009-12-31 2150\n", - "2010-12-31 2350\n", - "2011-12-31 3400\n", - "2012-12-31 4900\n", - "2013-12-31 2400\n", - "2014-12-31 1900\n", - "2015-12-31 1000\n", - "Freq: A-DEC, dtype: int64" - ] - }, - "execution_count": 194, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.sum(axis=1)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 参数如果指定axis=1,表示以列方向为数据轴(基准),取每行做为一个Series对象对其进行统计" - ] - }, - { - "cell_type": "code", - "execution_count": 195, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "boy 120\n", - "child 420\n", - "children 220\n", - "girl 240\n", - "dtype: int32" - ] - }, - "execution_count": 195, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.min()" - ] - }, - { - "cell_type": "code", - "execution_count": 196, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "boy 396.0\n", - "child 696.0\n", - "children 496.0\n", - "girl 792.0\n", - "dtype: float64" - ] - }, - "execution_count": 196, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.mean()" - ] - }, - { - "cell_type": "code", - "execution_count": 197, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "boy 47871.111111\n", - "child 47871.111111\n", - "children 47871.111111\n", - "girl 191484.444444\n", - "dtype: float64" - ] - }, - "execution_count": 197, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.var()" - ] - }, - { - "cell_type": "code", - "execution_count": 198, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "boy 218.794678\n", - "child 218.794678\n", - "children 218.794678\n", - "girl 437.589356\n", - "dtype: float64" - ] - }, - "execution_count": 198, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.std()" - ] - }, - { - "cell_type": "code", - "execution_count": 199, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "boy 0.552512\n", - "child 0.314360\n", - "children 0.441118\n", - "girl 0.552512\n", - "dtype: float64" - ] - }, - "execution_count": 199, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.std()/df.mean()" - ] - }, - { - "cell_type": "code", - "execution_count": 200, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "boy 370.0\n", - "child 670.0\n", - "children 470.0\n", - "girl 740.0\n", - "dtype: float64" - ] - }, - "execution_count": 200, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.median()" - ] - }, - { - "cell_type": "code", - "execution_count": 201, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
      \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
      boychildchildrengirl
      2006-12-31200500300400
      2007-12-3150011007001000
      2008-12-31900180012001800
      2009-12-311250245016502500
      2010-12-311640314021403280
      2011-12-312240404028404480
      2012-12-313140524038406280
      2013-12-313540594043407080
      2014-12-313840654047407680
      2015-12-313960696049607920
      \n", - "
      " - ], - "text/plain": [ - " boy child children girl\n", - "2006-12-31 200 500 300 400\n", - "2007-12-31 500 1100 700 1000\n", - "2008-12-31 900 1800 1200 1800\n", - "2009-12-31 1250 2450 1650 2500\n", - "2010-12-31 1640 3140 2140 3280\n", - "2011-12-31 2240 4040 2840 4480\n", - "2012-12-31 3140 5240 3840 6280\n", - "2013-12-31 3540 5940 4340 7080\n", - "2014-12-31 3840 6540 4740 7680\n", - "2015-12-31 3960 6960 4960 7920" - ] - }, - "execution_count": 201, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.cumsum()" - ] - }, - { - "cell_type": "code", - "execution_count": 202, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "boy 2.680685\n", - "child 2.680685\n", - "children 2.680685\n", - "girl 2.680685\n", - "dtype: float64" - ] - }, - "execution_count": 202, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.kurt()" - ] - }, - { - "cell_type": "code", - "execution_count": 203, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "boy 1.406834\n", - "child 1.406834\n", - "children 1.406834\n", - "girl 1.406834\n", - "dtype: float64" - ] - }, - "execution_count": 203, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.skew()" - ] - }, - { - "cell_type": "code", - "execution_count": 204, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
      \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
      boychildchildrengirl
      count10.00000010.00000010.00000010.000000
      mean396.000000696.000000496.000000792.000000
      std218.794678218.794678218.794678437.589356
      min120.000000420.000000220.000000240.000000
      25%300.000000600.000000400.000000600.000000
      50%370.000000670.000000470.000000740.000000
      75%400.000000700.000000500.000000800.000000
      max900.0000001200.0000001000.0000001800.000000
      \n", - "
      " - ], - "text/plain": [ - " boy child children girl\n", - "count 10.000000 10.000000 10.000000 10.000000\n", - "mean 396.000000 696.000000 496.000000 792.000000\n", - "std 218.794678 218.794678 218.794678 437.589356\n", - "min 120.000000 420.000000 220.000000 240.000000\n", - "25% 300.000000 600.000000 400.000000 600.000000\n", - "50% 370.000000 670.000000 470.000000 740.000000\n", - "75% 400.000000 700.000000 500.000000 800.000000\n", - "max 900.000000 1200.000000 1000.000000 1800.000000" - ] - }, - "execution_count": 204, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.describe()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 3. 查看DataFrame数据" - ] - }, - { - "cell_type": "code", - "execution_count": 205, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
      \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
      boychildchildrengirl
      2006-12-31200500300400
      2007-12-31300600400600
      2008-12-31400700500800
      2009-12-31350650450700
      2010-12-31390690490780
      \n", - "
      " - ], - "text/plain": [ - " boy child children girl\n", - "2006-12-31 200 500 300 400\n", - "2007-12-31 300 600 400 600\n", - "2008-12-31 400 700 500 800\n", - "2009-12-31 350 650 450 700\n", - "2010-12-31 390 690 490 780" - ] - }, - "execution_count": 205, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 206, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
      \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
      boychildchildrengirl
      2012-12-31900120010001800
      2013-12-31400700500800
      2014-12-31300600400600
      2015-12-31120420220240
      \n", - "
      " - ], - "text/plain": [ - " boy child children girl\n", - "2012-12-31 900 1200 1000 1800\n", - "2013-12-31 400 700 500 800\n", - "2014-12-31 300 600 400 600\n", - "2015-12-31 120 420 220 240" - ] - }, - "execution_count": 206, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.tail(4)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 与Series类似,一样可以利用head()与tail()查看数据的前几行与后几行。" - ] - }, - { - "cell_type": "code", - "execution_count": 207, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "DatetimeIndex(['2006-12-31', '2007-12-31', '2008-12-31', '2009-12-31',\n", - " '2010-12-31', '2011-12-31', '2012-12-31', '2013-12-31',\n", - " '2014-12-31', '2015-12-31'],\n", - " dtype='datetime64[ns]', freq='A-DEC')" - ] - }, - "execution_count": 207, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.index" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 查看index属性,index也可称为行索引" - ] - }, - { - "cell_type": "code", - "execution_count": 208, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[ 200, 500, 300, 400],\n", - " [ 300, 600, 400, 600],\n", - " [ 400, 700, 500, 800],\n", - " [ 350, 650, 450, 700],\n", - " [ 390, 690, 490, 780],\n", - " [ 600, 900, 700, 1200],\n", - " [ 900, 1200, 1000, 1800],\n", - " [ 400, 700, 500, 800],\n", - " [ 300, 600, 400, 600],\n", - " [ 120, 420, 220, 240]])" - ] - }, - "execution_count": 208, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.values" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 查看values属性,可见DataFrame对象的values是一个numpy的ndarray类型。" - ] - }, - { - "cell_type": "code", - "execution_count": 209, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "Index(['boy', 'child', 'children', 'girl'], dtype='object')" - ] - }, - "execution_count": 209, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.columns" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 查看columns属性,columns也可称为列索引。此时列标签是pandas的Index对象,类似list,其中有个三个元素,类型为`object`,在pandas中,非数字类型一般均为object类型。" - ] - }, - { - "cell_type": "code", - "execution_count": 210, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
      \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
      2006-12-31 00:00:002007-12-31 00:00:002008-12-31 00:00:002009-12-31 00:00:002010-12-31 00:00:002011-12-31 00:00:002012-12-31 00:00:002013-12-31 00:00:002014-12-31 00:00:002015-12-31 00:00:00
      boy200300400350390600900400300120
      child5006007006506909001200700600420
      children3004005004504907001000500400220
      girl40060080070078012001800800600240
      \n", - "
      " - ], - "text/plain": [ - " 2006-12-31 2007-12-31 2008-12-31 2009-12-31 2010-12-31 \\\n", - "boy 200 300 400 350 390 \n", - "child 500 600 700 650 690 \n", - "children 300 400 500 450 490 \n", - "girl 400 600 800 700 780 \n", - "\n", - " 2011-12-31 2012-12-31 2013-12-31 2014-12-31 2015-12-31 \n", - "boy 600 900 400 300 120 \n", - "child 900 1200 700 600 420 \n", - "children 700 1000 500 400 220 \n", - "girl 1200 1800 800 600 240 " - ] - }, - "execution_count": 210, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "dft = df.T\n", - "dft" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 可将DataFrame对象转置。\n", - "- 注意,转置并不改变原DataFrame对象,而是新生成一个DataFrame对象。" - ] - }, - { - "cell_type": "code", - "execution_count": 211, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "Index(['boy', 'child', 'children', 'girl'], dtype='object')" - ] - }, - "execution_count": 211, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "dft.index" - ] - }, - { - "cell_type": "code", - "execution_count": 212, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "DatetimeIndex(['2006-12-31', '2007-12-31', '2008-12-31', '2009-12-31',\n", - " '2010-12-31', '2011-12-31', '2012-12-31', '2013-12-31',\n", - " '2014-12-31', '2015-12-31'],\n", - " dtype='datetime64[ns]', freq='A-DEC')" - ] - }, - "execution_count": 212, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "dft.columns" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 转置后,index与columns的值互换" - ] - }, - { - "cell_type": "code", - "execution_count": 213, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
      \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
      boychildchildrengirl
      2015-12-31120420220240
      2014-12-31300600400600
      2013-12-31400700500800
      2012-12-31900120010001800
      2011-12-316009007001200
      2010-12-31390690490780
      2009-12-31350650450700
      2008-12-31400700500800
      2007-12-31300600400600
      2006-12-31200500300400
      \n", - "
      " - ], - "text/plain": [ - " boy child children girl\n", - "2015-12-31 120 420 220 240\n", - "2014-12-31 300 600 400 600\n", - "2013-12-31 400 700 500 800\n", - "2012-12-31 900 1200 1000 1800\n", - "2011-12-31 600 900 700 1200\n", - "2010-12-31 390 690 490 780\n", - "2009-12-31 350 650 450 700\n", - "2008-12-31 400 700 500 800\n", - "2007-12-31 300 600 400 600\n", - "2006-12-31 200 500 300 400" - ] - }, - "execution_count": 213, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.sort_index(ascending = False) " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 根据索引进行排序,默认是升序,并对行索引进行排序。定义逐行变化方向为0轴方向:axis=0\n", - "- `ascending = False`,使之降序排列" - ] - }, - { - "cell_type": "code", - "execution_count": 214, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
      \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
      girlchildrenchildboy
      2006-12-31400300500200
      2007-12-31600400600300
      2008-12-31800500700400
      2009-12-31700450650350
      2010-12-31780490690390
      2011-12-311200700900600
      2012-12-31180010001200900
      2013-12-31800500700400
      2014-12-31600400600300
      2015-12-31240220420120
      \n", - "
      " - ], - "text/plain": [ - " girl children child boy\n", - "2006-12-31 400 300 500 200\n", - "2007-12-31 600 400 600 300\n", - "2008-12-31 800 500 700 400\n", - "2009-12-31 700 450 650 350\n", - "2010-12-31 780 490 690 390\n", - "2011-12-31 1200 700 900 600\n", - "2012-12-31 1800 1000 1200 900\n", - "2013-12-31 800 500 700 400\n", - "2014-12-31 600 400 600 300\n", - "2015-12-31 240 220 420 120" - ] - }, - "execution_count": 214, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.sort_index(axis = 1, ascending = False) " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 将参数axis设为1,排序即按照列索引进行排序" - ] - }, - { - "cell_type": "code", - "execution_count": 215, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
      \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
      boychildchildrengirl
      2015-12-31120420220240
      2006-12-31200500300400
      2007-12-31300600400600
      2014-12-31300600400600
      2009-12-31350650450700
      2010-12-31390690490780
      2008-12-31400700500800
      2013-12-31400700500800
      2011-12-316009007001200
      2012-12-31900120010001800
      \n", - "
      " - ], - "text/plain": [ - " boy child children girl\n", - "2015-12-31 120 420 220 240\n", - "2006-12-31 200 500 300 400\n", - "2007-12-31 300 600 400 600\n", - "2014-12-31 300 600 400 600\n", - "2009-12-31 350 650 450 700\n", - "2010-12-31 390 690 490 780\n", - "2008-12-31 400 700 500 800\n", - "2013-12-31 400 700 500 800\n", - "2011-12-31 600 900 700 1200\n", - "2012-12-31 900 1200 1000 1800" - ] - }, - "execution_count": 215, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.sort_values(by='boy')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 根据值进行排序,如是根据某对应列的值进行排序,需要在参数by中指定数据列索引" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 4. 选择DataFrame数据\n", - "**4.1 列选择**" - ] - }, - { - "cell_type": "code", - "execution_count": 216, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "2006-12-31 200\n", - "2007-12-31 300\n", - "2008-12-31 400\n", - "2009-12-31 350\n", - "2010-12-31 390\n", - "2011-12-31 600\n", - "2012-12-31 900\n", - "2013-12-31 400\n", - "2014-12-31 300\n", - "2015-12-31 120\n", - "Freq: A-DEC, Name: boy, dtype: int32" - ] - }, - "execution_count": 216, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df['boy']" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 利用列索引选择一列,将返回该列,且为Series对象。也可以用`df.boy`来访问,效果相同。" - ] - }, - { - "cell_type": "code", - "execution_count": 217, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
      \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
      boy
      2006-12-31200
      2007-12-31300
      2008-12-31400
      2009-12-31350
      2010-12-31390
      2011-12-31600
      2012-12-31900
      2013-12-31400
      2014-12-31300
      2015-12-31120
      \n", - "
      " - ], - "text/plain": [ - " boy\n", - "2006-12-31 200\n", - "2007-12-31 300\n", - "2008-12-31 400\n", - "2009-12-31 350\n", - "2010-12-31 390\n", - "2011-12-31 600\n", - "2012-12-31 900\n", - "2013-12-31 400\n", - "2014-12-31 300\n", - "2015-12-31 120" - ] - }, - "execution_count": 217, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df[['boy']]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 指定一个列标签,放入list中,可以获取对应colums标签的列,返回DataFrame对象。" - ] - }, - { - "cell_type": "code", - "execution_count": 218, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
      \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
      boychildren
      2006-12-31200300
      2007-12-31300400
      2008-12-31400500
      2009-12-31350450
      2010-12-31390490
      2011-12-31600700
      2012-12-319001000
      2013-12-31400500
      2014-12-31300400
      2015-12-31120220
      \n", - "
      " - ], - "text/plain": [ - " boy children\n", - "2006-12-31 200 300\n", - "2007-12-31 300 400\n", - "2008-12-31 400 500\n", - "2009-12-31 350 450\n", - "2010-12-31 390 490\n", - "2011-12-31 600 700\n", - "2012-12-31 900 1000\n", - "2013-12-31 400 500\n", - "2014-12-31 300 400\n", - "2015-12-31 120 220" - ] - }, - "execution_count": 218, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df[['boy','children']]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 利用指定多个列标签colums的list,可以获取对应colums标签的列,返回DataFrame对象。" - ] - }, - { - "cell_type": "code", - "execution_count": 219, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
      \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
      boychildren
      2006-12-31200300
      2007-12-31300400
      2008-12-31400500
      2009-12-31350450
      2010-12-31390490
      2011-12-31600700
      2012-12-319001000
      2013-12-31400500
      2014-12-31300400
      2015-12-31120220
      \n", - "
      " - ], - "text/plain": [ - " boy children\n", - "2006-12-31 200 300\n", - "2007-12-31 300 400\n", - "2008-12-31 400 500\n", - "2009-12-31 350 450\n", - "2010-12-31 390 490\n", - "2011-12-31 600 700\n", - "2012-12-31 900 1000\n", - "2013-12-31 400 500\n", - "2014-12-31 300 400\n", - "2015-12-31 120 220" - ] - }, - "execution_count": 219, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df[[0,2]]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 利用代表列整数索引的list,可以获取对应colums标签的列,返回DataFrame对象。" - ] - }, - { - "cell_type": "code", - "execution_count": 220, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "2006-12-31 200\n", - "2007-12-31 300\n", - "2008-12-31 400\n", - "2009-12-31 350\n", - "2010-12-31 390\n", - "2011-12-31 600\n", - "2012-12-31 900\n", - "2013-12-31 400\n", - "2014-12-31 300\n", - "2015-12-31 120\n", - "Freq: A-DEC, Name: boy, dtype: int32" - ] - }, - "execution_count": 220, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - " df.loc[:,'boy']" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 也可以利用DataFrame的loc属性进行列选取\n", - "- loc属性主要通过标签进行数据选取\n", - "- 其中第一个位置参数表示行方向(即axis=0)元素,为`:`即为全部选取\n", - "- 第二个位置参数表示列方向(即axis=1)元素,选取当前指定列标签的数据\n", - "- 返回一个Series对象" - ] - }, - { - "cell_type": "code", - "execution_count": 221, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
      \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
      boy
      2006-12-31200
      2007-12-31300
      2008-12-31400
      2009-12-31350
      2010-12-31390
      2011-12-31600
      2012-12-31900
      2013-12-31400
      2014-12-31300
      2015-12-31120
      \n", - "
      " - ], - "text/plain": [ - " boy\n", - "2006-12-31 200\n", - "2007-12-31 300\n", - "2008-12-31 400\n", - "2009-12-31 350\n", - "2010-12-31 390\n", - "2011-12-31 600\n", - "2012-12-31 900\n", - "2013-12-31 400\n", - "2014-12-31 300\n", - "2015-12-31 120" - ] - }, - "execution_count": 221, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - " df.loc[:,['boy']]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 与前类似,如在list中指定列标签,则返回一个DataFrame对象" - ] - }, - { - "cell_type": "code", - "execution_count": 222, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
      \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
      boygirl
      2006-12-31200400
      2007-12-31300600
      2008-12-31400800
      2009-12-31350700
      2010-12-31390780
      2011-12-316001200
      2012-12-319001800
      2013-12-31400800
      2014-12-31300600
      2015-12-31120240
      \n", - "
      " - ], - "text/plain": [ - " boy girl\n", - "2006-12-31 200 400\n", - "2007-12-31 300 600\n", - "2008-12-31 400 800\n", - "2009-12-31 350 700\n", - "2010-12-31 390 780\n", - "2011-12-31 600 1200\n", - "2012-12-31 900 1800\n", - "2013-12-31 400 800\n", - "2014-12-31 300 600\n", - "2015-12-31 120 240" - ] - }, - "execution_count": 222, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.loc[:,['boy', 'girl']]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 与前类似,可以选择多个列,返回一个DataFrame对象" - ] - }, - { - "cell_type": "code", - "execution_count": 223, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
      \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
      boychildchildrengirl
      2006-12-31200500300400
      2007-12-31300600400600
      2008-12-31400700500800
      2009-12-31350650450700
      2010-12-31390690490780
      2011-12-316009007001200
      2012-12-31900120010001800
      2013-12-31400700500800
      2014-12-31300600400600
      2015-12-31120420220240
      \n", - "
      " - ], - "text/plain": [ - " boy child children girl\n", - "2006-12-31 200 500 300 400\n", - "2007-12-31 300 600 400 600\n", - "2008-12-31 400 700 500 800\n", - "2009-12-31 350 650 450 700\n", - "2010-12-31 390 690 490 780\n", - "2011-12-31 600 900 700 1200\n", - "2012-12-31 900 1200 1000 1800\n", - "2013-12-31 400 700 500 800\n", - "2014-12-31 300 600 400 600\n", - "2015-12-31 120 420 220 240" - ] - }, - "execution_count": 223, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.loc[:,'boy': 'girl']" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 可以利用列索引进行切片选取\n", - "- 注意切片是两端包含\n", - "- 注意切片不需要在list中" - ] - }, - { - "cell_type": "code", - "execution_count": 224, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "2006-12-31 200\n", - "2007-12-31 300\n", - "2008-12-31 400\n", - "2009-12-31 350\n", - "2010-12-31 390\n", - "2011-12-31 600\n", - "2012-12-31 900\n", - "2013-12-31 400\n", - "2014-12-31 300\n", - "2015-12-31 120\n", - "Freq: A-DEC, Name: boy, dtype: int32" - ] - }, - "execution_count": 224, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.iloc[:,0]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 还可以利用DataFrame的iloc属性进行列选取\n", - "- iloc属性也称为位置(position)属性,主要通过位置(即对应整数索引)进行数据选取\n", - "- 其中第一个位置参数仍然表示行方向(即axis=0)元素,为`:`即为全部选取\n", - "- 第二个位置参数仍然表示列方向(即axis=1)元素,选取当前指定列标签的数据\n", - "- 返回一个Series对象" - ] - }, - { - "cell_type": "code", - "execution_count": 225, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
      \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
      child
      2006-12-31500
      2007-12-31600
      2008-12-31700
      2009-12-31650
      2010-12-31690
      2011-12-31900
      2012-12-311200
      2013-12-31700
      2014-12-31600
      2015-12-31420
      \n", - "
      " - ], - "text/plain": [ - " child\n", - "2006-12-31 500\n", - "2007-12-31 600\n", - "2008-12-31 700\n", - "2009-12-31 650\n", - "2010-12-31 690\n", - "2011-12-31 900\n", - "2012-12-31 1200\n", - "2013-12-31 700\n", - "2014-12-31 600\n", - "2015-12-31 420" - ] - }, - "execution_count": 225, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.iloc[:,[1]]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 与前类似,如在list中指定列位置,则返回一个DataFrame对象" - ] - }, - { - "cell_type": "code", - "execution_count": 226, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
      \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
      childchildren
      2006-12-31500300
      2007-12-31600400
      2008-12-31700500
      2009-12-31650450
      2010-12-31690490
      2011-12-31900700
      2012-12-3112001000
      2013-12-31700500
      2014-12-31600400
      2015-12-31420220
      \n", - "
      " - ], - "text/plain": [ - " child children\n", - "2006-12-31 500 300\n", - "2007-12-31 600 400\n", - "2008-12-31 700 500\n", - "2009-12-31 650 450\n", - "2010-12-31 690 490\n", - "2011-12-31 900 700\n", - "2012-12-31 1200 1000\n", - "2013-12-31 700 500\n", - "2014-12-31 600 400\n", - "2015-12-31 420 220" - ] - }, - "execution_count": 226, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.iloc[:,[1,2]]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 与前类似,可以根据位置选择多个列,返回一个DataFrame对象" - ] - }, - { - "cell_type": "code", - "execution_count": 227, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
      \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
      boychild
      2006-12-31200500
      2007-12-31300600
      2008-12-31400700
      2009-12-31350650
      2010-12-31390690
      2011-12-31600900
      2012-12-319001200
      2013-12-31400700
      2014-12-31300600
      2015-12-31120420
      \n", - "
      " - ], - "text/plain": [ - " boy child\n", - "2006-12-31 200 500\n", - "2007-12-31 300 600\n", - "2008-12-31 400 700\n", - "2009-12-31 350 650\n", - "2010-12-31 390 690\n", - "2011-12-31 600 900\n", - "2012-12-31 900 1200\n", - "2013-12-31 400 700\n", - "2014-12-31 300 600\n", - "2015-12-31 120 420" - ] - }, - "execution_count": 227, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.iloc[:,0:2]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 与前类似,可以通过列位置进行切片选择多个列,返回一个DataFrame对象" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**4.2 行选择**" - ] - }, - { - "cell_type": "code", - "execution_count": 228, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "boy 200\n", - "child 500\n", - "children 300\n", - "girl 400\n", - "Name: 2006-12-31 00:00:00, dtype: int32" - ] - }, - "execution_count": 228, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.loc[years[0]]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 利用DataFrame的loc属性也可以进行行选取\n", - "- loc属性主要通过标签进行数据选取\n", - "- 其中第一个位置参数表示行方向(即axis=0)元素\n", - "- 第二个位置参数表示列方向(即axis=1)元素,不指定时,默认为全部选取\n", - "- 返回一个Series对象" - ] - }, - { - "cell_type": "code", - "execution_count": 229, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
      \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
      boychildchildrengirl
      2006-12-31200500300400
      \n", - "
      " - ], - "text/plain": [ - " boy child children girl\n", - "2006-12-31 200 500 300 400" - ] - }, - "execution_count": 229, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.loc[[years[0]]]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 与前类似,如在list中指定行标签,则可选择该行,并返回一个DataFrame对象" - ] - }, - { - "cell_type": "code", - "execution_count": 230, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
      \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
      boychildchildrengirl
      2006-12-31200500300400
      2008-12-31400700500800
      \n", - "
      " - ], - "text/plain": [ - " boy child children girl\n", - "2006-12-31 200 500 300 400\n", - "2008-12-31 400 700 500 800" - ] - }, - "execution_count": 230, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.loc[[years[0], years[2]]]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 与前类似,如在list中指定多个行标签,则可选择多行,并返回一个DataFrame对象" - ] - }, - { - "cell_type": "code", - "execution_count": 231, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
      \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
      boychildchildrengirl
      2006-12-31200500300400
      2007-12-31300600400600
      2008-12-31400700500800
      \n", - "
      " - ], - "text/plain": [ - " boy child children girl\n", - "2006-12-31 200 500 300 400\n", - "2007-12-31 300 600 400 600\n", - "2008-12-31 400 700 500 800" - ] - }, - "execution_count": 231, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.loc[years[0]: years[2]]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 与前类似,还可以利用标签切片来选择多行,并返回一个DataFrame对象" - ] - }, - { - "cell_type": "code", - "execution_count": 232, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "boy 200\n", - "child 500\n", - "children 300\n", - "girl 400\n", - "Name: 2006-12-31 00:00:00, dtype: int32" - ] - }, - "execution_count": 232, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.iloc[0]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 还可以利用DataFrame的iloc属性进行行选取\n", - "- iloc属性也称为位置(position)属性,主要通过位置(即对应整数索引)进行数据选取\n", - "- 其中第一个位置参数仍然表示行方向(即axis=0)元素\n", - "- 第二个位置参数仍然表示列方向(即axis=1)元素,不指定时,默认为全部选取\n", - "- 返回一个Series对象" - ] - }, - { - "cell_type": "code", - "execution_count": 233, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
      \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
      boychildchildrengirl
      2006-12-31200500300400
      \n", - "
      " - ], - "text/plain": [ - " boy child children girl\n", - "2006-12-31 200 500 300 400" - ] - }, - "execution_count": 233, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.iloc[[0]]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 与前类似,如在list中指定行位置,则返回一个DataFrame对象" - ] - }, - { - "cell_type": "code", - "execution_count": 234, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
      \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
      boychildchildrengirl
      2006-12-31200500300400
      2007-12-31300600400600
      2008-12-31400700500800
      \n", - "
      " - ], - "text/plain": [ - " boy child children girl\n", - "2006-12-31 200 500 300 400\n", - "2007-12-31 300 600 400 600\n", - "2008-12-31 400 700 500 800" - ] - }, - "execution_count": 234, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.iloc[[0,1,2]]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 与前类似,可以根据位置选择多个行,返回一个DataFrame对象" - ] - }, - { - "cell_type": "code", - "execution_count": 235, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
      \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
      boychildchildrengirl
      2007-12-31300600400600
      2008-12-31400700500800
      \n", - "
      " - ], - "text/plain": [ - " boy child children girl\n", - "2007-12-31 300 600 400 600\n", - "2008-12-31 400 700 500 800" - ] - }, - "execution_count": 235, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.iloc[1:3]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 与前类似,可以根据位置进行切片选择多个行,返回一个DataFrame对象" - ] - }, - { - "cell_type": "code", - "execution_count": 236, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
      \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
      boychildchildrengirl
      2006-12-31200500300400
      2007-12-31300600400600
      2008-12-31400700500800
      \n", - "
      " - ], - "text/plain": [ - " boy child children girl\n", - "2006-12-31 200 500 300 400\n", - "2007-12-31 300 600 400 600\n", - "2008-12-31 400 700 500 800" - ] - }, - "execution_count": 236, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df[0:3]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 可以利用行切片,选取多行数据,返回一个DataFrame对象\n", - "- 个人觉得容易与选取列数据的混淆,不建议使用" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**4.3 选择区块**" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**4.3.1 利用loc**" - ] - }, - { - "cell_type": "code", - "execution_count": 237, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "200" - ] - }, - "execution_count": 237, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.loc[years[0],'boy']" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 利用loc,可以选择指定行标签、列标签的数据" - ] - }, - { - "cell_type": "code", - "execution_count": 238, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "boy 200\n", - "Name: 2006-12-31 00:00:00, dtype: int32" - ] - }, - "execution_count": 238, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.loc[years[0],['boy']]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 利用loc,指定行标签,在list中指定一个列标签,可以选择指定行列的数据\n", - "- 返回一个Series" - ] - }, - { - "cell_type": "code", - "execution_count": 239, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
      \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
      boy
      2006-12-31200
      \n", - "
      " - ], - "text/plain": [ - " boy\n", - "2006-12-31 200" - ] - }, - "execution_count": 239, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.loc[[years[0]],['boy']]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 利用loc,在list中指定一个行标签,在list中指定一个列标签,可以选择指定行列的数据\n", - "- 返回一个DataFrame对象" - ] - }, - { - "cell_type": "code", - "execution_count": 240, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "boy 200\n", - "girl 400\n", - "Name: 2006-12-31 00:00:00, dtype: int32" - ] - }, - "execution_count": 240, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.loc[years[0],['boy', 'girl']]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 利用loc,指定行标签,在list中指定多个列标签,可以选择指定行的多个列的数据\n", - "- 返回一个Series" - ] - }, - { - "cell_type": "code", - "execution_count": 241, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "boy 200\n", - "child 500\n", - "children 300\n", - "girl 400\n", - "Name: 2006-12-31 00:00:00, dtype: int32" - ] - }, - "execution_count": 241, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.loc[years[0],'boy':'girl']" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 与前类似,还可以切片选择给定行的多列数据\n", - "- 返回一个Series" - ] - }, - { - "cell_type": "code", - "execution_count": 242, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
      \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
      boychildchildrengirl
      2006-12-31200500300400
      \n", - "
      " - ], - "text/plain": [ - " boy child children girl\n", - "2006-12-31 200 500 300 400" - ] - }, - "execution_count": 242, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.loc[[years[0]],'boy':'girl']" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 与前类似,但是将返回一个DataFrame对象" - ] - }, - { - "cell_type": "code", - "execution_count": 243, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
      \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
      boychildchildrengirl
      2006-12-31200500300400
      2007-12-31300600400600
      2008-12-31400700500800
      \n", - "
      " - ], - "text/plain": [ - " boy child children girl\n", - "2006-12-31 200 500 300 400\n", - "2007-12-31 300 600 400 600\n", - "2008-12-31 400 700 500 800" - ] - }, - "execution_count": 243, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.loc[years[0]:years[2],'boy':'girl']" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 行列标签切片,选择对应数据\n", - "- 利用loc方式的行与列均可以如上类似处理" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**4.3.2 利用iloc**\n", - "\n", - "利用iloc进行区域选择的方式与loc基本类似,只是利用位置而非标签信息进行选取,请参照前面理解" - ] - }, - { - "cell_type": "code", - "execution_count": 244, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "200" - ] - }, - "execution_count": 244, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.iloc[0,0]" - ] - }, - { - "cell_type": "code", - "execution_count": 245, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "boy 200\n", - "child 500\n", - "children 300\n", - "Name: 2006-12-31 00:00:00, dtype: int32" - ] - }, - "execution_count": 245, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.iloc[0,[0,1,2]]" - ] - }, - { - "cell_type": "code", - "execution_count": 246, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "2006-12-31 200\n", - "2007-12-31 300\n", - "2008-12-31 400\n", - "Freq: A-DEC, Name: boy, dtype: int32" - ] - }, - "execution_count": 246, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.iloc[[0,1,2],0]" - ] - }, - { - "cell_type": "code", - "execution_count": 247, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
      \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
      childchildren
      2006-12-31500300
      2007-12-31600400
      2008-12-31700500
      \n", - "
      " - ], - "text/plain": [ - " child children\n", - "2006-12-31 500 300\n", - "2007-12-31 600 400\n", - "2008-12-31 700 500" - ] - }, - "execution_count": 247, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.iloc[[0,1,2],[1, 2]]" - ] - }, - { - "cell_type": "code", - "execution_count": 248, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
      \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
      childchildren
      2006-12-31500300
      2007-12-31600400
      \n", - "
      " - ], - "text/plain": [ - " child children\n", - "2006-12-31 500 300\n", - "2007-12-31 600 400" - ] - }, - "execution_count": 248, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.iloc[0:2,[1, 2]]" - ] - }, - { - "cell_type": "code", - "execution_count": 249, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
      \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
      boychildchildren
      2006-12-31200500300
      2007-12-31300600400
      2008-12-31400700500
      2009-12-31350650450
      2010-12-31390690490
      \n", - "
      " - ], - "text/plain": [ - " boy child children\n", - "2006-12-31 200 500 300\n", - "2007-12-31 300 600 400\n", - "2008-12-31 400 700 500\n", - "2009-12-31 350 650 450\n", - "2010-12-31 390 690 490" - ] - }, - "execution_count": 249, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.iloc[0:5,0:3]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**4.3.3 利用iat选择单个元素**" - ] - }, - { - "cell_type": "code", - "execution_count": 250, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "600" - ] - }, - "execution_count": 250, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.iat[1,1]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 在以上进行行、列选取的各类方法中,推荐使用loc及iloc方法,虽然稍显繁琐,但是逻辑较为严密,且性能更优。" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 5. 条件选择DataFrame数据(布尔索引)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 对DataFrame按照条件来选择数据较为方便记忆的方式是:`对象[布尔索引]`,其中对象可以是整个DataFrame对象,也可以是DataFrame经过前一部分选择出的列、行或者区块。注意布尔索引要与选择出的数据对齐。\n", - "### 达到数据选择结果的方法较为多样,但为避免造成记忆及使用的混乱,其他条件选择数据的方式本教程不予介绍。" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 5.1 列" - ] - }, - { - "cell_type": "code", - "execution_count": 251, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "2006-12-31 False\n", - "2007-12-31 False\n", - "2008-12-31 False\n", - "2009-12-31 False\n", - "2010-12-31 False\n", - "2011-12-31 True\n", - "2012-12-31 True\n", - "2013-12-31 False\n", - "2014-12-31 False\n", - "2015-12-31 False\n", - "Freq: A-DEC, Name: boy, dtype: bool" - ] - }, - "execution_count": 251, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.boy > 400" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 与Series中的类似,是每个元素比较后的布尔值\n", - "- 返回一个Series" - ] - }, - { - "cell_type": "code", - "execution_count": 252, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
      \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
      boychildchildrengirl
      2011-12-316009007001200
      2012-12-31900120010001800
      \n", - "
      " - ], - "text/plain": [ - " boy child children girl\n", - "2011-12-31 600 900 700 1200\n", - "2012-12-31 900 1200 1000 1800" - ] - }, - "execution_count": 252, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - " df[df.boy > 400]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 可利用DataFrame对象的某一列数据,进行布尔运算,根据布尔运算的结果过滤数据\n", - "- 返回一个DataFrame对象" - ] - }, - { - "cell_type": "code", - "execution_count": 253, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
      \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
      boychildchildrengirl
      2011-12-316009007001200
      2012-12-31900120010001800
      \n", - "
      " - ], - "text/plain": [ - " boy child children girl\n", - "2011-12-31 600 900 700 1200\n", - "2012-12-31 900 1200 1000 1800" - ] - }, - "execution_count": 253, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df[(df.boy >300) & (df.girl > 900)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 可利用DataFrame对象的多列数据,进行多个布尔运算,注意用括号括起每个部分,表示`and`操作用`&`,'or'用`|`,`not`用`~`。\n", - "- 返回一个DataFrame对象" - ] - }, - { - "cell_type": "code", - "execution_count": 254, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "2008-12-31 800\n", - "2009-12-31 700\n", - "2010-12-31 780\n", - "2011-12-31 1200\n", - "2012-12-31 1800\n", - "2013-12-31 800\n", - "Freq: A-DEC, Name: girl, dtype: int32" - ] - }, - "execution_count": 254, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df['girl'][df.boy >300]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 选择df中的一列,再根据布尔索引进行过滤选择\n", - "- 返回一个Series" - ] - }, - { - "cell_type": "code", - "execution_count": 255, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
      \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
      girl
      2008-12-31800
      2009-12-31700
      2010-12-31780
      2011-12-311200
      2012-12-311800
      2013-12-31800
      \n", - "
      " - ], - "text/plain": [ - " girl\n", - "2008-12-31 800\n", - "2009-12-31 700\n", - "2010-12-31 780\n", - "2011-12-31 1200\n", - "2012-12-31 1800\n", - "2013-12-31 800" - ] - }, - "execution_count": 255, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df[['girl']][df.boy >300]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 与前类似,但返回一个DataFrame对象" - ] - }, - { - "cell_type": "code", - "execution_count": 256, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
      \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
      girlchild
      2011-12-311200900
      2012-12-3118001200
      \n", - "
      " - ], - "text/plain": [ - " girl child\n", - "2011-12-31 1200 900\n", - "2012-12-31 1800 1200" - ] - }, - "execution_count": 256, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df[['girl', 'child']][(df.boy >300) & (df.girl > 900)]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 选择多列,并用组合的布尔索引进行数据选择" - ] - }, - { - "cell_type": "code", - "execution_count": 257, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "2006-12-31 False\n", - "2007-12-31 False\n", - "2008-12-31 True\n", - "2009-12-31 True\n", - "2010-12-31 False\n", - "2011-12-31 False\n", - "2012-12-31 False\n", - "2013-12-31 True\n", - "2014-12-31 False\n", - "2015-12-31 False\n", - "Freq: A-DEC, Name: girl, dtype: bool" - ] - }, - "execution_count": 257, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df['girl'].isin([700,800])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 对Series对象应用`isin()`函数,是判断该Series中的values是否在给定的数据表中\n", - "- 返回一个都是布尔值的Series" - ] - }, - { - "cell_type": "code", - "execution_count": 258, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
      \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
      boychildchildrengirl
      2008-12-31400700500800
      2009-12-31350650450700
      2013-12-31400700500800
      \n", - "
      " - ], - "text/plain": [ - " boy child children girl\n", - "2008-12-31 400 700 500 800\n", - "2009-12-31 350 650 450 700\n", - "2013-12-31 400 700 500 800" - ] - }, - "execution_count": 258, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df[df['girl'].isin([700,800])]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 利用isin()函数,选择某列数据进行数据过滤" - ] - }, - { - "cell_type": "code", - "execution_count": 259, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
      \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
      girlchildren
      2008-12-31800500
      2009-12-31700450
      2013-12-31800500
      \n", - "
      " - ], - "text/plain": [ - " girl children\n", - "2008-12-31 800 500\n", - "2009-12-31 700 450\n", - "2013-12-31 800 500" - ] - }, - "execution_count": 259, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df[['girl', 'children']][df['girl'].isin([700,800])]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 选择后利用isin生成的布尔索引进行数据选择" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 5.2 行\n", - "\n", - "- pandas以布尔索引选择行数据的功能至今较弱" - ] - }, - { - "cell_type": "code", - "execution_count": 260, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "boy False\n", - "child True\n", - "children False\n", - "girl True\n", - "Name: 2007-12-31 00:00:00, dtype: bool" - ] - }, - "execution_count": 260, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.loc[years[1]]>500" - ] - }, - { - "cell_type": "code", - "execution_count": 261, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "child 500\n", - "girl 400\n", - "Name: 2006-12-31 00:00:00, dtype: int32" - ] - }, - "execution_count": 261, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.loc[years[0]][df.loc[years[1]]>500]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 但是暂时还无法将以往行对象选择后,应用`对象[行条件]`的方式进行条件数据选取,个人认为是pandas设计没有考虑周全的地方。虽然布尔索引选择行数据的应用场景较少。" - ] - }, - { - "cell_type": "code", - "execution_count": 262, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "
      \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
      childgirl
      2006-12-31500400
      2007-12-31600600
      \n", - "
      " - ], - "text/plain": [ - " child girl\n", - "2006-12-31 500 400\n", - "2007-12-31 600 600" - ] - }, - "execution_count": 262, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.T[[years[0],years[1]]][df.loc[years[2]]>500].T" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 如确有需求,可以对DataFrame对象进行转置,然后利用列布尔选择,再转置" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.0" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} From c5d8ca56ece8213f10e947eabe9c7b5484e0ed02 Mon Sep 17 00:00:00 2001 From: liupengyuan Date: Sun, 22 Oct 2017 01:04:03 +0800 Subject: [PATCH 38/44] Delete pandas+Tutorial+Series.ipynb --- chapter4/pandas+Tutorial+Series.ipynb | 3726 ------------------------- 1 file changed, 3726 deletions(-) delete mode 100644 chapter4/pandas+Tutorial+Series.ipynb diff --git a/chapter4/pandas+Tutorial+Series.ipynb b/chapter4/pandas+Tutorial+Series.ipynb deleted file mode 100644 index e97ad8ad7..000000000 --- a/chapter4/pandas+Tutorial+Series.ipynb +++ /dev/null @@ -1,3726 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Pandas统计分析入门(1)\n", - "- 转载注明转自:https://github.com/liupengyuan/\n", - "- ## Pandas及相关python库简介\n", - "- ## 一维数据统计分析(Series基础)\n", - "- ## 二维数据统计分析(DataFrame基础)\n", - "- ## Visualization基础\n", - "---\n", - "## Pandas 简介\n", - "\n", - " pandas is a Python package providing fast, flexible, and expressive data structures designed to make working with “relational” or “labeled” data both easy and intuitive. It aims to be the fundamental high-level building block for doing practical, real world data analysis in Python. Additionally, it has the broader goal of becoming the most powerful and flexible open source data analysis / manipulation tool available in any language. It is already well on its way toward this goal.\n", - "\n", - "## Numpy 简介\n", - "\n", - " NumPy is the fundamental package for scientific computing with Python. It contains among other things:\n", - "- a powerful N-dimensional array object\n", - "- sophisticated (broadcasting) functions\n", - "- tools for integrating C/C++ and Fortran code\n", - "- useful linear algebra, Fourier transform, and random number capabilities\n", - "\n", - "## Matplotlib 简介\n", - "\n", - "Matplotlib是一个Python的2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。\n", - "通过Matplotlib,开发者可以仅需要几行代码,便可以生成绘图,直方图,功率谱,条形图,错误图,散点图等。\n", - "\n", - "## Seaborn 简介\n", - "\n", - "Seaborn is a library for making attractive and informative statistical graphics in Python. It is built on top of matplotlib and tightly integrated with the PyData stack, including support for numpy and pandas data structures and statistical routines from scipy and statsmodels.\n", - "\n", - "---" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- ## 程序头部引入" - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "%matplotlib inline\n", - "from pandas import Series, DataFrame\n", - "import pandas as pd\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "import seaborn as sns" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "以上引入各类利用pandas做数据分析可视化的模块,一般可作为每次数据分析项目/任务的起始代码,其中:\n", - "- `%matplotlib inline`是jupyter notebook的一个魔法命令,能够使基于matplotlib的绘图直接显示在网页中\n", - "- `from pandas import Series, DataFrame`,从pandas中引入最为常用的两个对象:Series及DataFrame\n", - "\n", - "**注意**,在以上的引入中,类似`pd`、`np`、`plt`及`sns`均为约定俗成的习惯性名称,**不建议**更改。\n", - "\n", - "---" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 一、一维数据统计分析(Series基础)\n", - "\n", - "- 数据的描述、分析、可视化展示、概括性度量、输入与输出" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 1. Series对象及数据最基本展示\n", - "\n", - "- 将以一个词频统计结果的实例,进行介绍。\n", - "- 教程中的各个代码段,请自行建立新的python程序,依次键入并顺序执行,观察执行结果。\n", - "- Series是pandas最重要最基础的数据对象,可用来表示数据表中的一列或一行。" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "words_freq = [200,300,400,350,390,600,900,400,300,120]\n", - "freq_dict = {'天长地久':words_freq}\n", - "total_words_freq = [12345000,23456000,22333000,45632000,11144000,65433000,44444000,55555000,34522000,55566000]\n", - "years = [2006,2007,2008,2009,2010,2011,2012,2013,2014,2015]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "以上代码中:\n", - "- `words_freq`,是“天长地久”在2006-2015年10年之间的频次list\n", - "- `freq_dict`,键为“天长地久”,值为其历时频次的list\n", - "- `total_words_freq`,是每年统计文本语料的总字数list\n", - "- `years`,是年份list" - ] - }, - { - "cell_type": "code", - "execution_count": 42, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "0 200\n", - "1 300\n", - "2 400\n", - "3 350\n", - "4 390\n", - "5 600\n", - "6 900\n", - "7 400\n", - "8 300\n", - "9 120\n", - "dtype: int64" - ] - }, - "execution_count": 42, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s = Series(words_freq)\n", - "s" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "利用list来初始化Series对象。Series是pandas内置的处理一维数据的数据类型。\n", - "- 第一列为Series对象的索引(index),默认为数字索引;\n", - "- 第二列为Series对象的值(value)\n", - "- 最后一行说明,Series对象的值为int64类型" - ] - }, - { - "cell_type": "code", - "execution_count": 43, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "2006 200\n", - "2007 300\n", - "2008 400\n", - "2009 350\n", - "2010 390\n", - "2011 600\n", - "2012 900\n", - "2013 400\n", - "2014 300\n", - "2015 120\n", - "dtype: int64" - ] - }, - "execution_count": 43, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s = Series(freq_dict['天长地久'], index = years)\n", - "s" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "可以在初始化Series对象时,同时指定索引(index)" - ] - }, - { - "cell_type": "code", - "execution_count": 44, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "year\n", - "2006 200\n", - "2007 300\n", - "2008 400\n", - "2009 350\n", - "2010 390\n", - "2011 600\n", - "2012 900\n", - "2013 400\n", - "2014 300\n", - "2015 120\n", - "Name: 2006-2015, dtype: int64" - ] - }, - "execution_count": 44, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s.name = '2006-2015'\n", - "s.index.name = 'year'\n", - "s" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "还可以指定Series对象的名称(name),指定其索引(index)的名称(name)" - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 45, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\nbiels+1rEIIAAAAASUVORK5CYII=\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "s.plot()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Series对象可利用pandas内置的plot()直接绘图,默认为折线图。\n", - "\n", - "**折线图**多用于展示**数值型数据**,特别是用于展示历时数据。\n", - "\n", - "统计学中,依据计量尺度,一般可将数据分为三种类型:\n", - "- 分类数据\n", - "- 顺序数据(定序数据)\n", - "- 数值型数据(定量数据)" - ] - }, - { - "cell_type": "code", - "execution_count": 46, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 46, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXUAAAETCAYAAADJUJaPAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAElFJREFUeJzt3X2QXXV9x/H3hs2D2E0adRE74tN0+BbHiY60jIohUYk8\nVEyrMyoWrVIQO4yopaPBBMd2QqGtpNMIjBLNQH0YHyIUyUx8qCiG2A5WUWHEr1KrMkOrGV2SpYEg\nsP3j3CU76z4le/fs7/72/ZrJcPecu+d8uHf3c3/7u+ec2zcyMoIkqQ6L5juAJKl7LHVJqoilLkkV\nsdQlqSKWuiRVxFKXpIr0z+fO9+4dnvXxlCtXHs3Q0IFuxOnpDKXkKCFDKTlKyFBKjhIylJKjGxkG\nBwf6JlvX8yP1/v6j5jtCERmgjBwlZIAycpSQAcrIUUIGKCPHXGfo+VKXJB1iqUtSRSx1SaqIpS5J\nFbHUJakilrokVcRSl6SKWOqSVJF5PaNU0uyce8Uts97G9g0v70ISlcKRuiRVxFKXpIpY6pJUEUtd\nkipiqUtSRSx1SaqIpS5JFbHUJakilrokVcRSl6SKWOqSVBFLXZIqYqlLUkUsdUmqiKUuSRWx1CWp\nIpa6JFXEUpekiljqklSRaT+jNCIWA9cDzwIeBc4HHgGuA0aAu4ALM/OxiDgfuKCzfnNm7pyb2JKk\nicxkpH4m0J+ZLwH+FrgM2AJsyszVQB+wPiKOBS4CTgZOAy6PiKVzE1uSNJGZlPqPgP6IWAQsB34D\nnAjc2lm/CzgVOAnYk5kHM3MfcA+wqvuRJUmTmXb6BXiAZurlh8BTgFcBp2TmSGf9MLCCpvD3jfm+\n0eWTWrnyaPr7jzrMyL9tcHBg1tuoIQOUkaOEDFBGjhIyTKetjKU8FiXkmMsMMyn1dwNfysxLIuI4\n4BZgyZj1A8D9wP7O7fHLJzU0dODw0k5gcHCAvXuHZ72dXs9QSo4SMpSSo4QMM9FGxlIeixJydCPD\nVC8KM5l+GeLQCPzXwGLgjohY21l2BrAbuB1YHRHLImIFcALNm6iSpJbMZKT+T8D2iNhNM0J/H/Cf\nwLaIWALcDezIzEcjYitNwS8CNmbmQ3OUW5I0gWlLPTMfAF43wao1E9x3G7CtC7kkSUfAk48kqSKW\nuiRVxFKXpIpY6pJUEUtdkipiqUtSRSx1SaqIpS5JFbHUJakilrokVcRSl6SKWOqSVBFLXZIqYqlL\nUkUsdUmqiKUuSRWx1CWpIpa6JFXEUpekiljqklQRS12SKmKpS1JFLHVJqoilLkkVsdQlqSKWuiRV\nxFKXpIpY6pJUEUtdkipiqUtSRSx1SaqIpS5JFbHUJakilrokVcRSl6SKWOqSVBFLXZIqYqlLUkX6\nZ3KniLgEeDWwBLgGuBW4DhgB7gIuzMzHIuJ84ALgEWBzZu6ci9CSpIlNO1KPiLXAS4CTgTXAccAW\nYFNmrgb6gPURcSxwUed+pwGXR8TSOcotSZrATKZfTgPuBG4EbgZ2AifSjNYBdgGnAicBezLzYGbu\nA+4BVnU9sSRpUjOZfnkK8EzgVcCzgS8AizJzpLN+GFgBLAf2jfm+0eWTWrnyaPr7jzrczL9lcHBg\n1tuoIQOUkaOEDDD3Oc66+KZZb+PmK9d3IcnstPV8LZSfi/nOMJNS/xXww8x8GMiIeIhmCmbUAHA/\nsL9ze/zySQ0NHTi8tBMYHBxg797hWW+n1zOUkqOEDCXlmE4JGdvIUMrzUUKObmSY6kVhJtMvtwGn\nR0RfRPwe8ETgq525doAzgN3A7cDqiFgWESuAE2jeRJUktWTakXpm7oyIU2hKexFwIfDfwLaIWALc\nDezIzEcjYitNwS8CNmbmQ3MXXZI03owOaczM90yweM0E99sGbJttKEnSkfHkI0mqiKUuSRWx1CWp\nIpa6JFXEUpekiljqklQRS12SKmKpS1JFLHVJqoilLkkVsdQlqSKWuiRVxFKXpIpY6pJUEUtdkipi\nqUtSRSx1SaqIpS5JFbHUJakilrokVcRSl6SKWOqSVBFLXZIqYqlLUkUsdUmqiKUuSRWx1CWpIpa6\nJFXEUpekiljqklQRS12SKmKpS1JFLHVJqoilLkkVsdQlqSKWuiRVxFKXpIpY6pJUkf6Z3CkijgG+\nDawDHgGuA0aAu4ALM/OxiDgfuKCzfnNm7pyTxJKkSU07Uo+IxcBHgAc7i7YAmzJzNdAHrI+IY4GL\ngJOB04DLI2Lp3ESWJE1mJtMvHwQ+DNzX+fpE4NbO7V3AqcBJwJ7MPJiZ+4B7gFVdzipJmsaU0y8R\n8RZgb2Z+KSIu6Szuy8yRzu1hYAWwHNg35ltHl09p5cqj6e8/6rBDjzc4ODDrbZSe4ayLb5r1Nm6+\ncn0XkkyvhOcDyskxlRIydiODP5/lZJhuTv1cYCQiTgVeAPwLcMyY9QPA/cD+zu3xy6c0NHTgsMJO\nZHBwgL17h2e9nV7PMBNtZCzlsSglx3RKyFhCBlg4P5/dyDDVi8KUpZ6Zp4zejoivA28H/jEi1mbm\n14EzgK8BtwOXRcQyYClwAs2bqJKkFs3o6JdxLga2RcQS4G5gR2Y+GhFbgd008/QbM/OhLuaUHnfu\nFbfMehvbN7y8C0mk8sy41DNz7Zgv10ywfhuwrQuZJElHyJOPJKkilrokVcRSl6SKWOqSVBFLXZIq\nYqlLUkUsdUmqyJGcfKQFzBN/pLI5UpekiljqklQRS12SKmKpS1JFLHVJqoilLkkVsdQlqSKWuiRV\nxFKXpIpY6pJUES8TMAOeGi+Vz9/ThiN1SaqIpS5JFbHUJakilrokVcRSl6SKWOqSVBFLXZIqYqlL\nUkUsdUmqiKUuSRWx1CWpIpa6JFXEUpekiljqklQRS12SKmKpS1JFLHVJqoilLkkVsdQlqSJTfkZp\nRCwGtgPPApYCm4EfANcBI8BdwIWZ+VhEnA9cADwCbM7MnXMXW5I0kelG6ucAv8rM1cDpwFXAFmBT\nZ1kfsD4ijgUuAk4GTgMuj4ilcxdbkjSRKUfqwOeAHZ3bfTSj8BOBWzvLdgGvBB4F9mTmQeBgRNwD\nrAK+1fXEkqRJTVnqmfkAQEQM0JT7JuCDmTnSucswsAJYDuwb862jy6e0cuXR9PcfNen6sy6+abpN\nTOvmK9fPehvdMDg4MN8RisgAZeQoIQOUkaOEDFBGjrYyzOV+phupExHHATcC12TmpyLiH8asHgDu\nB/Z3bo9fPqWhoQOHl/YI7N07POf7mIkScpSQAcrIUUIGKCNHCRmgjBxtZBgcHJj1fqZ6UZhyTj0i\nngp8GXhvZm7vLL4jItZ2bp8B7AZuB1ZHxLKIWAGcQPMmqiSpRdON1N8HrAQujYhLO8veCWyNiCXA\n3cCOzHw0IrbSFPwiYGNmPjRXoSVJE5tuTv2dNCU+3poJ7rsN2NalXJKkI+DJR5JUEUtdkipiqUtS\nRSx1SaqIpS5JFbHUJakilrokVcRSl6SKWOqSVBFLXZIqYqlLUkUsdUmqiKUuSRWx1CWpItN+8pEk\naebOveKWWW9j+4aXH/H3OlKXpIpY6pJUEUtdkipiqUtSRSx1SaqIpS5JFbHUJakilrokVcRSl6SK\nWOqSVBFLXZIqYqlLUkUsdUmqiKUuSRWx1CWpIpa6JFXEUpekiljqklQRS12SKmKpS1JFLHVJqoil\nLkkVsdQlqSL93dxYRCwCrgGeDxwEzsvMe7q5D0nS5Lo9Uv8TYFlmvhjYAFzZ5e1LkqbQ7VJ/KfBF\ngMz8D+APu7x9SdIU+kZGRrq2sYj4KPD5zNzV+frnwHMy85Gu7USSNKluj9T3AwNjt2+hS1J7ul3q\ne4AzASLiRcCdXd6+JGkKXT36BbgRWBcR3wT6gLd2efuSpCl0dU5dkjS/PPlIkipiqUtSRSx1SaqI\npS5JFbHUJaki3T6kcU5FxJnA7wM3A9cBxwM/A96emd9tKcN9wJsy86tt7G+KHMcA7wEeBj4G3EBz\n4td5mXlLSxmeAlxOc3mIJwD30pyrsDkzH2gjQyfHk4FLgVOB5cD9wG7gbzLzl23lmG+dc0OuBh4E\nNmTmbZ3lN2bmn7aY42nAe4EhmsOcbwAeAd6amf/eUoYl4xZ9GVgH9GXmw21k6OS4LDM3RsTxwCeA\np9H8nrwlM380F/vsqVIHPkBz0bBrgUsz8xsR8Xzgw8CLW8rwC+BdEfFmmtL4SUv7He8TwGdpSmw3\ncBqwF/g80EqpA9uAq4B3AOuBZwD/RfMi8/qWMgBcD3wceD8wTPPidibwKZqin3MR8UmaczN+S2a+\nsY0MNBfQOxtYDHw8IjZk5peB321p/6OuBz5J8/PwFeAU4P86y9a0lOGXwEPAAZrn5VjgR8AI8JyW\nMsChXtoCvDsz93Q662qaF5mu67VSP5iZ90UEmfkNgMz8XkS0mWEoM8+KiNcAn46IIWAX8JPM/EKL\nOZZl5kcBIuIvMvPOzu02L8vw5DF/sXwmIr6emWsj4uIWMwAsz8zPjPl6P81zc2GLGXYAlwF/2eI+\nx/vN6Oiv81ftVyLijTRF1qalmXl9J8fazMzO7cdazPAi4IPAJZl5Z0R8LTNf1uL+xzs6M/fA4521\neK521Gul/u2IuAr4ZkR8DNhJMyL7QYsZ+gAy8wbghog4gWY0uA5os9QfiIgraEbqSyPifGAf0Nq0\nBzAcERtoXtReDfykMwXQtl9GxPtprhC6j0Mj9f9pK0Bm3hgRa4BjMvNzbe13nP0RcRHwkcz8306h\nfxZY2nKOoYjYBFyWma8AiIhzaEbOrcjMH0bE2cC1EbGT9l/YRh0fETcBKyLitTQd8S7m8Pe0194o\n/SvgW8DzgOOA1wHfpd3R0RfHfpGZd2fmhzLzHS1mAHgDcB/wOeA1wOk0LyzntZjhHODJwN/RFMdF\nwJOAN7eYYTTHMM087lXAJTS/NH/eZojMfNc8Fjo0j8OT6JR456+31wLfbznHG4HhzBxbpE+n/edj\nODPPpnkf7rg29z0mw9NpeuvvaaZu+2l+Z86Zq3323GUCOn+2PJ9Db4jd1eYbH2MyrAJWzFeGUnKU\n8HxIOqSnSj0i/pjmaIsf04zEBoA/AN6Xmf/aUoYzgSvmM0MnRwmPxbxn6OQYf6TD49p6gTFDWTlK\nyDBfOXptTn0j8NLM3D+6ICJWAP8GtFUimwrIAGU8FiVkgOYSz08Ffk3znsfImP+2daSDGcrKUUKG\necnRa6W+mOYQpbEepN03QUrIUEqOEjJAc5z8l4BXZOZQy/s2Q5k5SsgwLzl6rdSvBb4TEbfRHOWw\nnOZB27rAMpSSo4QMZObezlE4LwTm5aQwM5SVo4QM85Wjp+bUASLiqcBJNPO3+4FvZeYvFlqGUnKU\nkEHSIb02UofmpIJ1HDra4gkRsWPc4VMLIUMpOUrIQESspzlfYPRIoN1AqznMUFaOEjLMR46eKvWI\nuJrm2PpdHDod/AyaU+RbOT67hAyl5CghQyk5zFBWjhIyzFuOkZGRnvl3/PHH3zrJ8j0LKUMpOUrI\nUEoOM5SVo4QM85Wj184oXRQRq8cuiIhTgN8ssAyl5CghQyk5zFBWjhIyzEuOnpp+Ad4CbImIT9Ec\n6/kYcAfNVQIXUoZScpSQoZQcZigrRwkZ5iVHr43Unwu8gOYa4n+dmc/IzPXAPy+wDKXkKCFDKTnM\nUFaOEjLMS45eK/WNNNcZOQl4W0SMXiBowutYV5yhlBwlZCglhxnKylFChnnJ0WvTLw9n5v3w+GFC\nt0TEz2n3DMYSMpSSo4QMpeQwQ1k5SsgwLzl6baT+04jYEhFPzMxhmkvOXk1zEamFlKGUHCVkKCWH\nGcrKUUKGecnRa6V+Ls21oUcAMvNe4GU0HwSwkDKUkqOEDKXkMENZOUrIMC85eu4yAZKkyfXaSF2S\nNAVLXZIqYqlLUkUsdUmqSK8dpy7NSkR8HNidmdd2vv4asAHYTPMp7weAd2TmHRHxPOBDwO8AxwBX\nZubWiPgAzSWHnwFclZnXtP9/Ik3MkboWmu3AOQAR8Uyast4CvCczXwi8Dfh0577nAZsz849oDkO7\nbMx2lmXmcy10lcZDGrWgREQf8GOaDy14E83AZiPwgzF3GwRW0Xygwemd26uAN2RmX2ek/oTMfG+L\n0aUZcfpFC0pmjkTE9cDZwOuAVwEXZ+YLRu8TEU+n+fT3HcAQcDPN6P0NYzb1YGuhpcPg9IsWouuA\ntwP3ZubPgB9HxOiUzDrgG537rQPen5k3AWs6649qP640c5a6FpzOqdr30pQ7wJ8B50XE94HLgdd3\nPj/yA8BtEfEdmo8f+ynw7LbzSofDOXUtKJ059acBtwLPy8yD8xxJ6ipH6lpoXgt8D7jEQleNHKlL\nUkUcqUtSRSx1SaqIpS5JFbHUJakilrokVcRSl6SK/D/cHxj0Ta0HKQAAAABJRU5ErkJggg==\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "s.plot(kind='bar')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "plot()函数的参数`kind`,可以指定plot()函数所绘制图形的种类,`'bar'`为柱状图。也可以采用这种形式:`s.plot.bar()`,效果与指定kind参数为bar类似。\n", - "\n", - "**柱状图**用宽度相同的柱的高度或长短来表示数据多少。\n", - "\n", - "柱状图一般用于展示**分类数据**,展示不同类别数据的多少(可将以上数据的每个年份理解为不同类别)。" - ] - }, - { - "cell_type": "code", - "execution_count": 47, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 47, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "s.plot(kind='barh')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "'barh'为条形图,与柱状图类似。" - ] - }, - { - "cell_type": "code", - "execution_count": 48, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 48, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "s.plot('pie',figsize=(6,6))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "'pie'为饼图。\n", - "**饼图**使用圆形及圆内扇形的角度表示数值大小的图形。\n", - "\n", - "一般也用于展示**分类数据**,用来表示各分类部分数据占全部数据的比例(频率分布)。" - ] - }, - { - "cell_type": "code", - "execution_count": 49, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 49, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "s.plot('pie',figsize=(6,6))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "可利用plot()函数的`figsize`参数,设定图形的大小(长与宽)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 2. 数据基本分析、度量与展示\n", - "\n", - "**2.1 归一化**\n", - "\n", - "**归一化**一般要使数值的绝对值变成**相对值**,将数值映射到[0,1]区间上。\n", - "\n", - "在本例中,由于每个年度的语料大小不同,单纯观察每个年度某个词汇出现的频次(绝对值),无法确定其出现的相对高低(相对值)。\n", - "\n", - "因此可将频次归一化,即某词汇每年出现的次数/每年语料的总字数。这样,该词汇就可以利用频次归一化的数值进行横向比较了。\n", - "\n", - "在实际中,也可以将频次归一化的结果乘以一个较大的整数。在本例中,可乘以10000000,表示语料中每10000000字出现该词汇的频次。" - ] - }, - { - "cell_type": "code", - "execution_count": 50, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "#python实现\n", - "def norm_freq(freqs, total_freqs, per = 1):\n", - " return [per * freq/total_freq for freq, total_freq in zip(freqs, total_freqs)]\n", - "\n", - "per = 10000000\n", - "s_norm = norm_freq(freq_dict['天长地久'], total_words_freq, per = 10000000)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "上面的代码用python实现了将每年的频次归一化为每年每一千万字该词汇出现的频次。" - ] - }, - { - "cell_type": "code", - "execution_count": 51, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "2006 162.008910\n", - "2007 127.899045\n", - "2008 179.107151\n", - "2009 76.700561\n", - "2010 349.964106\n", - "2011 91.696850\n", - "2012 202.502025\n", - "2013 72.000720\n", - "2014 86.901107\n", - "2015 21.595940\n", - "dtype: float64" - ] - }, - "execution_count": 51, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s_norm = Series(s_norm, index = years)\n", - "s_norm" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "利用归一化处理后的结果初始化一个Series对象s_norm。注意,此时value的数据类型自动转换为float。" - ] - }, - { - "cell_type": "code", - "execution_count": 52, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "year\n", - "2006 162.008910\n", - "2007 127.899045\n", - "2008 179.107151\n", - "2009 76.700561\n", - "2010 349.964106\n", - "2011 91.696850\n", - "2012 202.502025\n", - "2013 72.000720\n", - "2014 86.901107\n", - "2015 21.595940\n", - "Name: 2006-2015, dtype: float64" - ] - }, - "execution_count": 52, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#pandas的Series运算\n", - "s_norm = per * s / total_words_freq\n", - "s_norm" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "也可以直接利用pandas的序列运算进行归一化。运算结果与python编写代码一直,但是更简洁。\n", - "- `s_norm = per * s / total_words_freq`,其中`s`为Series类型,`total_words_freq`为list类型,直接相除运算的结果是将s中每个对应的值除以list中每个值。这种向量/矩阵运算是numpy及pandas中非常常见的情况,一般被称为**矢量化操作**。" - ] - }, - { - "cell_type": "code", - "execution_count": 53, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 53, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\nRU5ErkJggg==\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "s_norm.plot()\n", - "s.plot()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "再次绘图,并将两根折线展示在一个图上。\n", - "\n", - "可以看出,归一化前,峰值出现在2012年;归一化后,峰值出现在2010年。" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**1.2 求平均值**" - ] - }, - { - "cell_type": "code", - "execution_count": 54, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "396.0" - ] - }, - "execution_count": 54, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#python实现\n", - "freq_mean = sum(freq_dict['天长地久'])/len(freq_dict['天长地久'])\n", - "freq_mean" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "计算均值的python代码。\n", - "\n", - "除非特别指出,一般平均值指的就是**算数平均值**。" - ] - }, - { - "cell_type": "code", - "execution_count": 55, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "396.0" - ] - }, - "execution_count": 55, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#pandas内置求均值函数\n", - "s.mean()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "利用内置均值函数mean()更为简洁。" - ] - }, - { - "cell_type": "code", - "execution_count": 56, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "2006 396.0\n", - "2007 396.0\n", - "2008 396.0\n", - "2009 396.0\n", - "2010 396.0\n", - "2011 396.0\n", - "2012 396.0\n", - "2013 396.0\n", - "2014 396.0\n", - "2015 396.0\n", - "dtype: float64" - ] - }, - "execution_count": 56, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s_mean = Series([freq_mean]*10, index = years)\n", - "s_mean" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "声明一个每年数值均为均值的Series对象s_mean。" - ] - }, - { - "cell_type": "code", - "execution_count": 57, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 57, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "s.plot()\n", - "s_mean.plot()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "将频次均值与各年频次画在一个图中" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**1.3 样本方差、标准差、标准分及变异系数**" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": true - }, - "source": [ - "**方差**(variance)是在概率论和统计方差衡量随机变量或一组数据时离散程度的度量。\n", - "- 统计中的方差(样本方差)是每个样本值与全体样本值的平均数之差的平方值的平均数。\n", - "\n", - "**总体**:包含所研究的全部个体(数据)的集合。\n", - "\n", - "**样本**:从总体中抽取的一部分元素的集合。\n", - "\n", - "**样本容量**:构成样本的元素的数量称为样本容量(size)。\n", - "\n", - "样本方差计算公式为:\n", - "$$s^2 = \\frac{1}{n-1}\\sum_{i=1}^{n}(x_i-\\widetilde x)^2$$\n", - "\n", - "注意样本方差的公式中,分母为`n-1`。" - ] - }, - { - "cell_type": "code", - "execution_count": 58, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "47871.11111111111" - ] - }, - "execution_count": 58, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#python实现方差\n", - "def variance(freqs):\n", - " mean = sum(freqs)/len(freqs)\n", - " return sum([(freq-mean)**2 for freq in freqs])/(len(freqs)-1)\n", - "\n", - "freq_var = variance(freq_dict['天长地久'])\n", - "freq_var" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "上述代码用python实现了求样本方差。" - ] - }, - { - "cell_type": "code", - "execution_count": 59, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "47871.11111111111" - ] - }, - "execution_count": 59, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#pandas内置方差\n", - "s.var()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "而pandas内置求方差的函数var()更为简洁。· " - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": true - }, - "source": [ - "**标准差**:标准差是方差的算术平方根。" - ] - }, - { - "cell_type": "code", - "execution_count": 60, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "218.7946779771188" - ] - }, - "execution_count": 60, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#pandas内置标准差\n", - "s.std()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Pandas内置std()函数,可得到序列s的标准差。" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**标准分**:变量值与平均数的差除以标准差后的值,也称为**z分数**(z score)。\n", - "\n", - "标准分的计算公式为:\n", - "$$z_i=\\frac{x_i-\\widetilde x}{s}$$" - ] - }, - { - "cell_type": "code", - "execution_count": 61, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "year\n", - "2006 -0.895817\n", - "2007 -0.438768\n", - "2008 0.018282\n", - "2009 -0.210243\n", - "2010 -0.027423\n", - "2011 0.932381\n", - "2012 2.303530\n", - "2013 0.018282\n", - "2014 -0.438768\n", - "2015 -1.261457\n", - "Name: 2006-2015, dtype: float64" - ] - }, - "execution_count": 61, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(s-s.mean())/s.std()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "上述代码可得到s中所有数值的标准分,存放在一个Series对象中。\n", - "标准差的**经验法则**(当一组数据对称分布时):\n", - "- 约68%的数据在均值附近正负1个标准差内\n", - "- 约95%的数据在均值附近正负2个标准差内\n", - "- 约99%的数据在均值附近正负3个标准差内\n", - "在正负3个标准差以外的数据,称为**离群点(outlier)**。\n", - "\n", - "**切比雪夫不等式**:对任意分布的一组数据,至少有(1-1/k^2)的数据落在正负k个标准差以内(k>1)。" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": true - }, - "source": [ - "**变异系数**(离散系数):一组数据的标准差与该组数据均值之比。公式为:\n", - "$$v_i=\\frac{s}{\\widetilde x}$$\n", - "\n", - "该系数是测度离散程度的相对统计量,主要用于比较不同演变数据的离散程度(特别对均值差异较大的数据组)。" - ] - }, - { - "cell_type": "code", - "execution_count": 62, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "0.5525118130735324" - ] - }, - "execution_count": 62, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#变异系数\n", - "s.std()/s.mean()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "变异系数可由标准差/均值直接得到。" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**1.4 中位数、分位数、轴距与箱型图**" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**中位数**(median):中数是按顺序排列的一组数据中居于中间位置的数,即在这组数据中,有一半的数据比他大,有一半的数据比他小。如果观察值有偶数个,通常取最中间的两个数值的平均数作为中位数。" - ] - }, - { - "cell_type": "code", - "execution_count": 63, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "109.7979476168295" - ] - }, - "execution_count": 63, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s_norm.median()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Pandas内置了median()函数,即求中位数函数。" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false - }, - "source": [ - "**分位数**是将总体的全部数据按大小顺序排列后,处于各等分位置的变量值。\n", - "- 将全部数据分成相等的两部分,它就是中位数;如果分成四等分,就是四分位数;八等分就是八分位数。\n", - "- 四分位数也称为四分位点,它是将全部数据分成相等的四部分,其中每部分包括25%的数据,处在各分位点的数值就是四分位数。\n", - "- 四分位数有三个,第一个四分位数就是通常所说的四分位数,称为下四分位数,第二个四分位数就是中位数,第三个四分位数称为上四分位数,分别用Q1、Q2、Q3表示。" - ] - }, - { - "cell_type": "code", - "execution_count": 64, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "79.25069739255241" - ] - }, - "execution_count": 64, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s_norm.quantile(0.25)" - ] - }, - { - "cell_type": "code", - "execution_count": 65, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "174.83259076226759" - ] - }, - "execution_count": 65, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s_norm.quantile(0.75)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Pandas内置的quantile()函数可以求任意分位数,参数为0.25即Q1,参数为0.75即Q3。" - ] - }, - { - "cell_type": "code", - "execution_count": 66, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 66, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\ndUkqyP8A2wsQ0nwHpoQAAAAASUVORK5CYII=\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "s_norm.plot(kind='box')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "参数kind为`box`时,对应的就是**箱型图**。\n", - "\n", - "箱型图中间的箱型一般由三根线组成,由下至上分别对应Q1,Q2,Q3;而箱型以外的上下两根线,分别对应最大值与最小值(不含离群点)\n", - "\n", - "箱型图一般用于展示数值型数据,有助于对数据的整体分布有只管了解,特别有利于对离群点/异常点的观察。" - ] - }, - { - "cell_type": "code", - "execution_count": 67, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 67, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "#Series箱型图离群点/异常点显示,利用seaborn\n", - "sns.boxplot(s_norm)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "由于pandas内置的箱型图默认不含离群点,可直接利用seaborn中的boxplot函数,为Series对象绘制带离群点的箱型图。" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**1.5 样本的累积和**(累积频数与累积频率)\n", - "\n", - "**累积频数**(cumulative frequencies),将各有序类别或组的频数逐级累加起来的频数。\n", - "\n", - "**累积频率**(cumulative percentages),将各有序类别或组的百分比逐级累加起来。" - ] - }, - { - "cell_type": "code", - "execution_count": 68, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "year\n", - "2006 200\n", - "2007 500\n", - "2008 900\n", - "2009 1250\n", - "2010 1640\n", - "2011 2240\n", - "2012 3140\n", - "2013 3540\n", - "2014 3840\n", - "2015 3960\n", - "Name: 2006-2015, dtype: int64" - ] - }, - "execution_count": 68, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s.cumsum()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Pandas内置了cumsum()函数,可以直接得到累积频数。" - ] - }, - { - "cell_type": "code", - "execution_count": 69, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 69, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\nQmCC\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "s.cumsum().plot()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "利用cumsum()得到的仍然是Series对象,可以直接绘图。" - ] - }, - { - "cell_type": "code", - "execution_count": 70, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 70, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "s_ratio = s/s.sum()\n", - "s_ratio.cumsum().plot()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "累积频率(累积百分比)可以类似的得到。\n", - "\n", - "`sum()`为内置的求Series对象中value和的函数。" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**1.6 最大值、最小值、众数及总体描述**" - ] - }, - { - "cell_type": "code", - "execution_count": 71, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "900" - ] - }, - "execution_count": 71, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s.max()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "内置最大值函数max()" - ] - }, - { - "cell_type": "code", - "execution_count": 72, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "120" - ] - }, - "execution_count": 72, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s.min()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "内置最小值函数min()" - ] - }, - { - "cell_type": "code", - "execution_count": 73, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "0 300\n", - "1 400\n", - "dtype: int64" - ] - }, - "execution_count": 73, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s.mode()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**众数**(mode):一组数据中出现次数最多的数据值。一般用于测度分类数据的集中趋势,在数据量较大的时候有意义。\n", - "Pandas内置mode()函数,可以直接得到众数,注意众数可能不唯一,如此时s的众数有两个。" - ] - }, - { - "cell_type": "code", - "execution_count": 74, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "count 10.000000\n", - "mean 396.000000\n", - "std 218.794678\n", - "min 120.000000\n", - "25% 300.000000\n", - "50% 370.000000\n", - "75% 400.000000\n", - "max 900.000000\n", - "Name: 2006-2015, dtype: float64" - ] - }, - "execution_count": 74, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s.describe()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": true - }, - "source": [ - "Pandas的descibe()函数,可以给出汇总与描述统计的常用值。其中count为数据个数。" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**1.7 随机数、直方图、峰度与偏度**(公式以后有时间补充)" - ] - }, - { - "cell_type": "code", - "execution_count": 75, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "np.random.seed(66)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "调用np中random模块的seed()方法,生成一个随机数种子,在这个种子下,每次第一次生成的随机数均相同。" - ] - }, - { - "cell_type": "code", - "execution_count": 76, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "array([ 1.41561436, -1.0852864 , -0.61630804, ..., 0.08479998,\n", - " -1.16755255, 1.13461007])" - ] - }, - "execution_count": 76, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "arr1 = np.random.randn(10000)\n", - "arr1" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "利用random的randn()函数,生成一个numpy的array类型的对象,大小为10000,可理解为长度为10000的数组(所有数据元素类型相同)。\n", - "\n", - "数组内数据分布为正态分布。randn即random normal。" - ] - }, - { - "cell_type": "code", - "execution_count": 77, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "array([ 2.28112862, 0.51138372, 0.68988585, 0.67582702, 0.63808164,\n", - " -1.0410448 , -0.91601431, -1.64294384, 2.16465592, -0.67004449,\n", - " 0.46737616, 0.90362682, -0.34551556, -0.05367347, 0.46465691,\n", - " 1.37674635, -0.21249989, -2.14939938, -0.25040615, 1.43040674,\n", - " 0.27824394, 0.20567202, -0.68650085, 0.75210394, -1.12895709,\n", - " 0.68402948, -0.28490141, 0.29969392, 0.14210905, -0.11570231,\n", - " -0.48913203, -0.74924755, -1.52762847, -0.99353886, 1.81620157,\n", - " -1.20129803, -0.93263586, -0.36954506, 0.08467705, 0.61107937,\n", - " 0.50382233, -1.12408078, 0.398812 , 1.497698 , 0.78490215,\n", - " 0.55041055, -0.25888733, 0.39002582, -1.41102818, -2.09786379])" - ] - }, - "execution_count": 77, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "arr2 = np.random.randn(50)\n", - "arr2" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": true - }, - "source": [ - "与前类似,生成了一个长度为50的array,数据为正态分布。" - ] - }, - { - "cell_type": "code", - "execution_count": 78, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "s_1 = Series(arr1)\n", - "s_2 = Series(arr2)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Numpy的array类型可以直接初始化为Series类型的对象。" - ] - }, - { - "cell_type": "code", - "execution_count": 79, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 79, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYgAAAD3CAYAAAAHQMOGAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAErxJREFUeJzt3XuQnXV9x/H3kgUi7ZLGcYGpUBm1fouOaAURC5EUFYTW\noo4MDmKRtIAUBdQOIISxdmJBKljiBW1oBGSo3IojsVysqQIRxYmXAS9fDCpTW2lXzGUxJECy/eN5\nVk/W32bPWXPOc7L7fs1k5jm/fZ6cT042+ezvuQ6MjY0hSdJEuzQdQJLUnywISVKRBSFJKrIgJElF\nFoQkqWiw6QA70sjIaMenZM2fvwdr127sRpzfmtmmr5/zmW16zDY97WQbHh4aKI3P+hnE4OCcpiNM\nymzT18/5zDY9Zpue3ybbrC8ISVKZBSFJKrIgJElFFoQkqciCkCQVWRCSpCILQpJUZEFIkoosCElS\n0Yy61YbUrxZdsrKx915+/pGNvbd2bs4gJElFFoQkqciCkCQVWRCSpCILQpJU5FlMmlWaPJtI2tk4\ng5AkFVkQkqQiC0KSVGRBSJKKLAhJUpEFIUkqsiAkSUUWhCSpyIKQJBVZEJKkIgtCklRkQUiSiiwI\nSVKRBSFJKurK7b4jYldgObA/sDuwBPgvYAXww3q1KzPzhog4FTgdeBpYkpkrIuIZwHXAXsAocHJm\njnQjqySprFvPgzgJeCwz3xYRzwS+Dfw9cHlmXja+UkTsA5wFHAzMBe6NiC8CZwAPZObfRcRbgMXA\n2V3KKkkq6FZB3ATcXC8PUM0ODgIiIo6jmkWcAxwCrMrMzcDmiFgDHAgcDlxab387cFGXckqSJtGV\ngsjMxwEiYoiqKBZT7Wq6KjNXR8SFwPupZhbrWzYdBeYBe7aMj49Naf78PRgcnNNx3uHhoY636RWz\nTV+/5+uVTj+Hfv7czDY9083WtUeORsR+wK3AJzLz+oj4vcxcV3/5VuCjwN1Aa/IhYB2woWV8fGxK\na9du7Djn8PAQIyOjHW/XC2abvn7P10udfA79/LmZbXrayTZZgXTlLKaI2Bu4CzgvM5fXw3dGxCH1\n8quB1cD9wIKImBsR84ADgAeBVcCx9brHAPd0I6ckaXLdmkFcAMwHLoqI8eMH7wE+EhFPAY8Cp2Xm\nhohYSlUAuwAXZuamiLgSuCYi7gWeBE7sUk5J0iS6dQzibMpnHR1WWHcZsGzC2Ebg+G5kkyS1xwvl\nJElFFoQkqciCkCQVWRCSpCILQpJUZEFIkoosCElSkQUhSSqyICRJRRaEJKnIgpAkFVkQkqQiC0KS\nVGRBSJKKLAhJUpEFIUkqsiAkSUUWhCSpyIKQJBVZEJKkIgtCklRkQUiSiiwISVKRBSFJKrIgJElF\nFoQkqciCkCQVWRCSpCILQpJUNNiN3zQidgWWA/sDuwNLgO8BVwNjwIPAmZm5NSJOBU4HngaWZOaK\niHgGcB2wFzAKnJyZI93IKkkq69YM4iTgscxcALwO+BhwObC4HhsAjouIfYCzgMOAo4GLI2J34Azg\ngXrda4HFXcopSZpEV2YQwE3AzfXyANXs4CDgK/XY7cBRwBZgVWZuBjZHxBrgQOBw4NKWdS9q503n\nz9+DwcE5HYcdHh7qeJteMdv09Xu+Xun0c+jnz81s0zPdbF0piMx8HCAihqiKYjHw4cwcq1cZBeYB\newLrWzYtjY+PTWnt2o0dZx0eHmJkZLTj7XrBbNPX7/l6qZPPoZ8/N7NNTzvZJiuQrh2kjoj9gP8E\nPpOZ1wNbW748BKwDNtTL2xsfH5Mk9VBXCiIi9gbuAs7LzOX18LciYmG9fAxwD3A/sCAi5kbEPOAA\nqgPYq4BjJ6wrSeqhbh2DuACYD1wUEePHD84GlkbEbsD3gZszc0tELKUqgF2ACzNzU0RcCVwTEfcC\nTwIndimnJGkS3ToGcTZVIUx0RGHdZcCyCWMbgeO7kU2S1B4vlJMkFVkQkqQiC0KSVGRBSJKKLAhJ\nUpEFIUkqsiAkSUUWhCSpyIKQJBW1dSV1RPw78Gngc5n5VHcjSdqRFl2yspH3XX7+kY28r3acdmcQ\nl1A9+OeHEfHxiHh5FzNJkvpAWzOIzLwbuLt+FOibgVsiYgNwFXBl/cAfSdIM0vYxiPpW3R8D/gG4\ng+pmfPsAn+9KMklSo9o9BvEI8COq4xDvzMwn6vEvA9/oWjpJUmPanUEcCZyQmdcCRMTzATJzS2a+\nrFvhJEnNabcg/oxqtxLAXsBtEXFadyJJkvpBuwVxGrAAIDMfAQ4C3tWtUJKk5rVbELsCrWcqPQmM\n7fg4kqR+0e4jRz8HrIyIG+vXb8KzlyRpRmtrBpGZ5wFLgQCeCyzNzMXdDCZJalYn92L6PnAj1Wzi\nFxHxqu5EkiT1g3avg/g48Hrg4ZbhMarTXyVJM1C7xyCOAmL8AjlJ0szX7i6mHwED3QwiSeov7c4g\nfgF8LyK+CmwaH8zMRV1JJUlqXLsFcQe/vpJakjQLtHu772siYn/gRcCdwH6Z+eNuBpMkNautYxAR\ncQJwG3AF8Ezgvog4qZvBJEnNancX03nAnwB3Z+b/RcQfA/8BXLe9jSLiFcCHMnNhvc0K4If1l6/M\nzBsi4lTgdOBpYElmrqgfTHQd1Y0BR4GTM3Ok0z+cJGn62j2LaUtmjo6/yMyfAVu3t0FEnEv1xLm5\n9dBBwOWZubD+dUNE7AOcBRwGHA1cHBG7A2cAD2TmAuBawKu2JanH2p1BfDci3gnsGhEvBf4G+PYU\n2zxMdc+mz9SvDwIiIo6jmkWcAxwCrKofWbo5ItYABwKHA5fW290OXNRmTknSDtJuQZxJ9VP8E8By\nYCXw3u1tkJm31Ae2x90PXJWZqyPiQuD9VCWzvmWdUWAesGfL+PjYlObP34PBwTntrLqN4eGhjrfp\nFbNNX7/nm+m68fn389/pTMzW7llMvwTeV/+arlszc934MvBR4G6gNfkQsA7Y0DI+PjaltWs3dhxq\neHiIkZHRqVdsgNmmr9/zzQY7+vPv57/TnT3bZAXS7r2YtvKbz3/4WWbu2872tTsj4l2ZeT/wamA1\n1azigxExF9gdOAB4EFgFHFt//Rjgng7eR5K0A7Q7g/jVweyI2BV4A/DKDt/rDOCjEfEU8ChwWmZu\niIilVAWwC3BhZm6KiCuBayLiXqqHE53Y4XtJkn5L7R6D+JXMfAq4qT6OMNW6PwEOrZe/SXW20sR1\nlgHLJoxtBI7vNJskacdpdxfTX7a8HKC6ovrJriTSjLfokpVNR5DUhnZnEH/asjwG/Bw4YcfHkST1\ni3aPQZzS7SCSpP7S7i6mH/ObZzFBtbtpLDOfu0NTSZIa1+4upuuBzVQHk58C3gq8HJjyQLUkaefU\nbkEcnZkHt7y+IiJWZ+Yj3QglSWpeuzfrG4iI14y/iIg/p7raWZI0Q7U7gzgNuLa+++oY8APg5K6l\nkiQ1rt2zmFYDL4qIZwGbMvPx7saSJDWt3SfKPScivgjcB/xuRKyccKdWSdIM0+4xiE8B/wg8Dvwv\n8K9UD/KRJM1Q7RbEszLzLoDMHKvvn7Rn92JJkprWbkE8ERH7Ul8sFxGHU10XIUmaodo9i+ndwArg\neRHxbeCZeLdVSZrR2i2IvamunH4BMAf4QWZ6N1dJmsHaLYhLM/MLwHe7GUaS1D/aLYiHI2I58HXg\nifHBzPRMJkmaobZ7kDoinl0vPkZ159ZDqZ4N8afAwq4mkyQ1aqoZxG3AyzLzlIh4b2Ze1otQkqTm\nTXWa60DL8lu7GUSS1F+mKojWhwQNTLqWJGnGafdCOSg/UU6SNENNdQziRRHxo3r52S3LPmpUkma4\nqQriBT1JIUnqO9stCB8pKkmzVyfHICRJs4gFIUkqsiAkSUUWhCSpqN2b9U1LRLwC+FBmLoyI5wNX\nU11P8SBwZmZujYhTgdOBp4ElmbkiIp4BXAfsBYwCJ2fmSDezSpK21bUZREScC1wFzK2HLgcWZ+YC\nqusojouIfYCzgMOAo4GLI2J34AzggXrda4HF3copSSrr5i6mh4E3tbw+CPhKvXw78BrgEGBVZm7O\nzPXAGuBA4HDgjgnrSpJ6qGu7mDLzlojYv2VoIDPHb9cxCswD9gTWt6xTGh8fm9L8+XswODin46zD\nw0Mdb9MrZtPOqhvfH/38PTcTs3X1GMQEW1uWh4B1wIZ6eXvj42NTWrt2Y8ehhoeHGBkZ7Xi7XjCb\ndmY7+vujn7/ndvZskxVIL89i+lZELKyXjwHuAe4HFkTE3IiYBxxAdQB7FXDshHUlST3Uy4J4L/CB\niLgP2A24OTMfBZZSFcBK4MLM3ARcSXWjwHuB04AP9DCnJIku72LKzJ9QPaaUzHwIOKKwzjJg2YSx\njcDx3cwmSdo+L5STJBVZEJKkIgtCklRkQUiSiiwISVKRBSFJKrIgJElFFoQkqciCkCQVWRCSpCIL\nQpJUZEFIkoosCElSkQUhSSqyICRJRRaEJKnIgpAkFVkQkqQiC0KSVGRBSJKKLAhJUpEFIUkqsiAk\nSUWDTQeQNDMtumRlI++7/PwjG3nfmcgZhCSpyIKQJBVZEJKkIgtCklRkQUiSinp+FlNEfBPYUL/8\nMfBB4GpgDHgQODMzt0bEqcDpwNPAksxc0euskjSb9bQgImIuMJCZC1vGPg8szswvR8QngeMi4j7g\nLOBgYC5wb0R8MTM39zKvJM1mvZ5BvATYIyLuqt/7AuAg4Cv1128HjgK2AKvqQtgcEWuAA4FvbO83\nnz9/DwYH53Qcanh4qONtesVsUmea+r7s538P083W64LYCHwYuAr4Q6pCGMjMsfrro8A8YE9gfct2\n4+PbtXbtxo4DDQ8PMTIy2vF2vWA2qXNNfF/287+HdrJNViC9LoiHgDV1ITwUEY9RzSDGDQHrqI5R\nDBXGJUk90uuzmBYBlwFExO9TzRTuioiF9dePAe4B7gcWRMTciJgHHEB1AFuS1CO9nkH8C3B1RNxL\nddbSIuDnwLKI2A34PnBzZm6JiKVUZbELcGFmbupxVkma1XpaEJn5JHBi4UtHFNZdBizreihJUpEX\nykmSiiwISVKRz4OYxZq6X7+knYMzCElSkQUhSSqyICRJRRaEJKnIgpAkFVkQkqQiC0KSVGRBSJKK\nLAhJUpEFIUkqsiAkSUUWhCSpyIKQJBVZEJKkIgtCklRkQUiSiiwISVKRBSFJKrIgJElFFoQkqWiw\n6QCStCMtumRlY++9/PwjG3vvbnAGIUkqcgbRsCZ/2pGk7XEGIUkqsiAkSUV9u4spInYBPgG8BNgM\n/HVmrmk2lSTNHv08g3gDMDczXwmcD1zWcB5JmlX6dgYBHA7cAZCZX4uIgxvOI0nb1dRJJ906vbaf\nC2JPYH3L6y0RMZiZT0+2wfDw0MB03mh4eGg6m+0Qt112XGPvLWl2mO7/cf28i2kD0Pqn2mV75SBJ\n2rH6uSBWAccCRMShwAPNxpGk2aWfdzHdCrw2Ir4KDACnNJxHkmaVgbGxsaYzSJL6UD/vYpIkNciC\nkCQVWRCSpKJ+PkjdUxHxR8DXgb0zc1PTeQAi4neA64H5wJPAyZn5382mqkTEPOA6qutVdgPek5n3\nNZtqWxHxRuD4zDyxD7L0/a1jIuIVwIcyc2HTWVpFxK7AcmB/YHdgSWZ+vtFQtYiYAywDAhgD3pGZ\nDzabalsRsRewGnhtZv6gk22dQQARsSfVrTw2N51lglOB1Zn5Kqr/jM9tOE+r9wBfyswjgLcDH282\nzrYi4grgYvrne7yvbx0TEecCVwFzm85ScBLwWGYuAF4HfKzhPK1eD5CZhwGLgQ82G2dbdbl+Cnhi\nOtv3yz+exkTEAPDPwAXAxobjbCMz/4lff8P9AbCuwTgTfYTqGw+qmWhfzLpafBU4o+kQLba5dQzQ\nb7eOeRh4U9MhJnETcFG9PAD0zQWzmfk54LT65XPor3+jAB8GPgn8z3Q2nlW7mCLir4B3Txh+BPhs\nZn4nIhpIVZkk2ymZ+Y2IWAm8GHht75NNmW0fqtnNOb1Ptt1sN0TEwgYiTabjW8f0UmbeEhH7N52j\nJDMfB4iIIeBmqp/U+0ZmPh0R1wBvBN7cdJ5xEfF2YCQz74yI903n95j110FExBrgp/XLQ4H76106\nfaU+RvKFzHxe01nGRcSLgc8Cf5uZtzedZ6K6IN6RmW/pgyyXA1/LzBvr1z/NzH0bjrWNuiA+m5mH\nNp1loojYj+ri2U9k5vKm85TUPyx9HXhhZv6yD/LcTXVcZAx4KfAQ8BeZ+Wi7v8esmkGUZObzx5cj\n4ifAUY2FmaBu/Z9m5meAx4EtDUf6lYh4IdXU/4TM/E7TeXYCq6j2V9/orWM6ExF7A3cB78zMLzWd\np1VEvA3YNzMvptpFvbX+1bjWH3Qj4stUPyy1XQ5gQfS75cA19W6UOfTX7UYupjqgeUW9a259Znpr\n2sl565jpu4DqTL6LImL8WMQxmTmtA6872L8Bn65/Wt8VOKdPcu0Qs34XkySpbNafxSRJKrMgJElF\nFoQkqciCkCQVWRCSpCILQpJUZEFIkor+H1IVKWEg9cU2AAAAAElFTkSuQmCC\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "s_1.plot(kind='hist')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**直方图**(histogram):又称质量分布图,是数值数据分布的精确图形表示。\n", - "- 将值的范围分段,即将整个值的范围分成一系列间隔(一般要相等)\n", - "- 计算每个间隔中有多少值\n", - "\n", - "当plot()函数的kind参数为hist时,即代表直方图。\n", - "\n", - "此外,Pandas内置hist()函数,可对Series对象直接绘制直方图:`s_norm.hist()`。" - ] - }, - { - "cell_type": "code", - "execution_count": 80, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 80, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "s_1.plot(kind='hist',bins=50)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Plot()函数有一个重要参数`bins`,指定了间隔个数。此处将间隔数设为50." - ] - }, - { - "cell_type": "code", - "execution_count": 81, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 81, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n01gAAAAASUVORK5CYII=\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "s_1.plot(kind='kde')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**核密度估计图**(Kernel Density Estimation, KDE):采用平滑的峰值函数(“核函数”)来拟合观察到的数据点,从而对真实的概率分布曲线进行模拟。\n", - "Pandas的plot()函数中,参数kind的值为kde时,即可绘制KDE图。" - ] - }, - { - "cell_type": "code", - "execution_count": 82, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 82, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAD3CAYAAADmBxSSAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XtwW9d94PHvxYsgCJAESfAtUQ9SR5IlS5bl2FKdxKnr\nNHWS2kn6itvpNo6bTTObmaaTmc12tu0f7c52uvFm0924ieNk0mnSPJrGTurEthw5ii3Jsq33+5AU\nJb5FgSRI8AkSwN0/ACowTZGQBOLi8fvMaETi4vD+dAX8cPi752GYpokQQojCYrM6ACGEEJknyV0I\nIQqQJHchhChAktyFEKIASXIXQogC5LA6gAXB4IQlw3b8fg+h0LQVp85pcl2WJtflneSaLC1b1yUQ\n8BlLPV70PXeHw251CDlJrsvS5Lq8k1yTpVl9XYo+uQshRCGS5C6EEAVIkrsQQhQgSe5CCFGAJLkL\nIUQBkuQuhBAFSJK7EEIUIEnuQghRgCS5CyFEAcqZ5QeEyFUHTvZf/9rndTMxOQvAAzubrApJiBVJ\nz10IIQqQJHchhChAktyFEKIASXIXQogCJMldCCEKkCR3IYQoQCsOhVRK2YCngB1ABHhCa925xPOe\nBka11l9It40QQojVkU7P/VHArbXeA3wBeHLxE5RS/xnYfjNthBBCrJ50kvv9wIsAWusjwO7Ug0qp\nvcC9wNfSbSNEvpiJRDnVOcz39nfw7KtdvH5mkJHxWUzTki1/hUhbOjNUy4HxlO9jSimH1jqqlGoA\n/gb4CPB76bS50Un8fo9lew4GAj5Lzpvrivm6mKbJ8wcv872XNeGpOUpcdmYiMY7rawBsbK7gd35j\nMzbbknsTF51ifq0sx8rrkk5yDwOpEdpSkvTvAjXAz4B6wKOUurhCmyVZtXt6IOAjGJyw5Ny5rNiv\ny08OXua5g5cpLbGzs7WaLeuqMAwITc7z1vmrXOob5+vPnuaj79lgdaiWK/bXyo1k67rc6AMknbLM\nIeBhAKXUfcCZhQNa63/UWt+ttX4A+HvgX7XW31qujRC57s0LQzx38DI1FW7+x5/ex52tNTgdNhx2\nGxuaKnjw7mZ8HifPH77CmxeGrA5XiCWl03N/FnhIKXUYMIBPKKUeA7xa66fTbZORaIVYZT/8ZScv\nvdGL025jz7Z6TnYOv+M5JS4779vVxL43e/nmTy9Q5/fQUi9lCZFbjFy5MRQMTlgSiPxKubRivC7j\nU3P85dOvMxuJ8b67m2gOeN/xnNRVISu9JfzfH56mrsrD3z7xLuy24pw2UoyvlXRksSyz5I0fWfJX\nFKXUZXwXHDw9yEwkxq5NNUsm9sV2ttbw3p2NHDg5wOEzV3n3jsbVCFWIW1KcXQ0hFhkanaZrIEx1\neQlb11el3e7Dv7Yep8PGjw9dZj4aW8UIhbg5ktxF0YvHTd44n7gxeu/WOmxG+sMb/b4SHtzVzGg4\nwi9ODKxWiELcNCnLiKJ3sSfE2OQcbc0V1FSWpt1uobRT7nXhdNh49tUu3n1nA6Ul8rYS1pOeuyhq\n07NRTnWM4HLauGtTzS39DLfLzh3r/ETmY7z8Vm+GIxTi1khyF0Xt9KVh5mNx7moL4Hbdeo97y7oq\nSpx29r3Vy+zcsvP1hMgKSe6iaE1Mz9HRN47P46StueK2fpbTYUOtrWQ6EuXQmasZilCIWyfJXRSt\n050jmCbsaK3JyBoxam0lDrvBz4/2Es+R+SOieElyF0VpfDJC10CYSq+L9Q2ZmV1aWuLgvq31DIVm\nOH1pJCM/U4hbJcldFKWTnSOYwM62GoybGPq4kvffswZAbqwKy0lyF0WnZ2iC7qsTVFe4WVO78kzU\nm9Fc62VLi58L3SF6hmRKvrCOJHdRdJ4/fAVILB+QyV47JMa+N1R7APiXfXrJZQ6EyAZJ7qKoDAxP\ncUwHqS5301jjWZVzNAXKKPc4uTwwIcMihWUkuYui8rMj3ZjA9o1VGe+1LzAMA7XWT9w06egbX7mB\nEKtAkrsoGsGxGY6cG6KppizjtfbFNjaV47AbtPeMEY/LsEiRfZLcRdF44Y0e4qbJB/e0rFqvfYHL\naWdDYzlTs4kNtoXINknuoiiEJiIcPD1AoNLNPVtqs3JOtdYPwP7jfVk5nxCpVlxMQyllA54CdgAR\n4AmtdWfK8Y8BXwBM4Dta6y8nHz9OYqNsgMtaa9lqT1jm58d6icZMHr6vJWs7Jvl9JdT5Szl/JcTg\nyBQN1WVZOa8QkN6Sv48Cbq31nuRm108CjwAopewkNsbeDUwC55VS30l+bSQ3zhbCUj8/1sv+Y324\nXXaisXhWhydubvEzFJrhleP9/OFDm7J2XiHSSe73Ay8CaK2PKKV2LxzQWseUUlu01lGlVC1gB+ZI\n9PI9Sql9yXP8pdb6yHIn8fs9OBz2W/133JZAQDY3XkqhXJfB0Rnm5uPcvbmWyorbH/7o87rTfu6W\nDSWc6Rrl8NmrfOqjd+JxO2/7/LmoUF4rmWbldUknuZcDqeO5Ykoph9Y6CpBM7B8FvgL8FJgCpoEv\nAs8AbcALSim10GYpodD0Lf4Tbo9s7ru0Qrkupmlysj2IYcD6eu/1za1vVeoG2el6785Gnn21i+de\n6eCh5PIEhaRQXiuZlsUNspd8PJ3iYxhIbW1bnKS11j8CmgAX8MdAO/BtrbWptW4HRoCGW4hbiNvS\n3jtGaCJCS53Psl7zAzsbcTpsvHy0V4ZFiqxJJ7kfAh4GSNbczywcUEqVK6V+qZQq0VrHSfTa48Dj\nJGrzKKUaSfT+BzMcuxAr+vmxxEiVzS2VlsXg87jYu62e4fFZTnQELYtDFJd0kvuzwKxS6jDwJeBz\nSqnHlFKf0lqHge8AryqlDpIYMfNt4BtAZfKx7wOPL1eSEWI1jIzPcrw9SFV5CYGb2Bt1NTy0O1GO\n2SerRYosWbHmnuyRf3rRwxdTjj8NPL3oeAx47LajE+I2HDjZj2nC5rX+VZ+0tJLGmjK2b6jmTNcI\nlwfDrG8otzQeUfhkEpMoSHHT5PDZq5SW2FmXoc04btfCWu/SexfZIMldFCTdHSI0EeGezbU47Lnx\nMt+6zk9ToIyjF68xPD5jdTiiwOXGq16IDDlwsp8DJ/v50WtdQGLru1xhGAYP39tCLG7ys9e7rQ5H\nFDhJ7qLgzEfjdF+dwFvqpNZv7Y3Uxd61tZZafymvnR5kZPz2xtwLsRxJ7qLg9F6bJBoz2dBYbvmN\n1MXsNhsf3rsu0Xt/Q3rvYvVIchcFp2sgMaF6Q2Nujki57446ApVuXjs1wGhYeu9idUhyFwVlejbK\n4PA0NRVuystcVoezJLvNxof2rCMaM3nm+fPX7xPIfqsik3LnbpMQGXB5MIxJYiekXLFU0o7HTbyl\nTtr7xtm2oapgFxQT1pGeuygoVwYnMAxoqc+d5L4Um81g+8Yq4nGT05dGrA5HFCBJ7qJgDI/NMBKe\npaHag9tlzfLRN2NjYwXlZS46+sYJT81ZHY4oMJLcRcE4qhOLcrXU5caM1JXYbAZ3tdVgmnCyQ/ZZ\nFZklyV0UjGP6GoYBa+q8VoeStrV1XqrL3Vy5OsGIjJwRGSTJXRSE0fAslwbC1FV5cLvyZ5yAYRjc\ntakGgBPt0nsXmSPJXRSEY3lWkknVWFNGfbWHgeEpdE/I6nBEgZDkLgrCUX0Ng0SZIx/d1Zbovf/4\n4GWLIxGFQpK7yHuhiQidfeNsWlOZUwuF3YxAZSlNgTIu9oxxoVt67+L2rfhOUErZgKeAHUAEeEJr\n3Zly/GPAF0jswvQdrfWXV2ojRCYdbw9iArs311odym3Z0VpDf3CK517rYvPaXTm3Lo7IL+n03B8F\n3FrrPSSS+JMLB5RSduDvgd8A9gCfUUrVLNdGiEw7pq8BsGtTwOJIbk9NhZudrTV09I1z/or03sXt\nSSe53w+8CKC1PgLsXjigtY4BW7TW40A1YAfmlmsjRCZNzsyje8fY2FSO31didTi37ZH71wPw3Gtd\nmKZpcTQin6VToCwHxlO+jymlHAsbXmuto0qpjwJfAX4KTK3UZil+vweHw5pZhYFA/o2wyIZ8uC6n\n3uzBNOHdO5sJBHz4vO5VP+dqnmP39kb2bG/g9TOD9IVm2aXyo9SUD68VK1h5XdJJ7mEgNULb4iSt\ntf6RUuo54FvAH6fTZrFQaDqtgDMtEPARDE5Ycu5cli/X5ZfHEvuRqqZygsEJJiZXdyKQz+te1XP8\n28sXqfImVrP86r+f4qHkvqsP7GxatXPernx5rWRbtq7LjT5A0inLHAIeBlBK3QecWTiglCpXSv1S\nKVWitY6T6LXHl2sjRKZE5mKcuzJKY00ZdVUeq8PJmOoKN3X+UgZHpglNRKwOR+SpdHruzwIPKaUO\nAwbwCaXUY4BXa/20Uuo7wKtKqXngNPBtEiNn3tZmdcIXxezs5RHmo3F2JWd4FpIt6/wMhWa40B1i\n77Z6q8MReWjF5J7skX960cMXU44/DTy9RNPFbYTImAMn+zl4ehAA01x6zfR81lzrxedx0jUQvj7B\nSYibIZOYRF6Kx036rk3icTuoKs//UTKL2QyDLS1+4nGT9t4xq8MReUiSu8hLV0enmYvGWVvrLdjJ\nPhubKnA5bOieMeajMavDEXlGkrvIS73XJoH8Wt73ZjkdNtrWVDI7F+PNC9esDkfkGUnuIu+Ypknv\ntUlcTht1/sIZJbOUTWsqAK7fXxAiXZLcRd7pGZpkejZKc8CLzVaYJZkFPo+LuqpSdO8Y18ZmrA5H\n5BFJ7iLvnOxMbGrRHCizOJLsaG1K9N4Pn5Heu0hffq6PKorayY5hbEZik4tisLbOxxvnh3jleD8V\nXtf1G8i5PGtVWE967iKvjIZn6R6aoK7Kg8tpzVpE2eZ02Gip9zE5M8/QqJRmRHokuYu8curSCJCY\n5FNMFkoznf3jKzxTiARJ7iKvnOxI1NvXBIorudf6S/GWOukZmmA+Grc6HJEHJLmLvDE7F+VCd4jm\nQBlej9PqcLLKMAw2NpUTjZl0X5UVGMXK5IaqyHkL68b0DE0QjcULYlOOW7GhsZxTnSN0X52gtbnC\n6nBEjpOeu8gb12elFlm9fYHP46KqvITBkSnm5mU5ArE8Se4iL5imSX9wCrfLTnXF6u+2lKta6nzE\nzV990AlxI5LcRV4YCUeYnYvRFCgr2IXC0tFSn9h1p3tIkrtYniR3kRf6g4lk1lRko2QWKy9zUel1\nMTA8xUxk2Z0rRZGT5C7yQn9wCsOAxurCXigsHS31PuJxk1OXhq0OReSwFUfLKKVswFPADiACPKG1\n7kw5/nHgz4Eoib1SP6O1jiuljpPYKBvgstZattoTt2R2Lsrw+Cy1/tKimZW6nJY6H6c6Rzh2Mch9\nW2ULPrG0dIZCPgq4tdZ7kptdPwk8AqCUKgX+DtiutZ5WSn0X+JBSah9gaK0fWKW4RREZGJ4GoKlI\n1pJZSYXXRUWZizNdI0TmYpS45ANPvFM6ZZn7gRcBtNZHgN0pxyLAXq31dPJ7BzBLopfvUUrtU0q9\nkvxQEOKW/KreLskdEhOa1tb7mIvGOd01YnU4Ikel03MvB1IXtIgppRxa62hy8+whAKXUZwEv8DKw\nDfgi8AzQBryglFJa6xveAfL7PTgc1vRAAgGfJefNdblwXWJxk8GRacrcDtY2VOTESBmf1/qhmFvW\nV3Pm0gjnu8d4+N0brQ4nJ14rucjK65JOcg8DqRHaUpN0sib/D8Am4GNaa1Mp1Q50aq1NoF0pNQI0\nAL03OkkoNH2jQ6sqEPARDMp07sVy5bpcGhhndi5Ga3MFk1MRq8PB53UzMTlrdRiU2KG6vIS3zl9l\n8Oo4Drt1YyNy5bWSa7J1XW70AZLOK+IQ8DBAsrxyZtHxrwFu4NGU8szjJGrzKKUaSfT+ZacBcdPO\nJFeBlHr72xmGwc7WANORKB19slKkeKd0eu7PAg8ppQ4DBvAJpdRjJEowR4FPAq8BryilAL4MfAP4\nllLqIGACjy9XkhHiRs50jWIY0CBDIN9hZ1sN+4/3cbJjmC0tfqvDETlmxeSerKt/etHDF1O+vlHv\n/7FbDUoIgPD0HFcGwzIE8gbU2krcLjsnO4P8wYOtOXE/QuQOmcQkctb5y6OYQKOMklmSw25j24Zq\ngmOzDIxYc89K5C5J7iJnnekaBaTevpy7WmsAONkRtDgSkWskuYucFDdNzl0eoaLMVbTrt6dj+8Zq\nbIbByU5ZikC8nSR3kZN6hyYJT8+zbX2V1JKX4S110tZcQVd/mPGpOavDETlEkrvISWcvJ4ZAbttQ\nbXEkuW9nWw0mcFp67yKFJHeRk850jWIAd6yvsjqUnLdzoe4uyV2kkD1URc6Zno1yqX+c9Y3leEuL\nayPsm7GwtyxAucfJma4R9h/v5cFdayyMSuQK6bmLnHOhO0QsbrJNeu1pawp4icZMhkZnrA5F5AhJ\n7iLnLNTbt0u9PW0LK2b2B6csjkTkCknuIqeYpsnZrhHK3A7WN5RbHU7eqKvy4LAb9AVlb1WRIMld\n5JT+4SlGwhG2rqvCZpMhkOmy2wwaa8qYmJ5naFRmqwpJ7iLHnE6uArmjVUoyN2thJu+pS7KBh5Dk\nLnLM6c5hDGR8+61oCngBOC0bZwskuYscMjU7T2d/mA2N5ZR7XFaHk3c8bgdV5SXonjFm52SF7WIn\n49xFzvjBLzqJmya+MtfbxnCL9DUFvIyGRzh/JcSuTQGrwxEWkp67yBkLw/hkI+xb15ysu0tpRkjP\nXeSEeNykPzhFaYmDKlkF8pZVV7pxOW0c1UFa6n3XF117YGeTxZGJbFsxuSc3wH4K2AFEgCe01p0p\nxz8O/DkQJbG/6meSh27YRojFugbDROYTG2HLKpC3zmYYNFaXceXqBONTc1R65YOyWKVTlnkUcGut\n9wBfILnxNYBSqhT4O+B9WutfAyqADy3XRoilnEouetUsJZnb1pgszQwMy2zVYpZOWeZ+4EUArfUR\npdTulGMRYK/WemHWhAOYBT6wTJsl+f0eHA5r9skMBHyWnDfXZfO6nO8OYbMZtLVU4bLodZAun9dt\ndQjLamuxc/jsVa6FZrl3WyLW1f6/lPfQ0qy8Lukk93JgPOX7mFLKobWOJjfPHgJQSn0W8AIvA793\nozY3OkkoZM2sukDARzA4Ycm5c1k2r8toeJbLA2Eaqj1EZueJMJ+V894Kn9fNxOSs1WGsqNLroj84\nSWh8Gofdtqr/l/IeWlq2rsuNPkDSKcuEgdTWttQkrZSyKaW+CDwEfExrba7URohUJzoSJZk1dV6L\nIykcjTVlxOIm10KySmSxSie5HwIeBlBK3UfipmmqrwFu4NGU8sxKbYS47kRyc+c1tZLcM0Xq7iKd\nssyzwENKqcOAAXxCKfUYiRLMUeCTwGvAK0opgC8v1WYVYhcFYGp2Ht0zxvoGH2Vu2ZgjU+r8pdht\nhiT3IrZick/W1T+96OGLKV/fqPe/uI0Q73D60gixuMldbTKbMpPsdht1VR4GhqeYms3dexhi9cgM\nVWGpE+2JksxdMlU+4xprPAAMDMsSwMVIkruwzHw0xpmuUer8pTRWe6wOp+BI3b24SXIXljl/JURk\nPsZdmwIyK3UVVJS58LgdDI5MEY+bVocjskySu7DMwiiZXVJvXxVGcimCufk43UMyDr3YSHIXlnjl\nRB9vXriG22WnJzghS/yukoZk3f3c5VGLIxHZJsldWCI4NsPsXIzmWi82KcmsmobkvYzzVyS5FxtJ\n7sISPVcnAWiRWamryu1yUF1eQkffuOzOVGQkuYusM02T3muTOB026mWUzKprSC5F0N47ZnUoIosk\nuYus6xmaZHJmnuZAGXabvARXW2N1YkjkWam7FxV5Z4msO5acuLS2TpaJzYaAP7E7k9xULS6S3EXW\nnWgPYrcZ1yfZiNVlt9nYvNbP4Mg0o+HcX65YZIYkd5FVgyNT9A9P0VhThtMhL79s2bquCoBzMmqm\naMi7S2TV8eslGRklk013rE8mdynNFA1J7iKrjrcHsRkGzQFJ7tnUWO3B7yvh3OVRYvG41eGILJDk\nLrJmNDzL5cEJNrdUUuLK7X1SC41hGOzYWM3UbJRL/WGrwxFZIMldZM1CSWaXLO9riR2tNQCc7By2\nOBKRDStu1qGUsgFPATuACPCE1rpz0XM8JDbG/qTW+mLyseMk9lIFuKy1lt2YilDqmjGvHE98PTsX\nxSO7LmXdlhY/LoeNU53D/N77Wq0OR6yydLbZexRwa633JPdDfRJ4ZOGgUmo38FWgOeUxN2BorR/I\nbLgiX83ORRkanaamwi2J3SIup52t66o42TnMUGiaOr/MDi5k6ZRl7gdeBNBaHwF2LzpeAnyEt2+9\ntwPwKKX2KaVeSX4oiCLWd20KExklY7WdbYnSzKkOKc0UunR67uXAeMr3MaWUQ2sdBdBaHwJIbo69\nYBr4IvAM0Aa8oJRSC22W4vd7cDisuckWCMhMyaVk4rr4vG4ABkYGAdiyvgaft+S2f66VFv5N+WTh\n//J972rhWy9c5HzPGH/4wTsy/vPF21l5XdJJ7mEgNULbckk6qR3o1FqbQLtSagRoAHpv1CAUsmaf\nx0DARzAoGxkslqnrMjE5y3w0Ts/QBJVeF3bDZGIyf2dJ+rzuvIw/9f9yfYOPc10jdPeOZqREJu+h\npWXrutzoAySd5H4I+DDwg2R55UwabR4HtgOfUUo1kuj9D6YXqig0/cFJ4nFT1pKxUOqN7YoyF7G4\nyZmuUe7dWmdhVGI1pVNzfxaYVUodBr4EfE4p9ZhS6lPLtPkGUKmUOgh8H3g8jd6+KFA9Q4m129dI\nvT0nNNcm/h9OyZDIgrZiz11rHQc+vejhi0s874GUr+eAx243OJH/YvE4/cEpvKVOqnz5XWsvFH5f\nCWVuB6cujTA3H8PllAllhUgmMYlVNTgyzXwszppaL4Zsp5cTDMNgfUM5M5Eox5OblIvCI8ldrKru\nq4kbSi31UpLJJa3NFQAcOi23wgqVJHexaqKxOL1Dk3hKHAQqS60OR6QoL3PR2lTB+SshRsbzb/SP\nWJkkd7Fqzl8JMReNs7ZeSjK56P47GzCBw2el916IJLmLVXP04jUAWuplCGQuumdzLS6HjUNnrmKa\nptXhiAyT5C5WRTQW50RHkNISB7VSkslJpSUO7lYBro3N0N47ZnU4IsMkuYtVcbE7xNRslJY6Kcnk\nsvu3NwBw8IyUZgqNJHexKt6SkkxeUC1+aircvHXxGhPTc1aHIzJIkrvIuGgszvH2IBVeF7V+Kcnk\nMpth8NDuNczNx3n56A2XfhJ5SJK7yLiLPYmSzO5NtVKSyQPv2dlIucfJ/mN9TM3OWx2OyBBJ7iLj\nXj97FYB7ttRaHIlIR4nTzm/eu5aZSIyfH+2zOhyRIemsCilE2mYiUY61BwlUumlrrmBgZMrqkMQN\npK4U6bDbKHHaeeFIN++/Zw2lJZIa8p303EVGHdNB5ubj7N3WICWZPOJ02Niyzs9cNM4rx6X3Xggk\nuYuMWpjtuHdbvcWRiJu1eW0lLoeNl97sZSYiK3TnO0nuImOGx2a42DPGpjWVspZMHnI57WxdX8Xk\nzDwvvNFjdTjiNklyFxnz+rnEjVTpteevLS1+Krwu9r3ZQ2giYnU44jbIXROREaZp8vNjfdhtBrPz\n0bfdrBP5w+mwsbXFz+vnhvin586yd3vig/qBnU0WRyZu1orJXSllA54CdgAR4Amtdeei53iAl4FP\naq0vptNGFJZL/WEmpudZ3+DD5ZCdffLZxuYKLnSHuNQ/zpZ1fvyyg1ZeSqcs8yjg1lrvAb4APJl6\nUCm1G3gV2JhuG1F4fpnsqW9sqrA4EnG7bIbBLhXABI5r2akpX6WT3O8HXgTQWh8Bdi86XgJ8hLfv\nq7pSG1FAwtNzvHHhGj6Pk4Zqj9XhiAxoqimjvspD//AUgzJXIS+lU3MvB8ZTvo8ppRxa6yiA1voQ\ngFIq7TZL8fs9OCz6dT4QkMWtlpLudTmwv51oLM6OtnrKfYU/SsbndVsdQlbcv7OJH77SwanOUT77\n+8uv7invoaVZeV3SSe5hIDVC23JJ+lbbhELTaYSSeYGAj2BwwpJz57J0r0ssHuf5g12UOO0013iY\nmCzsLdt8XnfB/xsXeFw2Wuq8dA9N8tKhy9ytAks+T95DS8vWdbnRB0g6ZZlDwMMASqn7gDOr1Ebk\noZMdI4yGI+zdVo/LKTdSC83OtgCGAT969RKxeNzqcMRNSCe5PwvMKqUOA18CPqeUekwp9ambaXP7\noYpctP9YYpnYX7+72eJIxGqo8LrY2FTB4Mg0h5MLwon8sGJZRmsdBz696OGLSzzvgRXaiALTH5zk\nYs8YW1r8NNWU0dEnW7UVoh2t1VwZnODHBy9z39Y6nDLUNS/IDFVxy/a9lei1Pyi99oJW5nby4N1N\njIYjHDwt2/HlC0nu4paMjM9y+OxV6qs87GytsTocsco+cG8LToeNnx3pJhqT2ns+kOQubskzPz1P\nLG6ysamcV08PyHIDBa6izMV7dzQyEo5cX0NI5DZZW0bctLHJCB1943hLnaxvKLc6HJEFB072U+Fz\nYTPghwcuMR+LYzMMWXMmh0nPXdy0l97sIR432bahCptNNuQoFmVuJxubKpiYnqd7UMa15zpJ7uKm\nTEzPceDEAJ4SBxubpNdebLZtqMIw4EzXCKZpWh2OWIYkd3FT9r3VS2Q+xh3rq7Db5OVTbHweF+sb\nyhmbnKP32qTV4YhlyLtTpG1kfJZ9b/Xi95XQtkZWfyxW2zZUAXDu8qjFkYjlSHIXafv3X15iPhrn\no+/ZgMMuL51iVektoSlQRnBsls6+8ZUbCEvIO1Sk5dLAOEfOD9FS72OPbKNX9O5Yn+i9v/BGt8WR\niBuR5C5WZJom39+f2Ejr4w+2YVtm6VdRHOr8pVRXuDnZMUx/UGrvuUiSu1jRWxev0dk/zt0qwKY1\nlVaHI3KAYRjcsb4KE3jul5esDkcsQZK7WNbU7Dzf3d+Bw27wuw9sXLmBKBpr67wEKt3sf6uH8NSc\n1eGIRSS5i2X9nx+cYnxyju0bqjnfHeLAyX5ZakAAib1W33/PWuajcV4+2mt1OGIRSe7ihk5fGubS\nQJjq8pKSuTgzAAALu0lEQVTrN9CESPXuOxuo9JbwyvE+pmdX2qBNZJMkd7GkqZl5/vlFjc2Avdsb\nZJkBsSSX084j793ITCTGL070WR2OSLHiwmFKKRvwFLADiABPaK07U45/GPhrIAp8U2v99eTjx0ns\npQpwWWv9iQzHLlbR08+dITQRYUdrNX5fidXhiBz28N51/ODn7ex7q5ff2L2GEtluMSeksyrko4Bb\na70nuR/qk8AjAEopJ4lt9O4BpoBDSqmfAOOAkbo7k8gfB08P8srRXlrqfGzfUG11OCKHHTjZj8/r\nprW5gjOXRvjmTy/wZ49uszosQXplmfuBFwG01keA3SnHtgCdWuuQ1noOOAi8h0Qv36OU2qeUeiX5\noSDyQF9wkm/v05S5HfzZR7ZJOUakZUtLJQ67wbkro7KZR45Ip+deTqInviCmlHJoraNLHJsAKoBp\n4IvAM0Ab8IJSSiXbLMnv9+CwaG/GQMBnyXlzzUwkyte+8SZz0Tif/6O7uaOtlt7haavDyjk+r9vq\nEHJOoMrLHRuqOdUxzMmuUX5r73qrQ8oJVuaWdJJ7GEiN0JaSpBcf8wFjQDuJHr0JtCulRoAG4Ibj\npUIha5JIIOAjGJS1qU3T5G//+Sj9wUm2tPgZn5zj315+xz7oRc/ndTMxOWt1GDll4Zpsaq7gXNcI\n//LCBbauqcTjLu69gLKVW270AZJOWeYQ8DBAsrxyJuXYBaBNKVWllHKRKMm8DjxOojaPUqqRRA9f\ndtbNYT85dIUrVycIVLrZpQJWhyPyUGmJg+0bqpmYnuf5w1esDqfopZPcnwVmlVKHSdw8/ZxS6jGl\n1Ke01vPAXwAvkUjq39Ra9wPfACqVUgeB7wOPL1eSEdY6cv4qPz54GW+pkwfuasIudXZxi7au81NT\n4eblo70MjUpJz0pGruymEgxOWBJIsZdlOvvG+YfvnsDpMHho9xoqk8MepfywNLku77T4mnjdTp56\n7ix3tdXw2Y/daWFk1spiWWbJ3phMYipivdcm+cd/P008bvJnj2y7ntiFuB0LC8yd6Bjm7OURq8Mp\nWpLci1R/cJL/9d0TTM7M858+oNgm49lFhhiGwccfbMNuM3jm+QuMT0asDqkoSXIvQgPDU9cT+x9/\nQPHuHY1WhyQKTEu9j995YCPhqTm+9pNzxOIy9j3bJLkXmc7+cf7hX48Tnp7nj96/iQd2Nlkdkigw\nCyuHupw21tZ5udgzxj/+8LTVYRWd4h6IWmQOnx3kWy9cJBY3uXdrHTabIcv3ilVjGAZ7t9UzGu7m\nTNcox9uD7Nokw2yzRXruRSAai/ODX3TyzPMXcDrsPHh3M2qt7KgkVp/Laee9dzVitxn803NnOaav\nWR1S0ZDkXuB+9Ool/utXX+fFN3rweZy8/541NNaUWR2WKCLV5W4e3N2Mw2Hjn547x5FzV60OqShI\nci9Qc/Mxnnuti5++3k1oIkJrcwUf3NNChddldWiiCNVXefj87++kxGXn6/9xnn1v9ZIrc2wKldTc\nC4xpmrx54Ro/PNDJSDiCx+1gzx31NAWkty6s1Ruc5Nd3NbH/WB/f29/Ba6cG+Pwf7KTCK/MrVoMk\n9wJx4GQ/Q6PTHG8PEhybxWYkpoLfubEal2yeIHJEdYWbD+1dx+Gzg/QPT/HX33yTjz/Yxru21Mny\n0hkmyb0AdF+d4OdH+xgYngISu9LfrQL4PFKCEbnH43bw4N3NXOwe40THME//x3n+4/AVfvvX1nPP\n5lpJ8hkia8vk8doyvdcm+cnByxxrDwJQV1XKrrYAAX/pbf9sWUNlaXJd3ul2rsnWFj/PH+7m8Nmr\nxE2TqvIS7tlcy7u21LGu3odh5G+it3ptGem556ErV8P89PVujulEUl/fUM7GpnIaqj15/WYQxafW\n7+HxD27hQ3tb+NmRHt66OMRLb/by0pu9eNwOGmvKaKwpo6Haw2/es9bqcPOKJPc8YZom566M8sKR\nHi50h4BE/XJnazWNNWWS1EVeq/V7+JPf2swfPtTGd/d30H11gv7hKTr7xunsG8cw4FTHMDtba9i5\nKUBt5e3/dlropCyT42WZ0ESEw2cHee30INdCMwDUV3u4Y10VjTWr11OX8sPS5Lq802pdk7hpMjo+\ny8DwFH3BKYbHf3WODY3l3Lu1jndtrs3Z0TZSlhFvY5omQ6EZTnYMc6pzmI6+ceKmicthY88d9bz/\nnjVcvhq2OkwhVp3NMKipLKWmspQ7W2uYno3SF5yk++oElwfCdA2E+d7+Dra2+Lnvjnp2bQpQWiIp\nbYH03C3uuUdjcfqDU1waGKejb5z23jFCE4klUg0SpZeNTRWsb/BldUij9FCXJtflnay4JjORKFcG\nJxgJz9I1kOjsOOw2NrdUsrO1hh0ba6iusHYj85zvuSulbMBTwA4gAjyhte5MOf5h4K+BKIlt9r6+\nUptiZJom4ak5BkamOXCin9BkhFA4QmgiQjzlA9bncXL3pgB3bqzmztYaTnQELYxaiNxUWuJgyzo/\nADtaq7k8EKZ7aJKzXaOc7Rrl27RTVV7ChoZy1jeW01BVRq2/lEClG6ejOOZ9pPM7zKOAW2u9J7lB\n9pPAIwBKKSeJfVXvAaaAQ0qpnwC/dqM2mRY3TSZn5n/1gJlIpPHrfye+jsdNorE4sZhJNJ74OxaL\n0zMyTSg0jZl8PkZiNTsDsNsMbDYDu81IPJY8Zpom8Xji58ZiceajceZjcSLzMWbnYkTmYkzNzhOe\nmmdiZo5QOEJwbIa56NvXtLYZBn5fCdUVJVRXuKmt9FBe5sQwDGKmKYldiDT4PC7ubK3hztYaJmfm\n6QtOMjg8TXBshqM6yFH99vdRmduBz+PC53FSWuLA7bLjdtlx2u04HTYcDgObkXjv25Lv+8Tfya+T\nOcFuM3DYbTgdNpwLfztsOB12HHaDmZhJeHxmyRxiQOJXc6DEYafElfkPnHSS+/3AiwBa6yNKqd0p\nx7YAnVrrEEByQ+z3AHuWaZNRX/3xOY5ezO2V5px2G16Pk3qPk3KPi0pfCX5fCeVlLtmMWogM8pY6\n2bzWz+a1fkzTZGomykh4lvD0HBPT80xOzzM7F2VsMsLQ6DS5UJR22G387SffRV2VJ7M/N43nlAPj\nKd/HlFIOrXV0iWMTQMUKbZZ0o7rRSv7mT/fcSjMhhCho6awKGQZ8qW1SkvTiYz5gbIU2QgghVlk6\nyf0Q8DBAsn5+JuXYBaBNKVWllHKRKMm8vkIbIYQQq2zFoZApI1/uJHEL4BPALsCrtX46ZbSMjcRo\nma8s1UZrfXH1/hlCCCFS5cw4dyGEEJkjOzEJIUQBkuQuhBAFSJK7EEIUIFllJ0kptRl4A6jTWhf9\n4iFKqQrg2yTmLLiAv9Bav25tVNaQ5TSWlpyh/k1gHVAC/J3W+ieWBpUjlFK1wDHgIasGk0jPHVBK\nlZNYIiFidSw55C+A/Vrr9wJ/AnzF2nAsdX0JDuALJF4rAv4IGNFavxv4APD/LI4nJyQ/9L4GzFgZ\nR9End6WUATwN/CUwbXE4ueRLJF6gkPgNr5h/m3nbEhzAqi2nkWf+Dfir5NcGicUDBXwR+CowYGUQ\nRVWWUUp9Evjcooe7ge9prU8ppSyIyno3uC6f0Fq/pZSqJ1Ge+fPsR5Yzbno5jWKgtZ4EUEr5gB8C\n/93aiKynlPoTIKi1fkkp9d+sjKXox7krpTqBvuS39wFvaq3fY2FIOUMptR34HvB5rfULVsdjFaXU\n/waOaK1/kPy+T2vdbHFYOUEptQZ4FnhKa/1Nq+OxmlLqVcBM/tkJtAO/rbW+mu1YiqrnvhStdevC\n10qpK8D7LQsmhyiltpL4tfv3tdanrI7HYoeADwM/kOU0fkUpVQfsA/6L1nq/1fHkgtSOoVLqAPBp\nKxI7SHIXN/Y/ATfw5WS5alxrvSpr8ueBZ4GHlFKH+dUSHCJxn8oP/JVSaqH2/ltaa0tvJIqEoi/L\nCCFEISr60TJCCFGIJLkLIUQBkuQuhBAFSJK7EEIUIEnuQghRgCS5CyFEAZLkLoQQBej/A5W2NbXL\nkykMAAAAAElFTkSuQmCC\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "sns.distplot(s_1)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Seaborn中内置的distplot()函数,可以直接对Series对象绘制直方图及KDE图的合一图。" - ] - }, - { - "cell_type": "code", - "execution_count": 83, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 83, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXMAAAD3CAYAAADv7LToAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xd4nFeB7/HvjEbSqHfJKpa7j7vlErcYJyQxhOAkJtSE\nXVggC1ke9lIul5vdu8uWy1527242wAV2CQuEhJJCCCUhIYU4iVtiO5ZcdWy5q1jF6l1T7h+Sg+LI\n1tjW6J3y+zyPn8fSjGd+sjQ/nTnvec/rCgaDiIhIdHM7HUBERK6eylxEJAaozEVEYoDKXEQkBqjM\nRURigGeyn7C5uSsil8/k5KTS1tbrdIxxRUtOiJ6syjmxlHPi5eSk4vEkuC51H43MR3g8CU5HCEm0\n5IToyaqcE0s5J14oWVXmIiIxQGUuIhIDVOYiIjFAZS4iEgNU5iIiMUBlLiISA1TmIiIxQGUuIhID\nVOYiIjFg0k/nF4lkWyrrHHvu6ytKHXtuiX4amYuIxACVuYhIDBh3msUY4wa+CywFBoC7rbU1o27/\nInA30Dzyqc9Ya20YsoqIyEWEMme+GfBaa9caY9YA9wG3j7p9BfAxa+2ecAQUEZHxhTLNsh54FsBa\nuxNYecHtK4C/MsZsNcb81QTnExGREIQyMs8EOkZ97DfGeKy1vpGPHwG+A3QCTxpjNllrn7rYg41s\nsn7FgcOpoCDD6QghiZacED1Zz+fMSPc6nuFq7xMJlHPyhVLmncDor9h9vsiNMS7gG9bajpGPnwaW\nARct80i9skdBQQbNzV1OxxhXtOSE6Mk6OmdXd79jOcb7v4rG/89IFi05IbRfOqFMs2wDbgEYmTPf\nP+q2TOCAMSZ9pNhvADR3LiIyyUIZmT8JbDTGbAdcwCeMMXcB6dbaB4wxfw28xPBKlxettb8LX1wR\nERnLuGVurQ0A91zw6epRtz8MPDzBuURE5DLopCERkRigMhcRiQEqcxGRGKAyFxGJASpzEZEYoDIX\nEYkBKnMRkRigMhcRiQEqcxGRGKAyFxGJASpzEZEYoDIXEYkBKnMRkRigMhcRiQEqcxGRGKAyFxGJ\nASpzEZEYoDIXEYkBKnMRkRigMhcRiQEqcxGRGKAyFxGJASpzEZEYoDIXEYkBKnMRkRigMhcRiQEq\ncxGRGKAyFxGJASpzEZEYoDIXEYkBKnMRkRigMhcRiQGe8e5gjHED3wWWAgPA3dbamjHu9wDQaq29\nd8JTiojIJYUyMt8MeK21a4F7gfsuvIMx5jPA4gnOJiIiIQqlzNcDzwJYa3cCK0ffaIxZB6wGvjfh\n6UREJCTjTrMAmUDHqI/9xhiPtdZnjCkG/g54H/ChUJ4wJycVjyfh8pNOgoKCDKcjhCRackL0ZD2f\nMyPd63iGq71PJFDOyRdKmXcCo79it7XWN/L3DwL5wO+AKUCqMabaWvvgxR6sra33CqOGV0FBBs3N\nXU7HGFe05IToyTo6Z1d3v2M5xvu/isb/z0gWLTkhtF86oZT5NuBW4DFjzBpg//kbrLXfAr4FYIz5\nM2DepYpcRETCI5QyfxLYaIzZDriATxhj7gLSrbUPhDWdiIiEZNwyt9YGgHsu+HT1GPd7cIIyiYjI\nZdJJQyIiMUBlLiISA1TmIiIxQGUuIhIDVOYiIjFAZS5ymQLBIP2DPoLBoNNRRN4UyjpzkbjX1jXA\n8fpOWjr6ONfRj88fJCnRTW6Gl7ysZOZPyyXVq5eTOEc/fSKX0NM3RGVNC8fqOt/8XFZ6EhkpiXT0\nDHK2tZezrb0cOdPB8rn5zJ2ajcvlcjCxxCuVucgYgsEgB0+0UllzjkAgSHZ6EhVz8pmSl0rSqI3i\nhnwBTtR3sudIM68dauJ4fScblpaQlpLoYHqJRypzkQsM+QJs29/A6cZuUpI9LJ+bz4ySTNxjjLgT\nPW7mlmdTVpjOruomTp3t4oXdtbx7dTnepMjcHVRikw6AiozS2TPI73ac4nRjN0W5Kdx67TRmlWaN\nWeSjpXo9bFhazILpOXT0DPKHPbUM+QKTlFpEZS7yptqmbp597TQdPYPMn5bDxpVT8SaF/ubV5XKx\nwhQwsySTlo5+XqmqJxDQiheZHCpzEeDU2S7+78/30j/oZ/WCIq6ZX4jbffkHMl0uF+sWTaEkP426\n5h4qa1rCkFbk7VTmEveOnG7jX3++l56+IdYtmoIpz76qx3O7XVxXUUKa18PBE620dTl3wQuJHypz\niWu1zd189YEd9A36uHvTAmaXZU3I4yZ63KxZOIVgELYfaCSgE4wkzFTmErea2/u479FKevqG+OQt\n81m7aMqEPn5pQRozijM419GPPdU+oY8tciGVucSljp5B7nu0ko7uQT512yKuXVwcludZOa+QpEQ3\ne4820903FJbnEAGVucShvgEf9z9WSVNbH+9dO43N180K23OlJHu4Zl4hPn+QvUeaw/Y8IipziSs+\nf4D/+PUBTjd2s2FpMXdsmBn255xZkklORjInG7ro6B4I+/NJfFKZS9wIBoM8/HvLgeOtLJmVx5++\n20zKPioul4uls/MIAvuOnQv780l8UplL3Pjt9pO8uq+BaVMyuOf2hSS4J+/Hf2ph+qjR+eCkPa/E\nD5W5xIVt+xv41asnyMv08oUPLLmsMzsngsvlYsms4dH5/uMancvEU5lLzDt0spUHn6kmzevhix9a\nSlZ6siM5yovSyU5P4kR9J509Gp3LxFKZS0yrbermO0/ux+WCz92xmJL8NMeyDM+d5xMEDhxvdSyH\nxCaVucSs1s5+7n+8ir4BP5967wJMeY7TkSgvSicjNZETDZ30D/qdjiMxRGUuMam3f4j7H6uirWuA\nD1w/i9ULipyOBAyPzk15Nv5AkJq6DqfjSAxRmUvMGfL5+dYT+6lr6eGmFWW8Z3W505HeYlZpFglu\nF0dOt2vPFpkwKnOJKYFAkO//9hBHzrSzcl4hH7lpTsRdkzM5MYGZJZl09w1R39zjdByJESpziRnB\nYJCHfm/ZbZsxU7P5803zx71CkFPOb7NbfbrN4SQSK1TmEjN+seUYr1TVU16Uzl++fwmJnsi9Bmdu\nppfCnBTqW3q1TFEmhMpcYsLTO07yzGunKcpN5UsfqiDVG/nXKj8/OrentT2uXD2VuUS9F3af4YmX\nj5ObmcyXP1xBZlqS05FCUl6UgTcpgeP1nfh1rVC5SuMOX4wxbuC7wFJgALjbWlsz6vb3A/cCQeCn\n1tpvhimryNu8tLeOn71wlKy0JL78kWXkZXmdjhSyBLeLGcWZHD7VRl1zt9NxJMqFMjLfDHittWsZ\nLu37zt9gjEkA/hm4CVgLfNYYkx+OoCIXerWqnod/b8lITeTLdy5jSm6q05Eu2+yyTABq6jodTiLR\nLpQyXw88C2Ct3QmsPH+DtdYPzLfWdgB5QAKgozkSdq9W1fPgM9WkpyTyP+5cRqmDp+lfjZwML7mZ\nydQ1d9OhA6FyFUI5SpQJjD5VzW+M8VhrfQDWWp8x5g7gO8DTwCUXzubkpOKJ0FUGBQUZTkcISbTk\nhPBkfWb7CX70TDUZqUl87Z51zCy9+oswn8+ZkT750zQLZuSxtaqeA6fax73qUbR875Vz8oVS5p3A\n6K/Yfb7Iz7PW/tIY8yvgQeBjwI8u9mBtbb1XEDP8CgoyaG7ucjrGuKIlJ4Qn6/O7z/DzF46SmZrI\nl++sICPJfdXPMTpnV3f/RMS8LCV5Kbhd8PsdJ1g3v+CiJzlFy/deOSdeKL90Qplm2QbcAmCMWQPs\nP3+DMSbTGPOyMSbZWhtgeFQeuLK4Ipf29I6T/PyFo2SlJ/GVu5ZTVpDudKQJ4U3yUFaYTm1zD6cb\ndSBUrkwoZf4k0G+M2Q7cD3zRGHOXMebT1tpO4KfAK8aYrQyvaPlJ+OJKPAoGgzy+pebN5Yf33rXc\n0a1sw2HWyFTR1v0NDieRaDXuNMvIiPueCz5dPer2B4AHJjiXCACBYJCfPHeELXvrKMpN5csfroiq\n5YehKs1PIyM1kdcPN/LhG2bjSdApIHJ59BMjEcvnD/D93x5iy946phamc+9Hl8dkkQO43S5WzSui\nq3eIw6e0X4tcPpW5RKSBQT/femIfrx1qZHZZFv/zrmVkRcmZnVdq9cLhPdd3Hmx0OIlEo8jfwELi\nTk//EN94vIpjdZ0smZXHX2xeRHJiZC5nnUizSjLJz/LyxtFmBob8cfE1y8TRyFwiSnv3AP/80zc4\nVtfJmoVFfO6OxXFTai6Xi9ULihgY9FNV0+J0HIkyKnOJGE1tvfyfh/dQ19zDjcvLuHvTgrg7ELhm\n5PJ2rx3SVItcHk2zSESobe7mvkcq6egZ5LZrp3P7+hkRd4WgyVBakE5ZQTr7jp2jp3+ING+i05Ek\nSsTXsEci0omGTv7lp2/Q0TPInTfNYfM7ZsZlkZ+3ZmER/kCQPbbZ6SgSRTQyF0cdrW3nG49X0T/o\n55O3zMcXCLClsm5SM2Skex05jf9iVs0v5BdbjrHz4Fk2LC1xOo5ECY3MxTGHT7Vx36OVDA4F+Mxt\nC1m/pNjpSBEhPyuF2WVZ2NPttHcPOB1HooTKXBxhT7fxzcerCASCfHbzIlbNL3I6UkRZPb+IILC7\nusnpKBIlVOYy6Y6caef+x6vwB4J89n2LWTa3wOlIEWelKcDlgtcPq8wlNCpzmVQ1tR3c/1gVfv/w\niLxiti5MNZas9GTmledQU9dBS0ef03EkCqjMZdKcaerm/serGPIFuOf2hRqRj2PV/EIAdmmqRUKg\nMpdJ0dzex78/VknfgI9PbZrPClPodKSIt8IUkuB2aapFQqIyl7Dr7Bnkvkcr6ege5M4b57B24RSn\nI0WF9JREFs7I5dTZLhpbI/MKXRI5VOYSVgNDfr75iyqa2vp479ppbLxmqtORoso184bfwbx+WKf3\ny6WpzCVsAoEgP3j6MCcaurh28RTu2DDT6UhRZ9mcAjwJbk21yLhU5hI2P3uumt3VTcwty+LjN8+L\n61P0r1Sq18OSWXnUtfRwqqHT6TgSwXQ6v7zNRJxOf7y+k637GkhPSaRibr6ubXkVVi8o4o0jzby8\nt5b3aJpKLkIjc5lwrZ397DhwliSPmxtWlOJN0pjhaiyZlUdyUgKvVtYRDAadjiMRSmUuE2pwyM/L\nlfX4A0FuWlVOdnqy05GiXnJiAsvm5HP2XC/HNdUiF6EylwkTDAbZtv8sXb1DLJqRy4ySLKcjxYzV\n83XRCrk0lblMmIMn2zjT1M2U3FQq5ug0/Ym0cEYuGamJ7KpuIhDQVIu8ncpcJkRLex97jzSTkpzA\nO5YW43Zr5cpE8iS4WbekhI7uQeyZdqfjSARSmctVG/IFeHVfA8EgrF9STEqyDniGw4ZlpYCmWmRs\nKnO5aruqm+jqHWLhjByK89KcjhOzFs7MJys9iT22CZ8/4HQciTAqc7kqp852UVPbQW5msubJwyzB\n7WL1/CJ6+n3sP3bO6TgSYVTmcsX6BnzsOHiWBLeL9UuKSXDrxynczm9Stv3gWYeTSKTRq0+uSDAY\nZOfBRgaHAqwwBVpPPknKi9IpzU+jqqaFnv4hp+NIBFGZyxU5ebaLM03dFOWkYMqznY4TN1wuF2sW\nFuHzB3V9UHkLlblctr4BH68faiLB7WLtoinaQGuSrV04BRew44CmWuSPVOZy2V4/1MjAkJ/lcwvI\nTEtyOk7cyc30YsqzOVLbQUu7rg8qw1TmcllON3ZxqrGbguwU5k3T9IpTzh8I3aE15zJi3LM7jDFu\n4LvAUmAAuNtaWzPq9juBLwA+YD/wWWutFsHGoCFfgNcPN+F2wdpFRZpecdDKeYX85Pkj7Dhwlk1r\np+l7ISGNzDcDXmvtWuBe4L7zNxhjUoCvAe+01l4LZAGbwhFUnFd5tIXefh+LZuZp9YrDUpI9wzsp\ntvZyvF47KUpoF6dYDzwLYK3daYxZOeq2AWCdtfb81WY9QP+lHiwnJxWPJ+FKsoZdQUGG0xFCEu6c\nGenet32uqbWX6lNtZKcns3ZJCZ6E0GboxnqsSBQJOUP5vo6+z6Z3zOL1w028bptZU1EWzmiXTa+l\nyRdKmWcCHaM+9htjPNZa38h0SiOAMeYvgXTg+Us9WFtbZF5lvKAgg+bmLqdjjGsycnZ1v/X3cSAQ\n5MXdpwkCq+YX0tc3GNLjZKR73/ZYkShSco73fb3we1+S4yUv08sre+vYfO30iNkTR6+liRfKL51Q\nhledwOhHcltrfec/MMa4jTH/BmwE3m+t1f6cMcaeaae1c4CZJZlMyUt1Oo6McLtcvGNJMQNDfnZp\nzXncC6XMtwG3ABhj1jB8kHO07wFeYPOo6RaJEX0DPiqPtpDkcbPCFDgdRy6wfkkxLuDVqnqno4jD\nQnlf9iSw0RizHXABnzDG3MXwlMpu4FPAq8AfjDEA37TWPhmmvDLJ9thmhnwBVi8ojJi38fJHuZle\nFs7M5cDxVuqauyktSHc6kjhk3FfnyLz4PRd8unrU37VWPUY1jqyUyMtMZs5UrSmPVBuWlHDgeCuv\n7mvgIzfOcTqOOERFLGMKBIJvXgRh9YIi3FrHHLEq5uSTkZrI9gNnGfLpFI94pTKXMVWfbqO9e5DZ\nZVnkZ6c4HUcuwZPg5trFxXT3DbGrWmeExiuVubxN34CPqppzJCW6WT5XF5yIBjcsK8Xlgud31xIM\nakFZPFKZy9u8cWT4oGfFnHy8STroGQ3ys1OomJ3PqbNdHNMZoXFJZS5vUVPXwbG6TnIykpmrg55R\n5aaVUwF4YfcZh5OIE1Tm8qZAIMhPnzsCwKoFhTroGWXmlWdTWpDGHttMW9eA03FkkqnM5U2v7Kvn\nVGMXM0syKcrRmZ7RxuVysXHlVPyBIC/trXU6jkwylbkA0N03xC9fPk5yUgLL5+pMz2i1ekERaV4P\nW/bWM+TzOx1HJpHKXAB48tXjdPcNcfu1M0j16qBntEpOTOC6ilK6+4bYul+XlYsnKnPhdGMXW/bW\nMSU3lZtWRtZWqnL5Nq4sI9Hj5nc7TuHz6ySieKEyj3PBYJCfPn+EYBDu2jgn5H3KJXJlpSezYWkJ\n5zr72XFQo/N4oVdunNt5qJGjtR0sn1vAohl5TseRCfKe1eUkuF08veMUgYBOIooHKvM41tvv47E/\n1JDocfORG2Y7HUcmUG6ml/VLimlq6+N1neIfF1TmcezXW0/Q0TPIprXTtP9KDHrPmmm4XS6e3n6K\ngE7xj3kq8zh1pqmbF/fUUpiTws2rpzkdR8KgMDuFtQuLqGvpYddhXYko1qnM41AwGOTh5yyBYJCP\nbpxLokc/BrHq1vUz8CS4+MWWY1p3HuP0Ko5D2w+cpaa2gxVzC1g8Uwc9Y1lhdgo3rijjXGc/L+zW\nWaGxTGUeZ7r7hnj0DzUkJbp1VZo4sWnddNK8Hp7acZLO3kGn40iYqMzjzGMv1dDdN8Tm9TPJy/I6\nHUcmQZo3kdvWz6BvwM9vtp5wOo6Eico8jtjTbWzd18DUwnQ2XqMzPePJO5eVUpSbypa99dS19Dgd\nR8JAm3BEqC2VdWN+PiPdS1d3/2U/nj8Q5KltJwFYNDOXV/c1XE08iTKeBDcffudsvvXEPn78TDX3\nfnQ5bre2OI4lGpnHiYMnWunoGWTu1GwKtKY8LlXMyWflvEJq6jr4wxs6GBprVOZxoL17gH0150hJ\nTtA1PePcRzfOJc3r4YmXj9PS3ud0HJlAKvMYFwgG2b7/LIFgkDULp5CUmOB0JHFQVloSd900l4Eh\nPw8+W62LP8cQlXmMqz7VRktHP9OnZDC1MN3pOBIB1iwsYvHMPA6dbGPL3rGPzUj0UZnHsK7eQfYe\naSE5MYFVCwqdjiMRwuVy8fGbDWleDz9/8Sgnz3Y6HUkmgMo8Rp2fXvEHgqyaX4g3SQuX5I9yM718\n+raF+P1BvvvkAXr6h5yOJFdJZR6jDp9so7Gtj/KidKYXZzgdRyLQ4pl5vHfddFo6+vnBU4e1s2KU\nU5nHoLauAfYeacGblMCahUW4XFpPLGPbvH4G86flUFnTwm9HzkOQ6KQyjzH+QICt+xoIBIOsWzRF\n0ytySW63i8/ctpD8LC+/3nqCV6rqnY4kV0hlHmMqj56jrWuAOWVZlGn1ioQgMy2JL35oKekpiTz0\nrKWqpsXpSHIFNGyLIfUtPRw80UpGaiIr52n1SrS52BYO513pVg6huL6ilM9/YAn/+vO9/MevDvDl\nO5cxuzQrLM8l4THuyNwY4zbG/KcxZocxZosx5m0XizTGpBpjthlj5oUnpoynb8DH1n0NuF2wYWmJ\nLjghl21WaRb3bF6Ezx/kvkcrsafbnI4klyGUV/xmwGutXQvcC9w3+kZjzErgFWDWxMeTUASCQV7d\n10D/oJ8VplBb28oVq5idzz23L8TnC3D/Y1UcPNnqdCQJUShlvh54FsBauxNYecHtycD7gOqJjSah\nOnC8lbPneikrSGPetGyn40iUWzmvkM/dsZhAEL75+D72Hml2OpKEIJQ580ygY9THfmOMx1rrA7DW\nbgMwxoT0hDk5qXg8kbk/SEFB5KzHzki/+Oh69G2nz3ZSebSF9JRE3r1mOt7kyDoMcqmvI5LEe84L\nf/ZvKsggPy+Nr/3odb795H4+eesibt8wM+RlrpH0WrqUaMkZilBe+Z3A6K/Yfb7Ir0RbW++V/tOw\nKijIoLm5y+kYb7rYga7RB8G6egf5/WuncLtcbKgoZmjIx9DQFX9rJlw4D9hNJOVkzJ/90pwUvnLn\nMr71xD5+8JsD1Jxu5aMb5+JJuPQb+kh7LV1MtOSE0H7phDLNsg24BcAYswbYf3WxZCL4/AG27K1n\ncCjA6oWF5Gdpj3KZeDOKM/nbj62kvDCdlyvrue+RSjq6B5yOJWMIpcyfBPqNMduB+4EvGmPuMsZ8\nOrzR5GKCwSA7DpylrWuAuVOzmFOmeXIJn9xML/f+yXJWzC3Anmnn73+0SytdItC40yzW2gBwzwWf\nftvBTmvt9ROUScax/9g5TjR0kZ/l5Zr5Wk8u4edN8vDZ9y3iuV1nePylY/zrzyt534YZvGf1NF1+\nLkJoMXKUOXqmjcqac6R5PbxzeSkJbn0LZXK4XC7evaqcr9y1jMy0RJ54+Tj/9sheWjsj/3hDPFAT\nRJHmtj5e3HWGxAQ3N6woIyXCVq5IfJg7NZt/+OQqls3Jp/p0O3/3w9fZVd3kdKy4pzaIEp09g7y0\nt45AIMj1K0rJyUh2OpLEkPG2EhjLopm5JCclsOtwE//xqwM8W5zBqgVF5OekXdaqm+srSi/7ueXt\nVOZRoLffxwu7a+kf9HPd8jJKC9KcjiSCy+Vi7tRsinJS2ba/gRMNXTS29nHjNVPJSU9yOl7c0TRL\nhBsc8vPinlq6+4ZYOjuPRTPznI4k8hZZ6UncvLqcijn59A36+O3WE+w8eJYhX8DpaHFFI/MI5vMH\neOmNupEliNksmaUil8jkdrtYMiuPsoI0dhxs5MiZDupbelm3aApT8lKdjhcXNDKPUP7AcJE3tvUx\nrSidVQsKdcUgiXi5mV4+eMMcFs/MpadviOd2nWHX4SZ8fo3Sw01lHoF8/gAv762n4VwvpQVprF9a\ngltFLlEiIcHNsrkFvGdNOVlpSRw+1cZT207S3N7ndLSYpjKPMD5/gAd+c5Da5h6K81K5vqKEBJ2U\nIVEoPzuF966bxvxpOXT2DvHsztPsPdKMP6ALR4eDyjyC+PwB/vPXB9ltmynKSRk+KWicTY1EIpkn\nwc018wt596qppKUksv94K8/sPEW79neZcGqKCDHk8/OdX+7njSPNzCvP5oYVZePuTicSLYpyU9l0\n7TRml2bR2jnAU9tPcfhkG8GgRukTRW0RAQaG/Py/J/ZTdewcC2fk8vkPLtVl3yTmJHkSWLd4Ctcv\nKyExwc2u6iZe2F1LW5dG6RNBjeGw7r4h7nukkgMnWlkyK4//9v7FJCdG5sU7RCZCeVEGt62fTml+\nGg3nevnqD15jj9XVjK6WytxBbV0D/MvP3qCmroM1C4r43B2LSYzQqzCJTKSUZA83rChl1fxCBn0B\nvvPkfn78bDUDg36no0UtlblDGs718PWf7KGuuYcbV5Rx960LNEcuccXlcjFvWg5f/fhKygqGL37x\nDw/u4tTZ6Lj6T6RRezig+lQb//TQHlo6+tn8jhncddMcrSOXuFVakM7ffnwl77pmKmdbe/naQ7t5\n9rXTBHRw9LKozCfZtv0N3PdoJQNDfj713vncdu0MndkpcS/R4+YjN87hSx9aSlpKIo+9VMP9j1Zq\nCeNlUJlPkkAgyONbavjB04dJTkzgv3+4gmsXFzsdSySiLJqZxz9+chVLZuVx8GQbX/3B67xxRAdH\nQ6EynwQ9/UN84xdVPLPzNEU5Kfyvj61g3rQcp2OJRKTMtCQ+/4ElfHTjXAaG/Hz7l/t58Jlq+gd9\nTkeLaNo1Mcxqm7r59pP7aWrrY/HMPD5z2wJSvYlOxxKJaC6XixtXlDGvPJsHfnuIV6rqqT7Vxt23\nLmB2aZbT8SKSRuZhEgwGebmyjv/90G6a2vq4Zc00Pv+BJSpykctQWpDO33xsJTevLqe5vY+v/2QP\nT7x8TLswjkEj8zDoG/Dx8O8tOw81kub1cM/tC1k2p8DpWCJRKdHj5kPvnE3F7Hz+66lDPL3jFFU1\nLXzilvnMKM50Ol7E0Mh8gh0+2cpXf/AaOw81Mqs0k7//xCoVucgEOH8h6esrSqht7uFrD+3m8Zdq\nGBzSiUagkfmEGRj084uXj/HinlrcLhe3rpvOrddO14lAIhMoJdnDx26exzXzi3jwmcM889pp9thm\n7to4N+6vxKUynwB7jzbzs+ePcq6zn+K8VO7etEBv/0TCaP60HP7xk6v51dbjPL+rlm88XsWKuQV8\n5MY55GV5nY7nCJX5VWhq7+ORF45SWdNCgtvFe9dO49Z100nSRlkiYZeclMCHb5jDtYuKeeg5y54j\nzVQdO8e7rpnKLWumkeqNr3qLr692gnT2DPLb7SfZsrcOfyDIvPJs/uRdhpL8NKejicSdssJ07v3o\ncnYcOMsvXznO73ae4pWqejatm871FSVxM7hSmV+Gzp5BXthzhud31zIw6Kcg28v7r5vFNfN0sWUR\nJ7ldLq6VoxiIAAAG1klEQVRdXMzKeYU8v+sMv9t5ikdePMrvdp7i5lXlXL+sBG9SbNddbH91E+Rs\nay/P7zrD1v0NDPkCZKYm8oHrZnFdRYkOcIpEkOTEBDatm851FSU8v/sML+yu5bGXanhq+0nesbSY\ndy4vozA7xemYYaEyv4iBIT97bBOvVDVw5Ew7APlZXm5eXc76xcVx89ZNJBplpCZxx4ZZvOuacl7c\nU8tLb9Ty+9fP8NzrZ1g0M4+1i4rYuDa2Sl1lPkrfgI99x86xxzax7/g5BoeGzzKbPy2H6ypKWGEK\nSHBrJC4SLdJTErl9/QxuWTON3baJF/fUsv/4OfYfP8dDz1oqZuezZHYei2fmkRblZ2fHdZl39w1x\n8mwnR860c7Suk6On29/cQ7koJ4Vr5heyfnExhTmpDicVkauR6HGzduEU1i6cQsO5HnYcbGRXdRM7\nDzWy81AjbpeLmSWZzJ2azZyyLGaVZpGeEl3lPm6ZG2PcwHeBpcAAcLe1tmbU7bcCXwV8wA+ttd8P\nU9YrEggG6eoZ5FznAI2tvTS09tJwrofTjV00t/e/eT+328WMkgwWTs9lpSmktCBNBzVFYlBxXhp3\nbJjJp+9YwhsHG6g6do59x1o4Vt9BTV3Hm/fLy0xmamEGZYVpFOWkUpCdQmFOCpmpSbjdkdcNoYzM\nNwNea+1aY8wa4D7gdgBjTCJwP3AN0ANsM8b8xlrbONFBg8Egpxu76R3w4fMH8PkCDAz5R/4E6Bvw\n0Tfgo3fAR3fvEF29g3T0DNLePYDP//YrlqR5PSyakcv04gxmlWSxblkZPV39YzyziMQil8tFeVEG\n5UUZ3LpuOn0DPo7XD79TP97QyZmmbiprWqisaXnLv3O7XGSlJ5GdnkxGaiLpKcN/vEkJeJM8pCQn\nkJSYQJLHTaIngcQEFwkJbpIS3UwtTA/bVG0oZb4eeBbAWrvTGLNy1G3zgRprbRuAMWYrsAF4fKKD\nvn64ie/95mDI909wu8hITWRqYQZ5mcnkZnopzEmhODeVKXlpZKcnvWXknepNVJmLxLGUZA8LZ+Sy\ncEbum5/r6BmkvrmbpvY+mtr6aG7vo717kLauAc40dY05ULyUm1eX86F3zp7o6EBoZZ4JdIz62G+M\n8VhrfWPc1gVccrPhgoKMK3p/sum6DDZdF57/hPMKCjLC+viX44Mb5zkdQSTmjfeaLyiA2dOjY8+X\nUMb7ncDor9g9UuRj3ZYBtE9QNhERCVEoZb4NuAVgZM58/6jbDgNzjDG5xpgkhqdYdkx4ShERuSRX\nMHjpOZ9Rq1mWAC7gE8ByIN1a+8Co1SxuhlezfCe8kUVE5ELjlrmIiEQ+nc4oIhIDVOYiIjFAZS4i\nEgPiem+W0YwxacDPgBxgEPi4tbbO2VRvZ4zJAn7C8Br/JOBL1tqIXUFkjHkf8EFr7V1OZxltvG0q\nIo0xZjXwL9ba653OcjEjZ4T/EJgOJANfs9b+xtFQYzDGJADfBwwQBO6x1h5wNtXFGWMKgT3ARmtt\n9cXup5H5H/05sMdau4HhsvyKw3ku5kvAi9ba64A/AyJ29ZAx5pvA14nMn7M3t6kA7mV4m4qIZIz5\nCvBfQKRf3PJPgHPW2ncANwPfdjjPxdwKYK29Fvgb4J+cjXNxI78gvwf0jXffSHyROcJa+w3++E0t\nJ3JPfrqf4W8uDL+ziuQ9CLYDf+F0iIt4yzYVwMpL391Rx4A7nA4RgseBvx35u4vhzfcijrX2V8Cn\nRz6cRuS+1gH+DfhPoH68O8blNIsx5lPAFy/49CestbuMMX8AFgMbJz/ZW42TcwrD7yC+MPnJ3uoS\nOR81xlzvQKRQXGqbiohirX3CGDPd6RzjsdZ2AxhjMoBfMDzqjUjWWp8x5sfA+4APOJ1nLMaYPwOa\nrbW/N8b81Xj31zrzMRhj5gFPW2tnOZ1lLMaYxcAjwJettc84nedSRsr8HmvtR5zOMpox5t+Bndba\nx0Y+rrXWljkc66JGyvwRa+0ap7NcijFmKvAk8F1r7Q+dzjOekUHRa8ACa22P03lGM8a8wvCcfhCo\nAI4At1lrz451/7gcmY9l5DdfrbX2YaAb8DscaUzGmAUMv539sLW2yuk8UWwbw3Onj42xTYVcAWNM\nEfAc8Dlr7YtO57kYY8yfAmXW2q8DvUBg5E9EGTl+B4AxZgvDg6IxixxU5qP9EPjxyJRBAsPbFkSi\nrzN8IOybxhiADmvt7c5GikpPAhuNMdv54zYVcnX+muHVYH9rjDk/d/4ea+24B+8m2S+BH42MfBOB\nL0RgxsumaRYRkRig1SwiIjFAZS4iEgNU5iIiMUBlLiISA1TmIiIxQGUuIhIDVOYiIjHg/wNFf55e\n3lJSMAAAAABJRU5ErkJggg==\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "sns.distplot(s_2)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "类似地,可以为s_2绘制histogram及kde图。" - ] - }, - { - "cell_type": "code", - "execution_count": 84, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "(-0.0063696106929140347,\n", - " 0.027355468589977068,\n", - " -0.020933532783578457,\n", - " -0.20411177773807099)" - ] - }, - "execution_count": 84, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s_1.skew(),s_2.skew(),s_1.kurt(),s_2.kurt()," - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**偏度**(Skewness)、偏态、偏态系数,是统计数据分布偏斜方向和程度的度量,是统计数据分布非对称程度的数字特征。正态分布的偏度为零。\n", - "- Skewness=0 分布形态与正态分布偏度相同\n", - "- Skewness>0 正偏差数值较大,为正偏或右偏。长尾巴拖在右边。\n", - "- Skewness<0 负偏差数值较大,为负偏或左偏。长尾巴拖在左边。\n", - "\n", - "**峰度**(Kurtosis)、峰态、峰态系数,是描述总体中所有取值分布形态陡缓程度的统计量。正态分布的峰度为3(也有很多将计算得到的峰度-3,而使正态分布峰度为零的做法)。\n", - "- Kurtosis=3(或0) 分布形态与正态分布峰度相同\n", - "- Kurtosis>3(或0) 正偏差数值较大,尖峰,厚尾。\n", - "- Kurtosis<3(或0) 负偏差数值较大,扁峰,薄尾。\n", - "\n", - "本例中,s_1比s_2更接近于正态分布。" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 3. Series类型基本操作整理\n", - "**3.1 创建与查看**\n", - "\n", - "创建一个Series的基本方法是:s = Series(data, index=index)。其中,data指代许多不同的数据类型:\n", - "- a Python dict\n", - "- an ndarray\n", - "- a scalar value (like 6)\n", - "\n", - "index指一个标签序列,一般用list类型。" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**3.1.1 利用list创建Series**" - ] - }, - { - "cell_type": "code", - "execution_count": 85, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "0 0\n", - "1 1\n", - "2 4\n", - "3 9\n", - "4 16\n", - "5 25\n", - "6 36\n", - "7 49\n", - "8 64\n", - "9 81\n", - "10 100\n", - "11 121\n", - "12 144\n", - "13 169\n", - "14 196\n", - "15 225\n", - "16 256\n", - "17 289\n", - "18 324\n", - "19 361\n", - "20 400\n", - "21 441\n", - "22 484\n", - "23 529\n", - "24 576\n", - "25 625\n", - "26 676\n", - "27 729\n", - "28 784\n", - "29 841\n", - " ... \n", - "70 4900\n", - "71 5041\n", - "72 5184\n", - "73 5329\n", - "74 5476\n", - "75 5625\n", - "76 5776\n", - "77 5929\n", - "78 6084\n", - "79 6241\n", - "80 6400\n", - "81 6561\n", - "82 6724\n", - "83 6889\n", - "84 7056\n", - "85 7225\n", - "86 7396\n", - "87 7569\n", - "88 7744\n", - "89 7921\n", - "90 8100\n", - "91 8281\n", - "92 8464\n", - "93 8649\n", - "94 8836\n", - "95 9025\n", - "96 9216\n", - "97 9409\n", - "98 9604\n", - "99 9801\n", - "dtype: int64" - ] - }, - "execution_count": 85, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s = Series([x*x for x in range(100)])\n", - "s" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 第一行利用一个list,创建了一个Series对象s\n", - "- 第二行查看该对象。\n", - "- 该对象由两部分组成,第一列为index,第二列为values。" - ] - }, - { - "cell_type": "code", - "execution_count": 86, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "0 0\n", - "1 1\n", - "2 4\n", - "3 9\n", - "4 16\n", - "dtype: int64" - ] - }, - "execution_count": 86, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s.head()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "数据太长,可用head()函数查看前几个数据。" - ] - }, - { - "cell_type": "code", - "execution_count": 87, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "90 8100\n", - "91 8281\n", - "92 8464\n", - "93 8649\n", - "94 8836\n", - "95 9025\n", - "96 9216\n", - "97 9409\n", - "98 9604\n", - "99 9801\n", - "dtype: int64" - ] - }, - "execution_count": 87, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s.tail(10)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "也可用tail()函数查看最后几个数据,head()及tail()函数内可放整型参数,代表列出的数据个数。" - ] - }, - { - "cell_type": "code", - "execution_count": 88, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "array([ 0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100,\n", - " 121, 144, 169, 196, 225, 256, 289, 324, 361, 400, 441,\n", - " 484, 529, 576, 625, 676, 729, 784, 841, 900, 961, 1024,\n", - " 1089, 1156, 1225, 1296, 1369, 1444, 1521, 1600, 1681, 1764, 1849,\n", - " 1936, 2025, 2116, 2209, 2304, 2401, 2500, 2601, 2704, 2809, 2916,\n", - " 3025, 3136, 3249, 3364, 3481, 3600, 3721, 3844, 3969, 4096, 4225,\n", - " 4356, 4489, 4624, 4761, 4900, 5041, 5184, 5329, 5476, 5625, 5776,\n", - " 5929, 6084, 6241, 6400, 6561, 6724, 6889, 7056, 7225, 7396, 7569,\n", - " 7744, 7921, 8100, 8281, 8464, 8649, 8836, 9025, 9216, 9409, 9604,\n", - " 9801], dtype=int64)" - ] - }, - "execution_count": 88, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s.values" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "查看序列s的值" - ] - }, - { - "cell_type": "code", - "execution_count": 89, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "numpy.ndarray" - ] - }, - "execution_count": 89, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "type(s.values)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 查看s.values的类型\n", - "- Series对象的values的类型确实为numpy的array(数组)类型,即ndarray(n维数组)" - ] - }, - { - "cell_type": "code", - "execution_count": 90, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "RangeIndex(start=0, stop=100, step=1)" - ] - }, - "execution_count": 90, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s.index" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 查看s的index(索引)的值" - ] - }, - { - "cell_type": "code", - "execution_count": 91, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "pandas.indexes.range.RangeIndex" - ] - }, - "execution_count": 91, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "type(s.index)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 查看s.index的类型\n", - "- Series对象的索引在未指定时,为pandas内置的RangeIndex类型,类似于python的range类型。" - ] - }, - { - "cell_type": "code", - "execution_count": 92, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "e 0\n", - "d 1\n", - "n 4\n", - "b 9\n", - "w 16\n", - "dtype: int64" - ] - }, - "execution_count": 92, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s2 = Series([x*x for x in range(26)], index=set('abcdefghijklmnopqrstuvwxyz'))\n", - "s2.head()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 利用list创建Series对象时,可用index参数指定一个list或set对应索引。" - ] - }, - { - "cell_type": "code", - "execution_count": 93, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "(pandas.indexes.base.Index,\n", - " Index(['e', 'd', 'n', 'b', 'w', 'o', 'm', 't', 'i', 'p', 'a', 'l', 'z', 'y',\n", - " 'u', 'x', 'k', 'j', 'f', 'v', 'c', 's', 'q', 'r', 'g', 'h'],\n", - " dtype='object'))" - ] - }, - "execution_count": 93, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "type(s2.index), s2.index" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 指定索引后,Series对象的索引是pandas内置的Index类型" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**3.1.2 利用dict创建Series**" - ] - }, - { - "cell_type": "code", - "execution_count": 94, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "喜欢 3000\n", - "恨 500\n", - "爱 7000\n", - "讨厌 1000\n", - "dtype: int64" - ] - }, - "execution_count": 94, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "data = {'喜欢':3000,'爱':7000,'讨厌':1000,'恨':500}\n", - "s3 = Series(data)\n", - "s3" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 可用dict创建Series对象,则字典的键自动成为index" - ] - }, - { - "cell_type": "code", - "execution_count": 95, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "a NaN\n", - "b NaN\n", - "c NaN\n", - "爱 7000.0\n", - "dtype: float64" - ] - }, - "execution_count": 95, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s3 = Series(data, index = ['a','b','c','爱'])\n", - "s3" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 初始化时,也可以额外指定index。但是如果指定的index找不到对应的值,则该index对应值设为NaN(Not a Number)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**3.1.3 利用标量创建Series对象**" - ] - }, - { - "cell_type": "code", - "execution_count": 96, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "a 5\n", - "b 5\n", - "c 5\n", - "d 5\n", - "e 5\n", - "dtype: int64" - ] - }, - "execution_count": 96, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s0 = Series(5, index = ['a','b','c','d','e'])\n", - "s0" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 利用标量创建Series对象时,对象的值将均为标量的值" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**3.1.4 利用Series对象创建Series对象**" - ] - }, - { - "cell_type": "code", - "execution_count": 97, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "a NaN\n", - "b NaN\n", - "c NaN\n", - "爱 7000.0\n", - "dtype: float64" - ] - }, - "execution_count": 97, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s4 = Series(s3)\n", - "s4" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 这是最简单的利用Series对象创建Series对象的代码" - ] - }, - { - "cell_type": "code", - "execution_count": 98, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "喜欢 NaN\n", - "爱 7000.0\n", - "讨厌 NaN\n", - "中 NaN\n", - "dtype: float64" - ] - }, - "execution_count": 98, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s5 = Series(s4, index = ['喜欢','爱','讨厌','中'])\n", - "s5" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 与利用dict初始化类似,也可以额外指定index。" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**3.2 访问Series对象的元素**" - ] - }, - { - "cell_type": "code", - "execution_count": 99, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "(nan, 7000.0, 7000.0)" - ] - }, - "execution_count": 99, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s4[0], s4['爱'], s4.爱" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 利用位置索引或者index均可以访问对应元素\n", - "- 还可以利用index的值作为属性来访问对应元素" - ] - }, - { - "cell_type": "code", - "execution_count": 100, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "a NaN\n", - "b NaN\n", - "dtype: float64" - ] - }, - "execution_count": 100, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s4[0:2]" - ] - }, - { - "cell_type": "code", - "execution_count": 101, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "爱 7000.0\n", - "dtype: float64" - ] - }, - "execution_count": 101, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s4['喜欢':'爱']" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 位置索引及index的切片访问也适用,但利用index切片是包含末端的" - ] - }, - { - "cell_type": "code", - "execution_count": 102, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "Index(['a', 'b', 'c', '爱'], dtype='object')" - ] - }, - "execution_count": 102, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s4.index" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 可以利用index属性访问Series对象的索引" - ] - }, - { - "cell_type": "code", - "execution_count": 103, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "array([ nan, nan, nan, 7000.])" - ] - }, - "execution_count": 103, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s4.values" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 可以利用values属性访问Series对象的值" - ] - }, - { - "cell_type": "code", - "execution_count": 104, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "a nan\n", - "b nan\n", - "c nan\n", - "爱 7000.0\n" - ] - } - ], - "source": [ - "for k, v in s4.items():\n", - " print(k, v)" - ] - }, - { - "cell_type": "code", - "execution_count": 105, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "a\n", - "b\n", - "c\n", - "爱\n" - ] - } - ], - "source": [ - "for k in s4.keys():\n", - " print(k)" - ] - }, - { - "cell_type": "code", - "execution_count": 106, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "nan\n", - "nan\n", - "nan\n", - "7000.0\n" - ] - } - ], - "source": [ - "for v in s4:\n", - " print(v)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 可以类似dict一样迭代访问Series对象的各个元素" - ] - }, - { - "cell_type": "code", - "execution_count": 107, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "a\n", - "b\n", - "c\n", - "爱\n" - ] - } - ], - "source": [ - "for k in s4.index:\n", - " print(k)" - ] - }, - { - "cell_type": "code", - "execution_count": 108, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "nan\n", - "nan\n", - "nan\n", - "7000.0\n" - ] - } - ], - "source": [ - "for v in s4.values:\n", - " print(v)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 也可以利用index与values属性迭代访问" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**3.3 修改、删除、排序等基本运算**" - ] - }, - { - "cell_type": "code", - "execution_count": 109, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "a 10000.0\n", - "b NaN\n", - "c NaN\n", - "爱 7000.0\n", - "dtype: float64" - ] - }, - "execution_count": 109, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s4[0] = 10000\n", - "s4" - ] - }, - { - "cell_type": "code", - "execution_count": 110, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "a 10000.0\n", - "b NaN\n", - "c NaN\n", - "爱 4078.0\n", - "dtype: float64" - ] - }, - "execution_count": 110, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s4['爱'] = 4078\n", - "s4" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- Series对象内的值可以直接根据位置或index被赋值(修改)" - ] - }, - { - "cell_type": "code", - "execution_count": 111, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "a 666.0\n", - "b 666.0\n", - "c 666.0\n", - "爱 4078.0\n", - "dtype: float64" - ] - }, - "execution_count": 111, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s4[0:3] = 666\n", - "s4" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 可以切片式赋值" - ] - }, - { - "cell_type": "code", - "execution_count": 112, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "a 666.0\n", - "b 666.0\n", - "c 666.0\n", - "d 4078.0\n", - "dtype: float64" - ] - }, - "execution_count": 112, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s4.index = ['a', 'b', 'c', 'd']\n", - "s4" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- Series对象的index可以直接被赋值(修改),注意新的index的长度要与Series对象中index的长度一致。" - ] - }, - { - "cell_type": "code", - "execution_count": 113, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "喜欢 NaN\n", - "爱 4078.0\n", - "讨厌 NaN\n", - "中 NaN\n", - "e NaN\n", - "dtype: float64" - ] - }, - "execution_count": 113, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s4 = s3.reindex(['喜欢','爱','讨厌','中', 'e'])\n", - "s4" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 可用reindex方法来更改index,找不到对应值的index,则其值为NaN。" - ] - }, - { - "cell_type": "code", - "execution_count": 114, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "喜欢 NaN\n", - "爱 4078.0\n", - "讨厌 NaN\n", - "中 NaN\n", - "e NaN\n", - "dtype: float64" - ] - }, - "execution_count": 114, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s5 = s4.drop('e')\n", - "s4" - ] - }, - { - "cell_type": "code", - "execution_count": 115, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "喜欢 NaN\n", - "爱 4078.0\n", - "讨厌 NaN\n", - "中 NaN\n", - "dtype: float64" - ] - }, - "execution_count": 115, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s5" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 可利用drop函数删除指定索引及值,生成新的Series对象,但原series对象不变。" - ] - }, - { - "cell_type": "code", - "execution_count": 116, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "e NaN\n", - "中 NaN\n", - "喜欢 NaN\n", - "爱 8156.0\n", - "讨厌 NaN\n", - "dtype: float64" - ] - }, - "execution_count": 116, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s4+s5" - ] - }, - { - "cell_type": "code", - "execution_count": 117, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "e NaN\n", - "中 NaN\n", - "喜欢 NaN\n", - "爱 0.0\n", - "讨厌 NaN\n", - "dtype: float64" - ] - }, - "execution_count": 117, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s4-s5" - ] - }, - { - "cell_type": "code", - "execution_count": 118, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "e NaN\n", - "中 NaN\n", - "喜欢 NaN\n", - "爱 16630084.0\n", - "讨厌 NaN\n", - "dtype: float64" - ] - }, - "execution_count": 118, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s4*s5" - ] - }, - { - "cell_type": "code", - "execution_count": 119, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "e NaN\n", - "中 NaN\n", - "喜欢 NaN\n", - "爱 1.0\n", - "讨厌 NaN\n", - "dtype: float64" - ] - }, - "execution_count": 119, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s4/s5" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- Serires对象可以直接进行四则运算,运算规则是对应索引的值进行运算,整体运算结果仍然是Series对象。\n", - "- 如果索引值无法对应,则结果为NaN。" - ] - }, - { - "cell_type": "code", - "execution_count": 120, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "爱 4078.0\n", - "喜欢 NaN\n", - "讨厌 NaN\n", - "中 NaN\n", - "e NaN\n", - "dtype: float64" - ] - }, - "execution_count": 120, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s4.sort_values()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 按照values(值)进行排序,按值排序时,NaN将排在尾端" - ] - }, - { - "cell_type": "code", - "execution_count": 121, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "e NaN\n", - "中 NaN\n", - "喜欢 NaN\n", - "爱 4078.0\n", - "讨厌 NaN\n", - "dtype: float64" - ] - }, - "execution_count": 121, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s4.sort_index()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 按照index(索引)进行排序" - ] - }, - { - "cell_type": "code", - "execution_count": 122, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "爱 4078.0\n", - "喜欢 NaN\n", - "讨厌 NaN\n", - "中 NaN\n", - "e NaN\n", - "dtype: float64" - ] - }, - "execution_count": 122, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s4.sort_values(ascending=False)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 将ascending参数指定为False,则变为倒序排序" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**3.4 处理NaN值**" - ] - }, - { - "cell_type": "code", - "execution_count": 123, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "喜欢 1.0\n", - "爱 4078.0\n", - "讨厌 1.0\n", - "中 1.0\n", - "e 1.0\n", - "dtype: float64" - ] - }, - "execution_count": 123, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s5 = s4.fillna(1)\n", - "s5" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 可以利用内置fillna()函数,将NaN值替换为指定数值" - ] - }, - { - "cell_type": "code", - "execution_count": 124, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "喜欢 NaN\n", - "爱 4078.0\n", - "不讨厌 0.0\n", - "中 NaN\n", - "dtype: float64" - ] - }, - "execution_count": 124, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s6 = s4.reindex(['喜欢','爱','不讨厌','中'], fill_value = 0)\n", - "s6" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 可在reindex方法内利用fill_value参数,指定值来替换在重新索引时新出现的NaN值,\n", - "- 注意,fill_value参数与不会对原有NaN值进行替换。" - ] - }, - { - "cell_type": "code", - "execution_count": 125, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "e NaN\n", - "不讨厌 NaN\n", - "中 NaN\n", - "喜欢 NaN\n", - "爱 8156.0\n", - "讨厌 NaN\n", - "dtype: float64" - ] - }, - "execution_count": 125, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s4.add(s6)" - ] - }, - { - "cell_type": "code", - "execution_count": 126, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "e NaN\n", - "不讨厌 0.0\n", - "中 NaN\n", - "喜欢 NaN\n", - "爱 8156.0\n", - "讨厌 NaN\n", - "dtype: float64" - ] - }, - "execution_count": 126, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s4.add(s6, fill_value=0)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 两个Series对象相加可用add方法,设置fill_value参数的值,替换非对齐index部分的NaN值。fill_value参数不会对运算前的NaN进行填充。\n", - "- 类似还有sub,div,mul方法,分别对应减法、除法及乘法。" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**3.5 过滤**" - ] - }, - { - "cell_type": "code", - "execution_count": 127, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "0 False\n", - "1 False\n", - "2 False\n", - "3 False\n", - "4 False\n", - "5 False\n", - "6 False\n", - "7 False\n", - "8 False\n", - "9 False\n", - "10 False\n", - "11 False\n", - "12 False\n", - "13 False\n", - "14 False\n", - "15 False\n", - "16 False\n", - "17 False\n", - "18 False\n", - "19 False\n", - "20 False\n", - "21 False\n", - "22 False\n", - "23 False\n", - "24 False\n", - "25 False\n", - "26 False\n", - "27 False\n", - "28 False\n", - "29 False\n", - " ... \n", - "70 True\n", - "71 True\n", - "72 True\n", - "73 True\n", - "74 True\n", - "75 True\n", - "76 True\n", - "77 True\n", - "78 True\n", - "79 True\n", - "80 True\n", - "81 True\n", - "82 True\n", - "83 True\n", - "84 True\n", - "85 True\n", - "86 True\n", - "87 True\n", - "88 True\n", - "89 True\n", - "90 True\n", - "91 True\n", - "92 True\n", - "93 True\n", - "94 True\n", - "95 True\n", - "96 True\n", - "97 True\n", - "98 True\n", - "99 True\n", - "dtype: bool" - ] - }, - "execution_count": 127, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s > 1000" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- Series对象进行比较等逻辑运算,结果仍然是一个Series对象,每一维度的值根据运算结果为True或False" - ] - }, - { - "cell_type": "code", - "execution_count": 128, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "32 1024\n", - "33 1089\n", - "34 1156\n", - "35 1225\n", - "36 1296\n", - "37 1369\n", - "38 1444\n", - "39 1521\n", - "40 1600\n", - "41 1681\n", - "42 1764\n", - "43 1849\n", - "44 1936\n", - "45 2025\n", - "46 2116\n", - "47 2209\n", - "48 2304\n", - "49 2401\n", - "50 2500\n", - "51 2601\n", - "52 2704\n", - "53 2809\n", - "54 2916\n", - "55 3025\n", - "56 3136\n", - "57 3249\n", - "58 3364\n", - "59 3481\n", - "60 3600\n", - "61 3721\n", - " ... \n", - "70 4900\n", - "71 5041\n", - "72 5184\n", - "73 5329\n", - "74 5476\n", - "75 5625\n", - "76 5776\n", - "77 5929\n", - "78 6084\n", - "79 6241\n", - "80 6400\n", - "81 6561\n", - "82 6724\n", - "83 6889\n", - "84 7056\n", - "85 7225\n", - "86 7396\n", - "87 7569\n", - "88 7744\n", - "89 7921\n", - "90 8100\n", - "91 8281\n", - "92 8464\n", - "93 8649\n", - "94 8836\n", - "95 9025\n", - "96 9216\n", - "97 9409\n", - "98 9604\n", - "99 9801\n", - "dtype: int64" - ] - }, - "execution_count": 128, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s[s>1000]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 可以利用逻辑运算的结果Series,对Series对象进行过滤,得到满足条件的Series" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**3.6 时间序列(Time Series)**示例" - ] - }, - { - "cell_type": "code", - "execution_count": 129, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "DatetimeIndex(['2012-01-01 00:00:00', '2012-01-01 00:00:01',\n", - " '2012-01-01 00:00:02', '2012-01-01 00:00:03',\n", - " '2012-01-01 00:00:04', '2012-01-01 00:00:05',\n", - " '2012-01-01 00:00:06', '2012-01-01 00:00:07',\n", - " '2012-01-01 00:00:08', '2012-01-01 00:00:09',\n", - " '2012-01-01 00:00:10', '2012-01-01 00:00:11',\n", - " '2012-01-01 00:00:12', '2012-01-01 00:00:13',\n", - " '2012-01-01 00:00:14', '2012-01-01 00:00:15',\n", - " '2012-01-01 00:00:16', '2012-01-01 00:00:17',\n", - " '2012-01-01 00:00:18', '2012-01-01 00:00:19',\n", - " '2012-01-01 00:00:20', '2012-01-01 00:00:21',\n", - " '2012-01-01 00:00:22', '2012-01-01 00:00:23',\n", - " '2012-01-01 00:00:24', '2012-01-01 00:00:25',\n", - " '2012-01-01 00:00:26', '2012-01-01 00:00:27',\n", - " '2012-01-01 00:00:28', '2012-01-01 00:00:29',\n", - " '2012-01-01 00:00:30', '2012-01-01 00:00:31',\n", - " '2012-01-01 00:00:32', '2012-01-01 00:00:33',\n", - " '2012-01-01 00:00:34', '2012-01-01 00:00:35',\n", - " '2012-01-01 00:00:36', '2012-01-01 00:00:37',\n", - " '2012-01-01 00:00:38', '2012-01-01 00:00:39',\n", - " '2012-01-01 00:00:40', '2012-01-01 00:00:41',\n", - " '2012-01-01 00:00:42', '2012-01-01 00:00:43',\n", - " '2012-01-01 00:00:44', '2012-01-01 00:00:45',\n", - " '2012-01-01 00:00:46', '2012-01-01 00:00:47',\n", - " '2012-01-01 00:00:48', '2012-01-01 00:00:49',\n", - " '2012-01-01 00:00:50', '2012-01-01 00:00:51',\n", - " '2012-01-01 00:00:52', '2012-01-01 00:00:53',\n", - " '2012-01-01 00:00:54', '2012-01-01 00:00:55',\n", - " '2012-01-01 00:00:56', '2012-01-01 00:00:57',\n", - " '2012-01-01 00:00:58', '2012-01-01 00:00:59',\n", - " '2012-01-01 00:01:00', '2012-01-01 00:01:01',\n", - " '2012-01-01 00:01:02', '2012-01-01 00:01:03',\n", - " '2012-01-01 00:01:04', '2012-01-01 00:01:05',\n", - " '2012-01-01 00:01:06', '2012-01-01 00:01:07',\n", - " '2012-01-01 00:01:08', '2012-01-01 00:01:09',\n", - " '2012-01-01 00:01:10', '2012-01-01 00:01:11',\n", - " '2012-01-01 00:01:12', '2012-01-01 00:01:13',\n", - " '2012-01-01 00:01:14', '2012-01-01 00:01:15',\n", - " '2012-01-01 00:01:16', '2012-01-01 00:01:17',\n", - " '2012-01-01 00:01:18', '2012-01-01 00:01:19',\n", - " '2012-01-01 00:01:20', '2012-01-01 00:01:21',\n", - " '2012-01-01 00:01:22', '2012-01-01 00:01:23',\n", - " '2012-01-01 00:01:24', '2012-01-01 00:01:25',\n", - " '2012-01-01 00:01:26', '2012-01-01 00:01:27',\n", - " '2012-01-01 00:01:28', '2012-01-01 00:01:29',\n", - " '2012-01-01 00:01:30', '2012-01-01 00:01:31',\n", - " '2012-01-01 00:01:32', '2012-01-01 00:01:33',\n", - " '2012-01-01 00:01:34', '2012-01-01 00:01:35',\n", - " '2012-01-01 00:01:36', '2012-01-01 00:01:37',\n", - " '2012-01-01 00:01:38', '2012-01-01 00:01:39'],\n", - " dtype='datetime64[ns]', freq='S')" - ] - }, - "execution_count": 129, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "rng = pd.date_range('1/1/2012', periods=100, freq='S')\n", - "rng" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- Pandas内置的date_range()函数,可以很方便的得到时间标签\n", - "- 第一个参数'1/1/2012'为时间字符串,表示开始时间\n", - "- 第二个参数periods为时间标签个数,此处设为100\n", - "- 第三个参数freq为时间频率间隔,此处的'S'表示间隔为秒,常用的为S,Min,H,D,M分别为秒、分、小时、天,月。" - ] - }, - { - "cell_type": "code", - "execution_count": 130, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "2012-01-01 00:00:00 18\n", - "2012-01-01 00:00:01 98\n", - "2012-01-01 00:00:02 182\n", - "2012-01-01 00:00:03 371\n", - "2012-01-01 00:00:04 193\n", - "Freq: S, dtype: int32" - ] - }, - "execution_count": 130, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ts = Series(np.random.randint(0, 500, len(rng)), index=rng)\n", - "ts.head()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 将时间标签作为Series对象的index,随机生成0-500间100个整数,作为Series对象的值。" - ] - }, - { - "cell_type": "code", - "execution_count": 131, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 131, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "ts.plot()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 利用plot()函数绘图" - ] - }, - { - "cell_type": "code", - "execution_count": 132, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "2012-01-01 00:00:00 244.950\n", - "2012-01-01 00:01:00 218.425\n", - "Freq: T, dtype: float64" - ] - }, - "execution_count": 132, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ts1 = ts.resample('Min').mean()\n", - "ts1" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 利用resample()函数,可将时间序列重新抽样。\n", - "- 样本时间间隔根据resample()函数参数决定,本例中,样本时间间隔设为分钟(Min)\n", - "- 重新设定样本间隔后,可利用mean()函数,求得每个时间间隔内值的均值,作为新的index对应的值" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**3.7 输出**" - ] - }, - { - "cell_type": "code", - "execution_count": 133, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYAAAAD3CAYAAAAUl4NyAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xl01eW97/H3zjyQhAR2CIQZ5GEGhSqKILYqgiigxVpr\njx20aq319Jyz7rlt7Vq359jbe2y11drWnvZYxzqAYuuAsyjgVDVAgPBAGAKEISFkHvfwu3/sHUgs\nJGEnZE+f11osNr/9S/LdX3aez/6Nj8txHEREJP4khLsAEREJDwWAiEicUgCIiMQpBYCISJxSAIiI\nxKmkcBfQU16vz6mubgp3GREjNzcD9eME9eME9aKzeO+H253lOtVzUbMFkJSUGO4SIor60Zn6cYJ6\n0Zn6cWpREwAiItK3FAAiInGqR8cAjDHnAf9lrV1gjBkPPAI4wBbgdmut3xhzM3AL4AXutta+ZIxJ\nB54A8oF64EZrbaUxZg5wf3Dd1621P+3rFyYiIl3rdgvAGPO/gD8BacFF9wF3WWvnAS5gqTGmAPg+\nMBdYCPzcGJMK3AYUB9d9DLgr+D0eAq4HLgTOM8ac3XcvSUREeqInWwC7gKuBx4P/ngW8G3y8BrgM\n8AEbrLWtQKsxphSYTmCAv6fDuj8xxmQDqdbaXQDGmNeAS4Ci7gpxu7N68prihvrRmfpxgnrRmfpx\nct0GgLX2OWPM6A6LXNba9jvI1QM5QDZQ22Gdky3vuKzuc+uO7UmxlZX1PVktLrjdWepHB+rHCepF\nZ/Hej67CL5SDwP4Oj7OAGgIDelY3y7tbV0RE+lEoAVBkjFkQfLwIWAd8DMwzxqQZY3KASQQOEG8A\nFndc11pbB7QZY8YZY1wEjhms68VrEBGRk9hYerTL50MJgH8FfmqM+QBIAVZZaw8DDxAYyN8Gfmyt\nbQF+D0wxxqwHvgO0n+1zK/AkgeAostZ+FEIdIiJyClv3HuPB54q7XMcVRRPCOPG8H+/z4n2/5uep\nHyeoF53FYz/Kjzbyfx//FI/Xx+p7ror+W0GIiEj36prauH/lJppbvXxz8aQu11UAiIjECI/Xx4PP\nFXO0toWr5o7m/CkFXa6vABARiQF+x+F/Xi6htLyW8yYPYemFY7r9GgWAiEgMeGHdbj4uqeCs4Tl8\na/FEXK5T7vo/TgEgIhLl1m0+yEvvl5Gfm873rp5Gcg9vga0AEBGJYiV7j/HYq5bMtCR+sGIGWRkp\nPf5aBYCISJQqr2zgwdVbcLnge1dPY0hexml9vQJARCQK1TS08uvg6Z7fWjwJMzL3tL+HAkBEJMq0\ntHm5f+VmqupauXr+WOZ0c7rnqSgARESiiM/v56G/bqXsSD3zZwzlivNHhfy9FAAiIlHCcRyefGMn\nm3dVMWVMHjdcZnp0uuepKABERKLEKx+WsbaonBH5A/jusqkkJfZuCFcAiIhEgQ+3Hua5d3eTl53K\nP6+YQXpqj6Z075ICQEQkwpWUVfM/L5eQnho41z83K7VPvq8CQEQkgh2oaODB5zcD8L3lUyl0D+iz\n760AEBGJUMfqWvjVyk00t/r49pJJTBqd16ffXwEgIhKBmlo8/OrZTVTXt3LtxeOZMzm0c/27ogAQ\nEYkwHq+P3zxXTPnRRi6ZNZyF5444Iz9HASAiEkH8foc/vrgNu7+G2cbNdV86q1fn+ndFASAiEiEc\nx+GpN3fyia3EjBjIzVdOJiHhzAz+oAAQEYkYr3xYxlufHaDQnckd1/T8vv6hUgCIiESAdZsPHr/Q\n61+unUlGWvIZ/5kKABGRMNtYepRH1wQndbl2Zp9d6NUdBYCISBiVltfy0AtbSEp0ceeKGRQOzuy3\nn60AEBEJk/Kjjdy/chNen8Nty6YyvjCnX3++AkBEJAyqalu475mNNLZ4+ebiicwYP7jfa1AAiIj0\ns7qmNu59ZuPxq3znThsaljoUACIi/ai51cuvn93E4WNNXH7eSC4/b2TYalEAiIj0E4/Xz29XF7P3\ncD0XThvKigXjwlqPAkBEpB/4/Q7//eJWtu2tZub4wdy4qHfTOfYFBYCIyBnmOA6PvrqdT4O3eLht\n2RQSE8I//Ia/AhGRGLdq7S7WbT7EqCFZfP/L08/4LR56KqRJJY0xycCjwGjAB9wMeIFHAAfYAtxu\nrfUbY24Gbgk+f7e19iVjTDrwBJAP1AM3Wmsre/dSREQiz8sf7GXNR/sYkpfBD67tm7l8+0qoWwCL\ngSRr7QXAfwA/A+4D7rLWzgNcwFJjTAHwfWAusBD4uTEmFbgNKA6u+xhwV+9ehohI5HmnqPz4/X3+\n7Sszyc5MCXdJnYQaADuAJGNMApANeIBZwLvB59cAlwDnAhusta3W2lqgFJgOXAi8+rl1RURixodb\nD/PEa5asjGT+7bqzGZSTFu6S/kGo2yINBHb/bAcGA0uA+dZaJ/h8PZBDIBxqO3zdyZa3L+uW250V\nYrmxSf3oTP04Qb3orL/78fG2w/zp5RIy0pL4z1suYNzwgf3683sq1AD4AfCatfaHxpgRwNtAx22b\nLKAGqAs+7mp5+7JuVVbWh1hu7HG7s9SPDtSPE9SLzvq7HyV7j/GrlZtJSnBxxzXTyU5NDOv/R1fh\nF+ouoGpOfII/BiQDRcaYBcFli4B1wMfAPGNMmjEmB5hE4ADxBgLHETquKyIS1UrLa3nguWLA4XvX\nTGPCiMj85N8u1C2AXwEPG2PWEfjk/yPgE+CPxpgUoARYZa31GWMeIDDAJwA/tta2GGN+DzxqjFkP\ntAHX9/aFiIiE074j9fz62U14vH5uWzaVqWMGhbukbrkcx+l+rcjgaLP2BG3md6Z+nKBedNYf/ThU\n1cj/e/IzGpo83LRkMudPLTijP+90uN1Zp7zcWBeCiYj0QkV1E794qoj6Jg9fX2giavDvjgJARCRE\nx+pa+MVTG6lpaOO6L45nwdmF4S7ptCgARERCUNvQyi+eKqKqroXl88dy2bnhu61zqBQAIiKnqa6p\njV88vZEj1c1ccf4orrxgdLhLCokCQETkNDQ0e7j36Y0cPNrIpbNHcPX8seEuKWQKABGRHmpq8XLf\nMxvZX9HAxWcXct2Xxof9nv69oQAQEemB5lYvv1q58fhsXl+7bEJUD/6gABAR6VZLm5dfr9zErvI6\n5kwZwjcWTSQhygd/UACIiHSp1ePjgVWb2XmglnMn5fPtKyaRkBD9gz8oAERETqktOPhv31fDLOPm\npiWTI2Iqx74SO69ERKQPtXl8/Oa5zZSUBSZxv+WqKSQlxtaQGVuvRkSkD3i8Pn7zfDFb9wYG/+8u\nnxpzgz8oAEREOjk++O85xvRxg7htWWwO/qAAEBE5rn3w37I7MPjfvnwayUmxO0zG7isTETkNHQf/\naWMHcfvyqTE9+EPoE8KIiMQMj9fHb54rZsue9k/+U0lOSgx3WWecAkBE4lqbp/M+/1jf7dORAkBE\n4lb7RV4lZdVxN/iDAkBE4lRrm4/7V21i+74aZo4fzG3LYn+f/+cpAEQk7jS3erl/1WZ27K9h1gQ3\ntyyNvYu8ekIBICJxpaklcFfPXeV1zJ6Yz3eunByXgz8oAEQkjjS2eLjvmY3sOVTPnMlD+PaSSTF1\nb5/TpQAQkbhQ39TGvU9vZF9FA3OnFfDNRbFzV89QKQBEJObVNLRy79MbKT/ayIKZw7hhoYmJ+/n3\nlgJARGJaZXUz//XkZxypbuaS2cP56pfOivqZvPqKAkBEYlZFTTP3PbORiupmrjh/FFfPH6vBvwMF\ngIjEpINHG/nl00XUNLSxfP5YrrxgdLhLijgKABGJOWWH67n3mY00NHv49lVTmTs5P9wlRaT4Pf9J\nRGJS6YFa7nmqiMZmDzdeblh20bhwlxSxtAUgIjFj695j/Oa5zXi9DjdfOZk5UwrCXVJEUwCISEz4\n1Fbyh79tAeD25VM5e4I7zBVFPgWAiES9DcWH+PMr20lOSuCOa6YxeXReuEuKCiEHgDHmh8BVQArw\nO+Bd4BHAAbYAt1tr/caYm4FbAC9wt7X2JWNMOvAEkA/UAzdaayt780JEJD69+cl+/vLmTjLTkvjn\nFTMYV5gT7pKiRkgHgY0xC4ALgLnARcAI4D7gLmvtPMAFLDXGFADfD663EPi5MSYVuA0oDq77GHBX\nL1+HiMQZx3F4Yd1u/vLmTnIyU/j368/R4H+aQj0LaCFQDKwGXgReAmYR2AoAWANcApwLbLDWtlpr\na4FSYDpwIfDq59YVEekRv+Pwlzd28rcNe3EPTOOHN5zD8PwB4S4r6oS6C2gwMApYAowB/gYkWGud\n4PP1QA6QDdR2+LqTLW9f1i23OyvEcmOT+tGZ+nFCLPfC4/Vz/9NFvFt0gNFDs/npd84nLzuty6+J\n5X70RqgBUAVst9a2AdYY00JgN1C7LKAGqAs+7mp5+7JuVVbWh1hu7HG7s9SPDtSPE2K5F61tPn67\nOjB5+/jCHO5cMR1fq4fKSs8pvyaW+9ETXYVfqLuA1gOXG2NcxphhQCbwVvDYAMAiYB3wMTDPGJNm\njMkBJhE4QLwBWPy5dUVETqmh2cMvni5iS3Dy9n+9biaZacnhLiuqhbQFEDyTZz6BAT4BuB3YA/zR\nGJMClACrrLU+Y8wDBAb4BODH1toWY8zvgUeNMeuBNuD6PngtIhKjjtW1cO8zGzlU1cT5Uwr45uKJ\ncTuLV19yOY7T/VqRwYnnzbjPi/fN2s9TP06ItV6UVzZw37ObqK5vZeG5I1hx8fjTupd/rPXjdLnd\nWadsli4EE5GItWN/DQ+s2kxTq5cVF49j0Xmjwl1STFEAiEhEKtpRyUN/24rf73DTkklcMHVouEuK\nOQoAEYk473x2gCfe2EFKUiLf+/I0po0dFO6SYpICQEQihuM4PP/ebl7+oIysjGT+ecUMxgzNDndZ\nMUsBICIRwevz88ia7by/5TD5uen8y7UzyM/NCHdZMU0BICJh19zq5beri9m2t5oxQ7O5c8V0sjNS\nwl1WzFMAiEhYHatr4dcrN3OgsoGZ4wdzy1VTSE1JDHdZcUEBICJhc6CigV+tDJzjf/E5hXztkgkk\nJPT8HH/pHQWAiITFlj1V/G71FlrafKy4eByXnzsS12lc4CW9pwAQkX733qaDPPaqJSHBxa1Lp3Du\npCHhLikuKQBEpN/4HYfVwdM8B6Qnc8c10zhr+MBwlxW3FAAi0i/aPD7+9HIJn2yvID83nR+smMGQ\nPJ3mGU4KABE542ob2/jNc5vZfbCOCcNzuP3qaWTpNM+wUwCIyBl1oLKB+1dupqquhfOnFPCNRRNJ\nTtKtnCOBAkBEzpjNu47y0F+30tLmY9m8MVx5wWid6RNBFAAi0uccx+HNTw7w9Ns7SUpM0Jk+EUoB\nICJ9yuvz85c3drB240FyMlO445rpjB2mG7pFIgWAiPSZhmYPv1tdzPZ9NYzIH8CdX55OXnZauMuS\nU1AAiEifKD/ayAOrNlFZ08I5E9zctGQSaSkaYiKZ/ndEpNc2lR7lD38LHOxdcsFols0bc1rz9kp4\nKABEJGSO4/DKh2U8/+5ukpIS+M5Vk5kzuSDcZUkPKQBEJCRtHh9/XrOdj7YdITcrlTuumcboAh3s\njSYKABE5bVW1LTz4fDFlR+oZX5jD7cunkjMgNdxlyWlSAIjIabH7qvndC1uob/Iwb/pQbrjM6Mre\nKKUAEJEecRyHtz8r5+m3dgLw9csmsODsQl3ZG8UUACLSrTaPj8des7y/5TDZGcl8d/k0JozQbZyj\nnQJARLp0tLaZ3z6/hbIj9YwZmsXty6fp4q4YoQAQkVPatvcYD/11Kw3N7fv7J5CcpAnbY4UCQET+\ngd9xWPNhGc+/t5sEl4uvLzQsmDlM+/tjjAJARDppavHyPy9vo2jnUXKzUvnusqmMK8wJd1lyBigA\nROS4/RUN/HZ1MRXVzUwcOZBbl04lO1Mzd8UqBYCIALCh+BCPv2Zp8/pZNGckV88fS2KCzu+PZQoA\nkTjn8fp48o2dvLfpIOmpSdyxdApnn+UOd1nSD3oVAMaYfOBT4FLACzwCOMAW4HZrrd8YczNwS/D5\nu621Lxlj0oEngHygHrjRWlvZm1pE5PQdqW7i96u3sK+igZH5A/ju8qnk52aEuyzpJyFv3xljkoE/\nAM3BRfcBd1lr5wEuYKkxpgD4PjAXWAj83BiTCtwGFAfXfQy4K/SXICKh+GR7BT/989/ZV9HARTOH\n8aOvz9LgH2d6swXwS+Ah4IfBf88C3g0+XgNcBviADdbaVqDVGFMKTAcuBO7psO5PevID3e6sXpQb\ne9SPztSPE7rqhcfr4+EXt/LS+j2kpiTyL9efw8WzRvRjdf1P742TCykAjDHfACqtta8ZY9oDwGWt\ndYKP64EcIBuo7fClJ1vevqxblZX1oZQbk9zuLPWjA/XjhK56caS6iYde2ErZkXqGDc7ktmVTKRyc\nGdO9i/f3RlfhF+oWwLcAxxhzCTCTwG6c/A7PZwE1QF3wcVfL25eJyBn0cckRHlmznZY2HxdOH8rX\nLp1AarKu6o1nIQWAtXZ++2NjzFrgVuAXxpgF1tq1wCLgHeBj4GfGmDQgFZhE4ADxBmBx8PlFwLrQ\nX4KIdKXV4+OpN3fw3qZDpCYncvOSyZw/VbN2Sd+eBvqvwB+NMSlACbDKWuszxjxAYIBPAH5srW0x\nxvweeNQYsx5oA67vwzpEJOhARQMP/W0rB482MjJ/ALcsncLQQZnhLksihMtxnO7XigxOPO/H+7x4\n36/5eerHCW53FhUVdawtKufpt0vxeP18adZwrr14XFzeyC3e3xtud9Ypb+CkC8FEYkxdYxsPPl9M\n0c6jZKYlcetVUzh7gi7skn+kABCJISVl1Tz8SglVtS1MHDmQm5ZM1r375ZQUACIxwOvz8/x7u3nt\no30kJLi45qKxLDpvFAkJun2znJoCQCTKHTzayH+/uJV9RxrIz03n3//pC+Sm61dbuqd3iUiUap+k\n/dl3Agd6500fylcvOYsRhblxfdBTek4BIBKFqutb+fMrJWzZc4zMtCRuXjKZ2RPzu/9CkQ4UACJR\n5u/bK3js1e00tniZOjaPby2exMABqeEuS6KQAkAkSjS2eHjy9R18uO0IKUkJfO3SCXzxnELN0ysh\nUwCIRIEtu6t4+JUSahraGDssm5uWTKYgT7dult5RAIhEsOZWL8+8Xcp7mw6SmOBi+fyxLJ4zUlM1\nSp9QAIhEqJKyah5+uYSquhaGuzP59hWTGVWg+9pL31EAiESY5lYvq9bu4p2ichJcLpZcMJqr5o4m\nKVGf+qVvKQBEIsjWvcd45JXtVNW1UDg4k29dMYkxQ7PDXZbEKAWASARoavHw7DulvLfp0PFP/Vde\nMJrkJH3qlzNHASASZkU7K3n8NUtNQxvD3QP49hWTtK9f+oUCQCRMahvbeOrNHXxcUkFSoovl88aw\naM4o7euXfqMAEOlnjuOwvvgQz75dSmOLl3HDsvnG4kkUDtZMXdK/FAAi/ehIdROPvWopKasmNSWR\nr106gYvPLtRtmyUsFAAi/cDr87Pmo328uGEvXp+fGeMG8fWFRpO1SFgpAETOsB37a3j01e0cqmoi\nJzOF6y+dwGzj1j18JOwUACJnSH1TGyvf2cX64kO4gIvPLuSai8aRkaZfO4kMeieK9DG/47B+8yFW\nvhM4yDsifwD/tNAwrjAn3KWJdKIAEOlDZYfrefx1y+6DdaSmJHLdl87iS7MKdfM2iUgKAJE+0Nji\n4fn3drP2s3Ic4AsT8/nKF8frIK9ENAWASC/4/Q7rNh/kuXd309DsYeigDL526QQmj84Ld2ki3VIA\niIRoV3ktT7yxg7LD9aSmJLJiwTgu/cIIXckrUUMBIHKaqutbWbW2lA+2HgFgzpQhrFgwntwszcsr\n0UUBINJDbR4fr/99Py9/UEarx8fIIQO4/pIJTBgxMNyliYREASDSDcdx+LikglVrS6mqayU7I5mv\nXnIWF04bqls4SFRTAIh0YdfBWp55q5TS8lqSEl1cft5Ilpw/WhdzSUzQu1jkJCprmnnu3V18XFIB\nwCzjZsWCceTnZoS5MpG+owAQ6aCh2cPLH+zlrU8P4PU5jBmaxbUXj8eMzA13aSJ9LqQAMMYkAw8D\no4FU4G5gG/AI4ABbgNuttX5jzM3ALYAXuNta+5IxJh14AsgH6oEbrbWVvXspIqFr8/h489MDvPxB\nGc2tXgZlp/HlBeP4wqR8EnTTNolRoW4B3ABUWWu/bozJAzYG/9xlrV1rjHkIWGqM+QD4PjAbSAPW\nG2PeAG4Diq21/8cYcx1wF3Bnb1+MyOny+f28X3yYF9bvobq+lcy0JL7yxfF88ZxCkpMSw12eyBkV\nagCsBFYFH7sIfLqfBbwbXLYGuAzwARusta1AqzGmFJgOXAjc02Hdn4RYh0hIHMfhU1vJ6nW7OVTV\nRHJSAovmjOSKOaPISEsOd3ki/SKkALDWNgAYY7IIBMFdwC+ttU5wlXogB8gGajt86cmWty/rltut\nibI7Uj8660k/HMehyFby+KsllO6vISHBxcI5o/jqZYZBOen9UGX/0HujM/Xj5EI+CGyMGQGsBn5n\nrf2LMeaeDk9nATVAXfBxV8vbl3WrsrI+1HJjjtudpX500JN+7Nhfw/Pv7mLHgcBnjy9MzGf5/LEU\n5GXgb/PGTD/13ugs3vvRVfiFehB4CPA68D1r7VvBxUXGmAXW2rXAIuAd4GPgZ8aYNAIHiycROEC8\nAVgcfH4RsC6UOkR6ovRALS+s3822vdUAzBw/mGXzxjByiD4VSnwLdQvgR0Au8BNjTPv++zuBB4wx\nKUAJsMpa6zPGPEBggE8AfmytbTHG/B541BizHmgDru/VqxA5iV3ltfx1/R627DkGwJTRuSybN1YT\ns4gEuRzH6X6tyODE82bc58X7Zu3ndexH6YFa/rphD1uDA/+kUbksvXBM3NyzR++NzuK9H2531inP\nY9aFYBITHMfB7qvmxff3Ht/VM3HkQJZeOEYXcYmcggJAoprjOGzZc4xXn95Iyd74/MQvEioFgEQl\nv9/hE1vBKx+Wse9IAwAzxg1iyQWjtY9fpIcUABJVPF4fG7Yc5tWP9lFR3YzLFTid84bFk8lK0Uxc\nIqdDASBRoaHZwztF5bz1yX7qmjwkJbqYP2MYi84byZC8jLg/0CcSCgWARLSK6ibe+PsB1hUfpM3j\nJz01kUVzRnLJrBGaglGklxQAEnEcx2HngVpe//t+inZU4gC5Waksu3AEF80cRnqq3rYifUG/SRIx\nPF4/H5cc4Y1P9h8/sDuqIIuF545gtsknKVH7+EX6kgJAwq66vpV3isp5b2M5dU0eXK7ADFyXzh7B\nWcNzcOl+/CJnhAJAwsJxHLbvq+GdonI+s5X4HYfMtCQuP3ckXzynkMEDY+fOnCKRSgEg/aqpxcOG\nLYdZW1TOoaomAIa7B3DJ7OGcN3kIqcmahEWkvygA5IxzHIddB+t4t6icv2+voM3rJzHBxZzJQ7j4\nnELGF2o3j0g4KADkjKlvauODrUdYt/kg5ZWNALgHpjF/xjDmTR9GdmZKmCsUiW8KAOlTfr/D1r3H\nWLf5EBt3VuL1OSQmuJg9MZ8FM4cxcVSuJlkXiRAKAOkTh6oaWV98iA+2HKamoQ2AYYMzmT99KHOm\nFpCdoU/7IpFGASAhq2ts46OSI7y/5TBlhwO3YUhPTWLB2YXMnVbA2KHZ2rcvEsEUAHJamlu9FO2s\n5MNtR9i2pxq/45DgcjF93CDOn1LAORMGk5ykM3lEooECQLrV6vFRvKuKj0uOsHlXFW1ePwBjhmYx\nZ3IB504eQo4O6IpEHQWAnFT7oP+JrWBTaRWtHh8ABXkZzJk8hPMmD2FIXkaYqxSR3lAAyHFNLV42\n7zrKZzsq2by7ijZP4JO+e2Aa504azhcm5jMif4D264vECAVAnKuub2Vj6VGKdlRSUlaNz+8AMCQ3\nndkT85lt8hk5RIO+SCxSAMQZv+NQdriezbuq2Fh69PjZOwAjhwzgnAluzjnLTaE7U4O+SIxTAMSB\nhmYP2/Yeo3h3FcW7j1HXGDhPPzHBxZTRucw8y82M8YMYnKMbsInEEwVADPL6/Ow5VMfWPcfYuvcY\nuw/W4QT27JCdkczcaQXMGDeYyaPzyEjTW0AkXum3Pwb4HYcDFQ1s31fD9rJqtu+rpqUtcNZOgsvF\n+MIcpo7JY+rYQYwqyNKtGEQEUABEJb/fYXd5LR9uKmfH/hrs/hoamj3Hnx+Sm875U/OYMjqPiSMH\nkpGWHMZqRSRSKQCiQGubjz2H6thZXsvOAzXsKq+judV7/Pm87FTmjitg4qhcJo7MZVBOWhirFZFo\noQCIMH7H4XBVE3sO1bH7UB27yms5UNGIv30nPoFP+HOnD2NUfiYTRgxkcE6aztgRkdOmAAgjv9/h\nSHUTZYfrKTtST9nhevYerj++/x4gKTGBscOyGTssm7OGD2T88BxyMlNwu7OorKzv4ruLiHRNAdBP\nGpo9lFc2cKCykQOVDeyvaOBAZcPxq20BXEDBoAzGDM0+/mfkkAEkJSaEr3ARiVkKgD7kdxxq6ls5\nfKyJw8eaOHS0iYNVjRysaqQ2eI/8dokJLoYOymRE/gBGF2QxqiCLEfkDSE/Vf4mI9A+NNqepzeOj\nqq6FqtoWKmtbqKxu5kh1E5U1zVRUNx+/U2ZHg7JTmT5uEIWDMxnuHkChO5NhgzP1yV5EwipsAWCM\nSQB+B8wAWoGbrLWl4arH73eob/ZQ19hGXWMbNQ2twT9tHKtr4Vh9K9V1LdQ1eU769anJiRTkZVAw\nKIMhuRkU5GUwdHDg77QU5ayIRJ5wjkzLgDRr7fnGmDnAvcDSnn6x4zj4HQe/38Hrc/B4/Xh9ftq8\nfto8Plrb/7T5aG710dLmpbnVS2OLl6YWL40tHhqbPdQ3e2gI/ulwos0/SE5KIC8rlUL3AAbnpDE4\nJ41BOWnkD8zAnZtOdkayzsQRkagSzgC4EHgVwFr7oTFmdlcrf+XHLwcPmDo4DsfvWtkbLiAzPZkB\n6ckU5GWQnZlCdmYKORkpDMxKZeCAFHIyU8nLTmVAugZ4EYkt4QyAbKC2w799xpgka633ZCuPKsjG\n5/fjcrnAiyNKAAADXklEQVRwAYmJCSQmuEhKTCAx0UVKUiLJyQkkJyaQlppEanIiaSmJpKcmkZGW\nRHpaMhmpSQzISA4O+ilkpieTmBC9g7rbnRXuEiKK+nGCetGZ+nFy4QyAOqDj/0rCqQZ/gHvumNd3\n5707Dq1NrbQ2tfbN9wsDXQfQmfpxgnrRWbz3o6vwC+dpKBuAxQDBYwDFYaxFRCTuhHMLYDVwqTHm\nfQK7478ZxlpEROJO2ALAWusHbg3XzxcRiXe6EklEJE4pAERE4pQCQEQkTikARETilAJARCROuZyu\nboAjIiIxS1sAIiJxSgEgIhKnFAAiInFKASAiEqcUACIicUoBICISpxQAIiJxKuJnK4+0yePDwRiT\nDDwMjAZSgbuBbcAjgANsAW4P3mE1Lhhj8oFPgUsBL/Hdix8CVwEpBH5X3iVO+xH8XXmUwO+KD7iZ\nOH9/dCUatgCOTx4P/G8Ck8fHmxuAKmvtPOBy4EHgPuCu4DIXsDSM9fWr4C/5H4Dm4KJ47sUC4AJg\nLnARMII47geBSaaSrLUXAP8B/Iz47keXoiEAOk0eD3Q5eXyMWgn8JPjYReATzSwCn/QA1gCXhKGu\ncPkl8BBwMPjveO7FQgKz6a0GXgReIr77sQNICu45yAY8xHc/uhQNAXDSyePDVUw4WGsbrLX1xpgs\nYBVwF+Cy1rbfx6MeyAlbgf3IGPMNoNJa+1qHxXHZi6DBBD4UrSAwwdKTBObXjtd+NBDY/bMd+CPw\nAPH9/uhSNATAaU0eH6uMMSOAd4DHrbV/ATruw8wCasJSWP/7FoGpRNcCM4HHgPwOz8dTLwCqgNes\ntW3WWgu00HmAi7d+/IBAPyYQOG74KIFjI+3irR9dioYAiPvJ440xQ4DXgX+31j4cXFwU3P8LsAhY\nF47a+pu1dr619iJr7QJgI/BPwJp47EXQeuByY4zLGDMMyATeiuN+VHNij8ExIJk4/V3piYi/G2iH\ns4CmE5w83lq7PbxV9S9jzP3AVwhs1ra7k8DmbQpQAtxsrfWFobywCW4F3Epga+iPxGkvjDH3ABcT\n+ED3I2APcdoPY8wAAmfMDSXw+u8HPiFO+9GdiA8AERE5M6JhF5CIiJwBCgARkTilABARiVMKABGR\nOKUAEBGJUwoAEZE4pQAQEYlT/x+WlTQ50y9NAQAAAABJRU5ErkJggg==\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "s.plot()\n", - "plt.savefig('test.jpg')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 利用内置的plot()函数展示图片后,可利用plt的savefig()函数将图片保存为文件输出。\n", - "- 可以查看当前目录下的test.jpg文件,与当前显示一致。" - ] - }, - { - "cell_type": "code", - "execution_count": 134, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "s.to_csv('test.csv')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 利用to_csv()函数,可将Series对象输出为.csv文件\n", - "- 可在当前目录下,找到test.csv,双击打开查看" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.0" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} From bcff494ffce6c4af4c015a125508c1d0d453378c Mon Sep 17 00:00:00 2001 From: liupengyuan Date: Sun, 22 Oct 2017 12:13:32 +0800 Subject: [PATCH 39/44] Add files via upload --- chapter4/countrys_freq.xlsx | Bin 0 -> 8861 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 chapter4/countrys_freq.xlsx diff --git a/chapter4/countrys_freq.xlsx b/chapter4/countrys_freq.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..ea96440efb6ea968617c459b0380fda08822fd2b GIT binary patch literal 8861 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 literal 0 HcmV?d00001 From dba561ad2a9cb2f29f63cbb5b90b308335344d07 Mon Sep 17 00:00:00 2001 From: liupengyuan Date: Tue, 24 Oct 2017 22:05:32 +0800 Subject: [PATCH 40/44] Update 4.ipynb --- chapter2/4.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chapter2/4.ipynb b/chapter2/4.ipynb index a809b9a0d..51eccdc38 100644 --- a/chapter2/4.ipynb +++ b/chapter2/4.ipynb @@ -236,7 +236,7 @@ "# 主程序\n", "n=100\n", "print('0:',example_0(n))\n", - "print('1:',example_0(n))\n", + "print('1:',example_1(n))\n", "```\n", "\n", "没有`return`语句或者`return`语句后面没有参数,调用函数后函数的值都是`None`。因此,在程序不需要返回值的时候,可以不用return语句。 \n", From c15bc822bdd065cec125bf8a6cb0e83596208fa4 Mon Sep 17 00:00:00 2001 From: liupengyuan Date: Sun, 29 Oct 2017 16:40:19 +0800 Subject: [PATCH 41/44] Update 5.md --- chapter2/5.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/chapter2/5.md b/chapter2/5.md index 7a09a7437..a423eeb29 100644 --- a/chapter2/5.md +++ b/chapter2/5.md @@ -399,7 +399,7 @@ def guess_game(): number = random.randint(1, n) max_times = math.ceil(math.log2(n)) guess_times = 0 - while guess_times <= max_times: + while guess_times < max_times: guess = int(input('请输入你猜测的整数,回车结束。')) guess_times += 1 print('一共可以猜', max_times, '次') @@ -625,7 +625,7 @@ def guess_game(): max_times = math.ceil(math.log(n, 2)) guess_times = 0 - while guess_times <= max_times: + while guess_times < max_times: guess = int(input('请输入你猜测的整数,回车结束。')) guess_times += 1 print('一共可以猜', max_times, '次') From 5e4111859baedfdc69ed38c32c3cb5741c745f1e Mon Sep 17 00:00:00 2001 From: liupengyuan Date: Mon, 6 Nov 2017 00:19:44 +0800 Subject: [PATCH 42/44] Add files via upload --- ...350\241\250\350\276\276\345\274\217.ipynb" | 1044 +++++++++++++++++ 1 file changed, 1044 insertions(+) create mode 100644 "chapter3/python\346\255\243\345\210\231\350\241\250\350\276\276\345\274\217.ipynb" diff --git "a/chapter3/python\346\255\243\345\210\231\350\241\250\350\276\276\345\274\217.ipynb" "b/chapter3/python\346\255\243\345\210\231\350\241\250\350\276\276\345\274\217.ipynb" new file mode 100644 index 000000000..61098b9bb --- /dev/null +++ "b/chapter3/python\346\255\243\345\210\231\350\241\250\350\276\276\345\274\217.ipynb" @@ -0,0 +1,1044 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# python正则表达式快速基础教程" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "正则表达式,这个术语不太容易望文生义(没有去考证是如何被翻译为正则表达式的),其实其英文为Regular Expression,直接翻译就是:有规律的表达式。这个表达式其实就是一个字符序列,反映某种字符规律,用(字符串模式匹配)来处理字符串。很多高级语言均支持利用正则表达式对字符串进行处理的操作。\n", + "\n", + "python提供的正则表达式文档可参见:https://docs.python.org/3/library/re.html" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true, + "scrolled": true + }, + "outputs": [], + "source": [ + "import re" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 首先引入python正则表达式库re" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**1. 入门**" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true, + "scrolled": true + }, + "outputs": [], + "source": [ + "s = 'Blow low, follow in of which low. lower, lmoww oow aow bow cow 23742937 dow kdiieur998.'\n", + "p = 'low'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 假设要在字符串s中查找单词`low`,由于该单词的规律就是`low`,因此可将`low`作为一个正则表达式,可命名为`p`。" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false, + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "['low', 'low', 'low', 'low', 'low']" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "m = re.findall(p, s)\n", + "m" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- `findall(pattern, string)`是re模块中的函数,会在字符串`string`中将所有匹配正则表达式`pattern`模式的字符串提取出来,并以一个`list`的形式返回。该方法是从左到右进行扫描,所返回的`list`中的每个匹配按照从左到右匹配的顺序进行存放。\n", + "- 正则表达式`low`能够将所有单词`low`匹配出来,但是也会将`lower`,`Blow`等含有`low`字符串中的`low`也匹配出来。" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false, + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "['low', 'low']" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "p = r'\\blow\\b'\n", + "m = re.findall(p, s)\n", + "m" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- `\\b`,即`boundary`,是正则表达式中的一种特殊字符,表示单词的边界。正则表达式`r'\\blow\\b'`就是要单独匹配`low`,该字符串两侧为单词的边界(边界为空格等,但是并不是要匹配之)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false, + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "['low', 'low', 'low', 'low', 'low', 'mow', 'oow']" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "p = r'[lmo]ow'\n", + "m = re.findall(p, s)\n", + "m" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- `[lmo]`,匹配`lmo`字母中的任何一个" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false, + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "['aow', 'bow', 'cow', 'dow']" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "p = r'[a-d]ow'\n", + "m = re.findall(p, s)\n", + "m" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- `[a-d]`,匹配`abcd`字母中的任何一个" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false, + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "['2', '3', '7', '4', '2', '9', '3', '7', '9', '9', '8']" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "p = r'\\d'\n", + "m = re.findall(p, s)\n", + "m" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- `\\d`,即digit,表示数字" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false, + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "['23742937', '998']" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "p = r'\\d+'\n", + "m = re.findall(p, s)\n", + "m" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- `+`,元字符,表示一个或者重复多个对象,对象为`+`前面指定的模式\n", + "- 因此`\\d+`可以匹配长度至少为1的任意正整数。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**2. 基本匹配与实例**" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "字符模式|匹配模式内容|等价于\n", + "----|---|--\n", + "[a-d]|One character of: a, b, c, d|[abcd]\n", + "[^a-d]|One character except: a, b, c, d|[^abcd]\n", + "abc丨def|abc or def|\n", + "\\d|One digit|[0-9]\n", + "\\D|One non-digit|[^0-9]\n", + "\\s|One whitespace|[ \\t\\n\\r\\f\\v]\n", + "\\S|One non-whitespace|[^ \\t\\n\\r\\f\\v]\n", + "\\w|One word character|[a-zA-Z0-9_]\n", + "\\W|One non-word character|[^a-zA-Z0-9_]\n", + ".|Any character (except newline)|[^\\n]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "固定点标记|匹配模式内容\n", + "----|---\n", + "^|Start of the string\n", + "$|End of the string\n", + "\\b|Boundary between word and non-word characters" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "数量词|匹配模式内容\n", + "----|---\n", + "{5}|Match expression exactly 5 times\n", + "{2,5}|Match expression 2 to 5 times\n", + "{2,}|Match expression 2 or more times\n", + "{,5}|Match expression 0 to 5 times\n", + "*|Match expression 0 or more times\n", + "{,}|Match expression 0 or more times\n", + "?|Match expression 0 or 1 times\n", + "{0,1}|Match expression 0 or 1 times\n", + "+|Match expression 1 or more times\n", + "{1,}|Match expression 1 or more times" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "字符转义|转义匹配内容\n", + "----|---\n", + "\\\\.|. character\n", + "\\\\\\|\\ character\n", + "\\\\*|* character\n", + "\\\\+|+ character\n", + "\\\\?|? character\n", + "\\\\{|{ character\n", + "\\\\)|) character\n", + "\\\\[|[ character" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false, + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "['010-66677788', '02166697788', '0451-22882828']" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "m = re.findall(r'\\d{3,4}-?\\d{8}', '010-66677788,02166697788, 0451-22882828')\n", + "m" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 匹配电话号码,区号可以是3或者4位,号码为8位,中间可以有`-`或者没有。" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false, + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "['测', '试', '汉', '字', '测', '试', '可', '以']" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "m = re.findall(r'[\\u4e00-\\u9fa5]', '测试 汉 字,abc,测试xia,可以')\n", + "m" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 匹配汉字" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 几个实例\n", + "\n", + "正则表达式|匹配内容\n", + "----|---\n", + "[A-Za-z0-9]|匹配英文和数字\n", + "[\\u4E00-\\u9FA5A-Za-z0-9_]|中文英文和数字及下划线\n", + "^[a-zA-Z][a-zA-Z0-9_]{4,15}$`|合法账号,长度在5-16个字符之间,只能用字母数字下划线,且第一个位置必须为字母" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**3. 进阶**" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**3.1 python正则表达式几个函数**\n", + "\n", + "函数|功能|用法\n", + "----|---|---\n", + "re.search|Return a match object if pattern found in string|re.search(r'[pat]tern', 'string')\n", + "re.finditer|Return an iterable of match objects (one for each match)|re.finditer(r'[pat]tern', 'string')\n", + "re.findall|Return a list of all matched strings (different when capture groups)|re.findall(r'[pat]tern', 'string')\n", + "re.split|Split string by regex delimeter & return string list|re.split(r'[ -]', 'st-ri ng')\n", + "re.compile|Compile a regular expression pattern for later use|re.compile(r'[pat]tern')" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false, + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "<_sre.SRE_Match object; span=(0, 12), match='010-66677788'>" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "m = re.search(r'\\d{3,4}-?\\d{8}', '010-66677788,02166697788, 0451-22882828')\n", + "m" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false, + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'010-66677788'" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "m.group()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用group()函数,取出match对象中的内容" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": false, + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "010-66677788\n", + "02166697788\n", + "0451-22882828\n" + ] + } + ], + "source": [ + "ms = re.finditer(r'\\d{3,4}-?\\d{8}', '010-66677788,02166697788, 0451-22882828')\n", + "for m in ms:\n", + " print(m.group())" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": false, + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "['010', '66677788', '02166697788', '0451', '22882828']" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "words = re.split(r'[,-]', '010-66677788,02166697788,0451-22882828')\n", + "words" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": false, + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "['010', '66677788', '02166697788', '0451', '22882828']" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "p = re.compile(r'[,-]')\n", + "p.split('010-66677788,02166697788,0451-22882828')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用compile()函数将正则表达式编译,如以后多次运行,可加快程序运行速度" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**3.2 分组与引用**\n", + "\n", + "Group Type|Expression\n", + "----|---\n", + "Capturing|**(** ... **)**\n", + "Non-capturing|**(?:** ... **)**\n", + "Capturing group named Y|**(?P<Y>** ... **)**\n", + "Match the Y'th captured group|\\Y\n", + "Match the named group Y|(?P=Y)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- (...) 将括号中的部分,放在一起,视为一组,即group。以该group来匹配符合条件的字符串。\n", + "- group,可被同一正则表达式的后续,所引用,引用可以利用其位置,或者利用其名称,可称为反向引用。" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": false, + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'ababababab'" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "p = re.compile('(ab)+')\n", + "p.search('ababababab').group()" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": false, + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "('ab',)" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "p.search('ababababab').groups()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 有分组的情况,用groups()函数取出匹配的所有分组" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": false, + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'1-2-3'" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "p=re.compile('(\\d)-(\\d)-(\\d)')\n", + "p.search('1-2-3').group()" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "collapsed": false, + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "('1', '2', '3')" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "p.search('1-2-3').groups()" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "collapsed": false, + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "['眼睛', '深情']" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s = '喜欢/v 你/x 的/u 眼睛/n 和/u 深情/n 。/w'\n", + "p = re.compile(r'(\\S+)/n')\n", + "m = p.findall(s)\n", + "m" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 按出现顺序捕获名词(/n)。" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "collapsed": false, + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'1-2-3'" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "p=re.compile('(?P\\d)-(\\d)-(\\d)')\n", + "p.search('1-2-3').group()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 在分组内,可通过`?P`的形式,给该分组命名,其中name是给该分组的命名" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "collapsed": false, + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'1'" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "p.search('1-2-3').group('first')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 可利用`group('name')`,直接通过组名来获取匹配的该分组" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "collapsed": false, + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[('13', 'Tom'), ('18', 'John')]" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s = 'age:13,name:Tom;age:18,name:John'\n", + "p = re.compile(r'age:(\\d+),name:(\\w+)')\n", + "m = p.findall(s)\n", + "m" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "collapsed": false, + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "['Tom', 'John']" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "p = re.compile(r'age:(?:\\d+),name:(\\w+)')\n", + "m = p.findall(s)\n", + "m" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- `(?:\\d+)`,匹配该模式,但不捕获该分组。因此没有捕获该分组的数字" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "collapsed": false, + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The match is bb,the capture group is ('b',)\n" + ] + } + ], + "source": [ + "s = 'abcdebbcde'\n", + "p = re.compile(r'([ab])\\1')\n", + "m = p.search(s)\n", + "print('The match is {},the capture group is {}'.format(m.group(), m.groups()))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "- 此即为反向引用\n", + "- 当分组`([ab])`内的`a`或`b`匹配成功后,将开始匹配`\\1`,`\\1`将匹配前面分组成功的字符。因此该正则表达式将匹配`aa`或`bb`。\n", + "- 类似地,r'([a-z])\\1{3}',该正则将匹配连续的4个英文小写字母。" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "collapsed": false, + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'12'" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s = '12,56,89,123,56,98, 12'\n", + "p = re.compile(r'\\b(\\d+)\\b.*\\b\\1\\b')\n", + "m = p.search(s)\n", + "m.group(1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 利用反向引用来判断是否含有重复数字,可提取第一个重复的数字。\n", + "- 其中`\\1`是引用前一个分组的匹配。" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "collapsed": false, + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'12'" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s = '12,56,89,123,56,98, 12'\n", + "p = re.compile(r'\\b(?P\\d+)\\b.*\\b(?P=name)\\b')\n", + "m = p.search(s)\n", + "m.group(1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 与前一个类似,但是利用了带分组名称的反向引用。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**3.3 贪婪与懒惰**" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "数量词|匹配模式内容\n", + "----|---\n", + "{2,5}?|Match 2 to 5 times (less preferred)\n", + "{2,}?|Match 2 or more times (less preferred)\n", + "{,5}?|Match 0 to 5 times (less preferred)\n", + "*?|Match 0 or more times (less preferred)\n", + "{,}?|Match 0 or more times (less preferred)\n", + "??|Match 0 or 1 times (less preferred)\n", + "{0,1}?|Match 0 or 1 times (less preferred)\n", + "+?|Match 1 or more times (less preferred)\n", + "{1,}?|Match 1 or more times (less preferred)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 当正则表达式中包含能接受重复的限定符时,通常的行为是(在使整个表达式能得到匹配的前提下)匹配尽可能多的字符。\n", + "- 而懒惰匹配,是匹配尽可能少的字符。方法是在重复的后面加一个`?`。" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "collapsed": false, + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'ababababab'" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "p = re.compile('(ab)+')\n", + "p.search('ababababab').group()" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "collapsed": false, + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'ab'" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "p = re.compile('(ab)+?')\n", + "p.search('ababababab').group()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**进一步学习可参考官方文档以及《精通正则表达式(第3版)》**" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.0" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} From 28fa6d054555733f9d5de4deb834dd82d8c085cd Mon Sep 17 00:00:00 2001 From: liupengyuan Date: Mon, 6 Nov 2017 00:31:43 +0800 Subject: [PATCH 43/44] =?UTF-8?q?Update=20and=20rename=20python=E6=AD=A3?= =?UTF-8?q?=E5=88=99=E8=A1=A8=E8=BE=BE=E5=BC=8F.ipynb=20to=20python?= =?UTF-8?q?=E6=AD=A3=E5=88=99=E8=A1=A8=E8=BE=BE=E5=BC=8F=E5=9F=BA=E7=A1=80?= =?UTF-8?q?=E5=BF=AB=E9=80=9F=E6=95=99=E7=A8=8B.ipynb?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\200\345\277\253\351\200\237\346\225\231\347\250\213.ipynb" | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) rename "chapter3/python\346\255\243\345\210\231\350\241\250\350\276\276\345\274\217.ipynb" => "chapter3/python\346\255\243\345\210\231\350\241\250\350\276\276\345\274\217\345\237\272\347\241\200\345\277\253\351\200\237\346\225\231\347\250\213.ipynb" (99%) diff --git "a/chapter3/python\346\255\243\345\210\231\350\241\250\350\276\276\345\274\217.ipynb" "b/chapter3/python\346\255\243\345\210\231\350\241\250\350\276\276\345\274\217\345\237\272\347\241\200\345\277\253\351\200\237\346\225\231\347\250\213.ipynb" similarity index 99% rename from "chapter3/python\346\255\243\345\210\231\350\241\250\350\276\276\345\274\217.ipynb" rename to "chapter3/python\346\255\243\345\210\231\350\241\250\350\276\276\345\274\217\345\237\272\347\241\200\345\277\253\351\200\237\346\225\231\347\250\213.ipynb" index 61098b9bb..165e7b9c3 100644 --- "a/chapter3/python\346\255\243\345\210\231\350\241\250\350\276\276\345\274\217.ipynb" +++ "b/chapter3/python\346\255\243\345\210\231\350\241\250\350\276\276\345\274\217\345\237\272\347\241\200\345\277\253\351\200\237\346\225\231\347\250\213.ipynb" @@ -4,7 +4,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# python正则表达式快速基础教程" + "# python正则表达式基础快速教程", + "### By liupengyuan@pku.edu.cn" ] }, { From 954c2e7cff96b785d768506acac93efaec7588d4 Mon Sep 17 00:00:00 2001 From: liupengyuan Date: Mon, 6 Nov 2017 00:35:10 +0800 Subject: [PATCH 44/44] =?UTF-8?q?Update=20python=E6=AD=A3=E5=88=99?= =?UTF-8?q?=E8=A1=A8=E8=BE=BE=E5=BC=8F=E5=9F=BA=E7=A1=80=E5=BF=AB=E9=80=9F?= =?UTF-8?q?=E6=95=99=E7=A8=8B.ipynb?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...200\345\277\253\351\200\237\346\225\231\347\250\213.ipynb" | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git "a/chapter3/python\346\255\243\345\210\231\350\241\250\350\276\276\345\274\217\345\237\272\347\241\200\345\277\253\351\200\237\346\225\231\347\250\213.ipynb" "b/chapter3/python\346\255\243\345\210\231\350\241\250\350\276\276\345\274\217\345\237\272\347\241\200\345\277\253\351\200\237\346\225\231\347\250\213.ipynb" index 165e7b9c3..ad37fbf0f 100644 --- "a/chapter3/python\346\255\243\345\210\231\350\241\250\350\276\276\345\274\217\345\237\272\347\241\200\345\277\253\351\200\237\346\225\231\347\250\213.ipynb" +++ "b/chapter3/python\346\255\243\345\210\231\350\241\250\350\276\276\345\274\217\345\237\272\347\241\200\345\277\253\351\200\237\346\225\231\347\250\213.ipynb" @@ -4,8 +4,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# python正则表达式基础快速教程", - "### By liupengyuan@pku.edu.cn" + "# python正则表达式基础快速教程\n", + "### By liupengyuan@pku.edu.cn\n" ] }, {