《利用Python进行数据分析 第二版》读书笔记 - 第一至三章

  • 准备工作
  • Python语法基础,IPython和Jupyter Notebooks
  • Python的数据结构、函数和文件

第1章 准备工作

1.6 本书导航

Python社区已经广泛采取了一些常用模块的命名惯例:

1
2
3
4
5
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
import statsmodels as sm

数据规整(Munge/Munging/Wrangling)指的是将非结构化和(或)散乱数据处理为结构化或整洁形式的整个过程。

语法糖(Syntactic sugar)这是一种编程语法,它并不会带来新的特性,但却能使代码更易读、更易写。

第2章 Python语法基础,IPython和Jupyter Notebooks

2.2 IPython基础

在变量前后使用问号?,可以显示对象的信息。使用??会显示函数的源码。

%run命令运行Python程序。文件中所有定义的变量(import、函数和全局变量,除非抛出异常),都可以在IPython shell中随后访问。如果一个Python脚本需要命令行参数(在sys.argv中查找),可以在文件路径之后传递,就像在命令行上运行一样。如果想让一个脚本访问IPython已经定义过的变量,可以使用%run -i。可以使用%load,将脚本导入到一个代码格中。

%paste可以直接运行剪贴板中的代码。使用%cpaste,你可以粘贴任意多的代码再运行。

魔术命令是在指令前添加百分号%前缀。

2.3 Python语法基础

isiterable函数判断是否可迭代。

strftime方法可以将datetime格式化为字符串:

1
dt.strftime('%m/%d/%Y %H:%M')

strptime可以将字符串转换成datetime对象:

1
datetime.strptime('20091031', '%Y%m%d')

第3章 Python的数据结构、函数和文件

3.1 数据结构和序列

元组拆分,摘取开头的几个元素:

1
2
values = 1, 2, 3, 4, 5
a, b, *rest = values

rest的名字不重要。

元组的count方法统计某个元素出现的次数。

列表的appendinsertpopremove方法。

通过加法将列表串联的计算量较大,因为要新建一个列表,并且要复制对象。 用extend追加元素,尤其是到一个大列表中,更为可取。

bisect模块支持二分查找,和向已排序的列表插入值。bisect.bisect可以找到插入值后仍保证排序的位置,bisect.insort是向这个位置插入值。

1
2
3
4
5
6
7
8
9
10
11
12
13
In [67]: import bisect
In [68]: c = [1, 2, 2, 2, 3, 4, 7]

In [69]: bisect.bisect(c, 2)
Out[69]: 4

In [70]: bisect.bisect(c, 5)
Out[70]: 6

In [71]: bisect.insort(c, 6)

In [72]: c
Out[72]: [1, 2, 2, 2, 3, 4, 6, 7]

迭代序列时使用enumerate函数,可以返回(i, value)元组序列:

1
for i, value in enumerate(collection):

sorted函数可以从任意序列的元素返回一个新的排好序的列表。

zip可以将多个列表、元组或其它序列成对组合成一个元组列表,可以处理任意多的序列,元素的个数取决于最短的序列。常用于同时迭代多个序列。

1
2
3
4
5
6
7
8
9
In [96]: pitchers = [('Nolan', 'Ryan'), ('Roger', 'Clemens'), ('Schilling', 'Curt')]

In [97]: first_names, last_names = zip(*pitchers)

In [98]: first_names
Out[98]: ('Nolan', 'Roger', 'Schilling')

In [99]: last_names
Out[99]: ('Ryan', 'Clemens', 'Curt')

keysvalues是字典的键和值的迭代器方法。虽然键值对没有顺序,这两个方法可以用相同的顺序输出键和值。

update方法可以将一个字典与另一个融合。update方法是原地改变字典,因此任何传递给update的键的旧的值都会被舍弃。

用序列创建字典:

1
mapping = dict(zip(range(5), reversed(range(5))))

如果存在键,则返回值,否则返回默认值:

1
value = some_dict.get(key, default_value)

get默认会返回None,如果不存在键,pop会抛出一个例外。

setdefault方法:

1
2
3
for word in words:
letter = word[0]
by_letter.setdefault(letter, []).append(word)

defaultdict函数,传递类型或函数以生成每个位置的默认值:

1
2
3
4
from collections import defaultdict
by_letter = defaultdict(list)
for word in words:
by_letter[word[0]].append(word)

键通常是不可变的标量类型(整数、浮点型、 字符串)或元组(元组中的对象必须是不可变的)。这被称为“可哈希性”。可以用hash函数检测一个对象是否是可哈希的。

常用的集合方法:

集合元素通常都是不可变的。

列表推导式:

1
[expr for val in collection if condition]

字典推导式:

1
dict_comp = {key-expr : value-expr for value in collection if co ndition}

集合推导式:

1
set_comp = {expr for value in collection if condition}

嵌套列表推导式:

1
result = [name for names in all_data for name in names if name.count('e') >= 2]

列表推导式的for部分是根据嵌套的顺序,过滤条件还是放在最后。

3.2 函数

虽然可以在函数中对全局变量进行赋值操作,但是那些变量必须用global关键字声明成全局的才行。

通过部分参数应用派生出新函数:

1
2
3
4
5
def add_numbers(x, y):
return x + y

from functools import partial
add_five = partial(add_numbers, 5)

迭代器是一种特殊对象,它可以在诸如for循环之类的上下文中向Python解释器输送对象。大部分能接受列表之类的对象的方法也都可以接受任何可迭代对象。比如minmaxsum等内置方法以及listtuple等类型构造器

生成器是构造新的可迭代对象的一种简单方式。一般的函数执行之后只会返回单个值,而生成器则是以延迟的方式返回一个值序列,即每返回一个值之后暂停,直到下一个值被请求时再继续。要创建一个生成器,只需将函数中的return替换为yield即可。

把列表推导式两端的方括号改成圆括号以构造生成器表达式。

一些itertools函数:

错误和异常:

1
2
3
4
5
6
7
8
9
10
f = open(path, 'w')

try:
write_to_file(f)
except:
print('Failed')
else:
print('Succeeded')
finally:
f.close()

3.3 文件和操作系统

从文件中取出的行都带有完整的行结束符(EOL)。

常用的文件方法:

《利用Python进行数据分析 第二版》读书笔记 - 第一至三章

https://blog.xqmmcqs.com/《利用Python进行数据分析 第二版》读书笔记 - 第一至三章/

作者

xqmmcqs

发布于

2021-01-07

更新于

2021-02-23

许可协议

评论

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×