用 Python 做数据分析,主要的技术栈是 Python 基础和三驾马车 NumPy、Pandas 和 Matplotlib。先搞定 Python 基础吧。
Python3 有六个标准数据类型
- 不可变类型:Number(数字)、String(字符串)、Tuple(元组)
- 可变类型:List(列表)、Dictionary(字典)、Set(集合)
相比不可变类型数据处理起来较明确,可变类型的骚操作就多很多。
你可以快速了解 Python 语法,基于这些语法知识,你可能能够尝试出你想得到的数据,但了解一些高阶技巧是很有必要的。
高阶技巧不仅能加快你 code 的速度,还能让代码更优美,从而实现高效编程。
本文针对这 3 个可变类型,提炼出 5 个高频问题,吃透这几个高阶编程技巧。
- 如何在列表、字典、集合中根据条件筛选数据
- 如何统计序列中元素的出现频率
- 如何根据字典中值的大小,对字典中的项进行排序
- 如何快速找到多个字典中的公共键
- 如何让字典保持有序
1.如何在列表、字典、集合中根据条件筛选数据?
- 列表
- filter 函数 filter(lambda x : x>=0, data)
- 列表解析 [x for x in data if x >= 0]
- 字典
- 字典解析 {k : v for k, v in d.iteritems() if v > 90}
- 集合
- 集合解析 {x for x in s if x%3 == 0}
列表
>>> from random import randint
>>> data = [randint(-10, 10) for _ in range(10)]
>>> data
[2, -9, 2, -2, -10, -2, -1, 8, 3, 3]
>>> filter(lambda x: x >= 0, data)
[2, 2, 8, 3, 3]
>>> [x for x in data if x >= 0]
[2, 2, 8, 3, 3]
即使 filter 函数执行更快,耐不住列表解析既优美又连贯。工作中大家很爱用列表解析,推荐指数五颗星。
字典和集合
# 字典
>>> d = {
x: randint(60, 100) for x in range(1, 11)}
>>> d
{
1: 61, 2: 71, 3: 86, 4: 79, 5: 64, 6: 88, 7: 71, 8: 88, 9: 94, 10: 65}
>>> {
k: v for k, v in d.items() if v > 90}
{
9: 94}
# 集合
>>> data
[2, -9, 2, -2, -10, -2, -1, 8, 3, 3]
>>> s = set(data)
>>> s
set([2, 3, 8, -2, -10, -9, -1])
>>> {
x for x in s if x % 3 == 0}
set([3, -9])
可以看到解析的方式代码很连贯,对于任何一个可迭代对象都可以用同样的逻辑去code。
2.如何统计序列中元素的出现频率?
- 随机序列中元素频率统计
- 词频统计:找出出现次数最高的 5 个单词,及出现次数
>>> from random import randint
>>> data = [randint(0