diff --git a/chapter1/2.md b/chapter1/2.md index f54f9aa7c..0d32d7998 100644 --- a/chapter1/2.md +++ b/chapter1/2.md @@ -338,7 +338,7 @@ print('再见!', name) ``` - 练习2:仿照实践1,写出由用户指定整数个数,并由用户输入多个整数,并求和的代码。 - 练习3:用户可以输入的任意多个数字,直到用户不想输入为止。 - - 练习4:用户可以输入的任意多个数字,直到输入所有数字的和比当前输入数字小,且输入所有数字的积比当前输入数字的平方大。 + - 练习4:用户可以输入的任意多个数字,直到: 输入所有数字的和比当前输入数字小,且输入所有数字的积大于500。 [^1]:实际上有多种代码缩进方式,我们推荐并只介绍python创始人采用的这种方式。 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", 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, '次') diff --git a/chapter2/9.md b/chapter2/9.md index b378ef156..a72801614 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='|') @@ -1032,7 +1031,7 @@ for ch, freq in ch_table.items(): 示例程序9-32中: -- `Counter({ch:freq})`是利用一个词典来初始化一个Counter对象。 +- 对词频统计结果中的每个词进行遍历,对组成每个词的字进行遍历,每个词中包含的字的频次为当前的对应词的词频。 9.9 拓展与汇总 @@ -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(): 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关键字,可以在函数内部改变全局变量的值,相对特殊,将在后续章节介绍。

- -
-
-
-
-
- - - - - - 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" new file mode 100644 index 000000000..ad37fbf0f --- /dev/null +++ "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" @@ -0,0 +1,1045 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# python正则表达式基础快速教程\n", + "### By liupengyuan@pku.edu.cn\n" + ] + }, + { + "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 +} diff --git a/chapter3/task10.md b/chapter3/task10.md index d645c27bc..0d08e6e07 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文件格式** @@ -490,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 ``` diff --git a/chapter4/countrys_freq.xlsx b/chapter4/countrys_freq.xlsx new file mode 100644 index 000000000..ea96440ef Binary files /dev/null and b/chapter4/countrys_freq.xlsx differ diff --git a/chapter4/novel_site_list.md b/chapter4/novel_site_list.md new file mode 100644 index 000000000..da2db893d --- /dev/null +++ b/chapter4/novel_site_list.md @@ -0,0 +1,6 @@ +- 百度网盘、微盘等各类资源 +- `http://www.bookdown.com.cn/mingzhu/` +- `http://www.sogoutxt.com/wenxue/` +- `http://www.xbwx.com/a/wxlw/` +- `http://www.jjxsw.cc/category/wenxuejingdian.html` +- 待补充 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": "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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": [ + "可利用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": "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\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": "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": "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 +} 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 +} 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..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" @@ -15,6 +15,7 @@ 输入以下代码,并观察执行结果。 ```python +# coding: utf-8 # 示例代码 D-1 import requests @@ -31,13 +32,15 @@ with open('0.md', 'w') as f: 打开`https://github.com/liupengyuan/python_tutorial/blob/master/chapter1/0.md`网页,在网页正文区域点击右键,选择查看源代码,会发现代码示例D-1确实已经获取/抓取这个网页的文本文件。至此,一个最简爬虫已经完成。 -3. 爬虫进阶 +3. 静态定向爬虫基础 -- 任务:抓取网易首页(www.163.com) 上的全部新闻,并以将所有新闻标题及新闻内容存入到一个文本文件中。 +本小节中的爬虫是开始就指定了要抓取网页的地址(定向),要抓取的内容直接存在在网页源代码中(静态),因此称为静态定向爬虫。 + +- 任务1:抓取网易首页(www.163.com) 上的全部新闻,并以将所有新闻标题及新闻内容存入到一个文本文件中。 首先我们打开网易首页,在页面内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`是新闻标题对应的网页链接,访问该网页链接,就能进入该新闻的内容页面,因此这两项是我们感兴趣并希望抓取的内容。 @@ -46,6 +49,7 @@ with open('0.md', 'w') as f: 输入以下代码,并观察执行结果。 ```python +# coding: utf-8 # 示例代码 D-2 import requests @@ -62,7 +66,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之间的所有内容),并转换为字符串写入文件。 @@ -71,9 +75,10 @@ f.close() 由于我们是找到了`
  • `及`
  • `进行标记的所有对象,而经过观察可以发现,这样的对象非常多,并非只有新闻标题与链接符合这一模式。我们只能更细致地分析网页源代码。 我们重新在网页源文件中查找新闻标题,进行观察,可以发现,新闻标题及链接均在`
      `及`
    `之间(指向一种名称为`cm_ul_round`的样式),且源文件中,其他非新闻标题的内容,均不在这种规定了`class`的`
      `标签之间,OK,找到关键标签了。 -输入以下代码,并观察执行结果。 +输入以下代码,并观察执行结果(查看所保存文件内容)。 ```python +# coding: utf-8 # 示例代码 D-3 import requests @@ -97,6 +102,129 @@ f.close() - `text.get('href')`,利用tag对象的get()方法得到text对象的链接。 - `text.string`,利用tag对象的string属性,得到text对象的文本。 -4. 正则表达式 -5. 用beautifulsoap解析数据 -6. scrapy爬虫框架 +我们得到了首页上每个新闻标题及链接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() +``` + +示例代码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:抓取有道词典查询词的双语例句 + +通过在有道词典(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','')+'\n) + return sents + +if __name__ == '__main__': + word = '葡萄' + sents = get_word_sents(word) + + filename = '1.txt' + with open(filename, 'w', encoding = 'utf-8') as f: + 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进行提取,这时,可以利用正则表达式,一般解析网页最经常的就是用BeautifulSoap和正则表达式联合解析。 + +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也是利用正则来进行字符串处理的一般范式:1. 观察字符串;2. 设计正则表达式;3. 进行匹配提取。 + +5. scrapy爬虫框架 diff --git a/chapter5/Latex Equation Tutorial .ipynb b/chapter5/Latex Equation Tutorial .ipynb new file mode 100644 index 000000000..9114c1054 --- /dev/null +++ b/chapter5/Latex Equation Tutorial .ipynb @@ -0,0 +1,254 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Latex公式编辑简易教程\n", + "## by liupengyuan[at]pku.edu.cn\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 +} 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/),或网上直接搜索。 +``