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

本文内容整理自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() 函数对该身高作近似估计。

round(tallest, 1)

1.9

round(tallest)

2

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

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 所对应的索引。

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) 来查看列表对象的所有方法和属性。

我们再来看字符串的一些方法。

sister = 'liz'
sister.capitalize()

'Liz'

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

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

'lisa'

.replace(str1, str2) 把字符串中的 str1 替换成 str2。

练习3-2:

字符串类型内建方法练习:

# 创建字符串变量 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() 是创建一维数组。如果嫌包名称太长,也可以赋予它简化的形式,方法如下:

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 ... 的形式将该函数直接导入时,则可以忽略包名。如下:

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 编写,关于它的说明和安装方法,可以参考我之前的两篇文章。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容