美文网首页
Python Real World Data Science [

Python Real World Data Science [

作者: 四碗饭儿 | 来源:发表于2017-07-28 16:03 被阅读0次

    此系列更新《Python Real World Data Science》的阅读摘记,每周六更新。

    全书介绍Python在数据科学领域中的应用,分为四模块:

    • Python 基础
    • 数据分析
    • 数据挖掘
    • 机器学习

    本文为系列第七篇,介绍python基础。

    Chapter 7 Python Data Structures

    仅当需要指定数据行为二者时,才考虑使用类和对象

    1 Tuples

    • 存储有序定长的对象序列,无法修改

    • 创建

      • 逗号分隔 stock = "FB", 75.00, 75.03, 74.90
      • 括号stock2 = ("FB", 75.00, 75.03, 74.90)
    • Unpack

      • symbol, current, high, low = stock
      • 打包存储传递,解包使用
    • Slicing

      • stock[1:2]
    • 缺点:元组成员访问使用数字进行索引,容易不知所云,代码可读性差

    2 Named tuples

    • 命名元组,存储有序定长的对象序列,每个成员具有名字
    • 创建
      •   from collections import namedtuple
          # Stock命名元组,包含4个成员,symbol、current、high、low
          Stock = namedtuple("Stock", "symbol current high low") 
          stock = Stock("FB", 75.00, high=75.03, low=74.90)
        
    • 访问stock.high

    3 Dictionaries

    存储对象之间的映射关系(map),快速查找某个值

    创建

    • dict(), {}
               stocks = {"GOOG": (613.30, 625.86, 610.50), "MSFT": (30.25, 30.70, 30.19)}`
    

    Index

    • stocks["GOOG"]
         print(stocks.get("RIM"))
         None
         stocks.get("RIM", "NOT FOUND")
         'NOT FOUND`
    
    • setdefault()如果不存在该键值则创建并设为默认值,存在则返回相应的value
    • keys(), values(), items()
    • 许多类型都可作为key,但是list不行(列表会改变,无法哈希)

    4 defaultdict

    创建字典,每次插入键值对时都需要检测键是否存在,如果不存在则由某个函数构造一个默认值

    5 Counter

    from collections import Counter
    
    responses = [
        "vanilla",
        "chocolate",
        "vanilla",
        "vanilla",
        "caramel",
        "strawberry",
        "vanilla"
    ]
    
    print(
        "The children voted for {} ice cream".format(
            Counter(responses).most_common(1)[0][0]
        )
    )
    

    6 List

    列表是Python使用者的瑞士军刀,它通常用来表示按某种顺序存储一系列相同类型的对象。

    列表的一些常用方法包括

    • 在列表末尾添加元素append
    • 在列表中某个位置插入元素insert
    • 计数某个元素出现的频次count
    • 找到某个元素在列表中的位置index,find
    • 逆转列表reverse
    • 排序sort,对于列表中的对象依据其定义的__lt__方法排序,如下例子
    from functools import total_ordering
    
    @total_ordering
    class WeirdSortee:
        def __init__(self, string, number, sort_num):
            self.string = string
            self.number = number
            self.sort_num = sort_num
    
        def __lt__(self, object):
            if self.sort_num:
                return self.number < object.number
            return self.string < object.string
    
        def __repr__(self):
            return"{}:{}".format(self.string, self.number)
    
        def __eq__(self, object):
            return all((
                self.string == object.string,
                self.number == object.number,
                self.sort_num == object.number
            ))
    

    除了依照上述方案实现__lt__方法,更为常用的方式是指定sort函数的key参数

    >>> from operator import itemgetter
    >>> l = [('h', 4), ('n', 6), ('o', 5), ('p', 1), ('t', 3), ('y', 2)]
    >>> l.sort(key=itemgetter(1))
    >>> l
    [('p', 1), ('y', 2), ('t', 3), ('h', 4), ('o', 5), ('n', 6)]
    

    除了itemgetter,attrgettermethodcaller也是常用的key

    7 Sets

    表示一组unique的元素, 区分集合内外的世界,集合的元素不支持排序,通常可用于去重

    创建

    • set(),{value1, value2}
      运算
    • 检索in
    • 并集union
    • 交集intersection
    • 对称差symmetric_difference在其中任一个集合,但是不同时在两个集合
    • 差集difference
    • 是否子集issubset
    • 是否父集issuperset

    8 Extending built-ins

    继承并改写相应的方法

    >>> dir(list)
    
    ['__add__', '__class__', '__contains__', '__delattr__','__delitem__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort'
    

    9 Queues

    相关文章

      网友评论

          本文标题:Python Real World Data Science [

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