美文网首页python-数据分析数据分析解密大数据
Python数据分析的起手式(3)函数、方法和包

Python数据分析的起手式(3)函数、方法和包

作者: 鱼心DrFish | 来源:发表于2017-03-12 18:08 被阅读1359次

    本文内容整理自DataCamp课程之 Intro to Python for Data Science.

    本系列将包括以下内容:

    访问 我的github 可下载本文对应的notebook以及练习答案,便于亲手实践。


    注意:本文代码基于Python3版本。如果要在python2中执行,需要先导入_future_模块。

    #仅在Python2中使用
    #from __future__ import division
    #from __future__ import print_function
    

    1. 函数 Functions

    函数是一段可重复使用的代码,往往是为了解决某个特定的任务。Python中有大量现成的函数可以调用,大大减轻了自己写代码的工作量。可以将函数看成是一个黑盒子,只需喂给它特定的参数,就能生成想要的结果。

    Functions

    来看上一讲中使用的家庭身高数据,我们使用 max() 函数找出最高的身高。

    fam = [1.73, 1.68, 1.71, 1.89]
    tallest = max(fam)
    print(tallest)

    `1.89`
    
    
    使用 `round()` 函数对该身高作近似估计。
    
    
    >```python
    round(tallest, 1)
    

    1.9

    round(tallest)

    ` 2`
    
    
    
    注意,上面采用了不同的参数个数,输出结果也不一样,这是为什么呢?我们可以使用帮助函数 `help()` 来查看round函数的说明。
    
    
    >```python
    help(round)
    

    Help on built-in function round in module builtins: round(...) round(number[, ndigits]) -> number Round a number to a given precision in decimal digits (default 0 digits). This returns an int when called with one argument, otherwise the same type as the number. ndigits may be negative.

    从函数的说明中可以发现,round 函数有两个参数:其一是 number,它是需要做近似的数值,不可缺省;其二是 ndigits,是需要近似的小数点位数,由中括号括起,表示可以省略,默认值是0。这就解释了先前的例子。当然,查看函数还有一个方法,就是在函数名前加问号,比如 ?round

    练习3-1:

    Python中有许多内建函数,通过下面的练习让我们来使用一下。

    # 创建两个变量 var1 和 var2
    var1 = [1, 2, 3, 4]
    var2 = True
    
    # 打印输出变量 var1 的类型
    
    # 打印输出变量 var1 的长度
    
    # 将变量 var2 转化成整形变量 out2
    
    print(type(out2))
    

    提示:type() 判断变量类型;len() 计算列表长度;int() 强制转换成整形。

    下面这个练习是将两组列表合并,并对数据元素进行降序排列。

    # 创建连个列表 first 和 second
    first = [11.25, 18.0, 20.0]
    second = [10.75, 9.50]
    
    # 将first 和 second 合并成新的列表 full
    
    # 对 full 进行降序排列,存入新的变量 full_sorted
    
    # 打印输出列表 full_sorted
    
    

    提示:排序函数是 sorted(), 参数 reverse 控制升序还是降序。

    2. 方法 Methonds

    本系列第二讲的最后提到了对象,Python中的一切都可以看成对象,列表是对象,整形、浮点型、布尔型、字符串也都是对象。每一种对象,都有其对应的属性和方法,用句点(.)标记法来访问它们。方法(Methods)可以看做是属于对象的函数。

    我们先看一看列表的一些方法。

    family = ['me', 1.73, 'sister', 1.68, 'mom', 1.71, 'dad', 1.89]
    family.index("mom")

    `4`
    
    
    
    `.index(obj)` 给出了 obj 所对应的索引。
    
    
    >```python
    family.count(1.73)
    

    1

    .count(obj) 返回对象 obj 在列表中出现的次数。

    family.append("brother")
    family.append("1.79")
    family

    `['me', 1.73, 'sister', 1.68, 'mom', 1.71, 'dad', 1.89, 'brother', '1.79']`
    
    
    
    `.append(obj)` 向列表中添加一个对象 obj。
    
    可以使用 `dir(list)` 来查看列表对象的所有方法和属性。
    
    我们再来看字符串的一些方法。
    
    
    >```python
    sister = 'liz'
    sister.capitalize()
    

    'Liz'

    .capitalize() 把字符串的第一个字符大写。

    sister.replace('z', 'sa')

    ` 'lisa'`
    
    
    
    `.replace(str1, str2)` 把字符串中的 str1 替换成 str2。
    
    #### 练习3-2:
    
    字符串类型内建方法练习:
    
    
    ```python
    # 创建字符串变量 room
    room = "poolhouse"
    
    # 对变量room使用 upper() 方法,存入变量 room_up中
    
    # 打印输出 room 和 room_up,,观察upper()方法的作用效果
    
    # 打印输出room中字符'o'的个数
    
    

    列表类型内建方法练习(1):

    # 创建列表 areas
    areas = [11.25, 18.0, 20.0, 10.75, 9.50]
    
    # 打印输出元素 20.0 的索引值
    
    # 打印输出元素 14.5 在 areas 中出现的次数
    
    

    列表类型内建方法练习(2):

    # 创建列表 areas
    areas = [11.25, 18.0, 20.0, 10.75, 9.50]
    
    # 使用 append 方法在areas中增加 游泳池面积24.5和车库面积 15.45
    
    # 打印输出areas
    
    # 使用 reverse 方法,将 areas 列表原地翻转
    
    # 打印输出 areas
    
    

    3. 包 Packages

    Python中的包(packages)可以看作是一系列相关模块的组合。而模块又是什么呢?它是Python中的一个源码文件(如mod1.py),包含了可执行代码、函数和类。常见的Python包有:用于数值计算的Numpy,用于数据分析的Pandas,用于绘图的Matplotlib,以及用于机器学习的Scikit-learn。

    安装包的方法,可以使用 pip 或 conda, 在命令行中输入 pip install package_nameconda install package_name。(前提是具备了pip工具或者conda环境,如果没有,还得事先选择一种来安装。)

    在Python中导入包,采用 import package_name 的形式。比如:

    import numpy
    numpy.array([1,2,3])

    `array([1, 2, 3])`
    
    
    
    上面使用的 `numpy.array()` 是创建一维数组。如果嫌包名称太长,也可以赋予它简化的形式,方法如下:
    
    
    >```python
    import numpy as np
    np.array([1,2,3])
    

    array([1, 2, 3])

    注意了,此时调用包中的函数时,需要将包名带上,以告知Python该函数的来源。如果忽略了包名,将出现如下错误:

    array([1,2,3])

    `  ---------------------------------------------------------------------------
        NameError                        Traceback (most recent call last)
        <ipython-input-12-27d393022d9f> in <module>()
        ----> 1 array([1,2,3])   
        NameError: name 'array' is not defined`
    
    
    但是如果采用 `from ... import ...` 的形式将该函数直接导入时,则可以忽略包名。如下:
    
    
    >```python
    from numpy import array
    array([1,2,3])
    

    array([1, 2, 3])

    然而这种方法,容易让其他代码阅读者傻傻分不清函数的来源。

    练习3-3:

    计算圆的周长和半径:

    # 定义圆的半径r
    r = 0.43
    
    # 导入数学包 math 
    
    # 计算圆的周长 C (提示,math.pi给出圆周率)
    C = 
    
    # 计算圆的面积 A
    A =
    
    # 输出
    print("Circumference: " + str(C))
    print("Area: " + str(A))
    

    补充:

    关于 我的github 中文件下载的方式:

    • 如果下载单个文件,点击所要下载的文件,在新打开的页面中找到右上方的 raw 按钮,右击另存为即可。另外文件名需要删除后缀 .txt,而保留原始格式后缀,如 .ipynb 。

    • 如果打包下载,回到github库的根目录中,点击右上方绿色的 Clone and download 按钮,选择 Download ZIP 即可。

    本文使用Jupyter notebook 编写,关于它的说明和安装方法,可以参考我之前的两篇文章。

    相关文章

      网友评论

      • Bog5d:drfish,太感谢你这篇文章啦。学到很多基础,今天把这篇文章的代码都跑了一遍学到好多新函数,比如index、count、append等。

        不过也遇到一个困惑,就是这些函数的使用格式。
        比如print函数为什么格式是print(x),而index函数却必须是x.index()。 这其中是因为函数也分种类吗? 还是因为对象不同,而格式不同呢?

        添扰啦,dr.fish
        鱼心DrFish:@_bobo_ print()是函数,而x.index()是属于对象x的特有函数,我们一般称之为方法。
      • Bog5d:好有用好有用

      本文标题:Python数据分析的起手式(3)函数、方法和包

      本文链接:https://www.haomeiwen.com/subject/cwqxnttx.html