美文网首页
数据分析1 - 数据准备

数据分析1 - 数据准备

作者: WesleyLien | 来源:发表于2017-09-10 18:39 被阅读0次

    数据类型

    • python 的定义、赋值与变量
    • 变量名的命名规则
    • 三种常用的数据类型:逻辑型、数值型、字符型

    逻辑型:&, |, not

    数值型的运算:+, -, *, /, %, // 取整除, **乘方

    浮点数的精算:(使用 decimal 包中的 Decimal)

    from decimal import Decimal
    a = Decimal('4.2')
    b = Decimal('2.1')
    (a + b) == Decimal('6.3')
    

    字符型:
    使用 \ 转义特殊字符,还可作为续行符

    字符串前面加上 r 可使字符串视为原始字符:r'C:\some\name'

    使用 """..."""'''...''' 可跨越多行

    数据结构——特定关系的集合

    数据结构的学习方法:概念、定义、限制、访问、修改

    pandas 包中的数据结构:Series(系列)DataFrame(数据框)

    • Series —— 存储一行或一列数据,没列名,有索引
    from pandas import Series
    
    # 定义,元素类型可混合,索引默认从0开始
    x = Series(
                ['a', True, 1]
            )
    # 定义,可为 Series 指定一个名字
    x = Series(
                ['a', True, 1],
                name='test'
            )
    # 定义,指定索引列
    x = Series(
                ['a', True, 1],
                index = ['first', 'second', 'third']
            )
            
    # 访问,通过索引访问元素
    x[1]
    x['first']
    
    # 追加,不能追加单个元素,而是一个 Series 。append 方法并不直接修改,而是返回一个新的 Series
    n = Series(['2'])
    x = x.append(n)
    
    # 判断 Series 是否包含元素
    # 错误:'2' in x
    # series.values 的类型是 numpy.ndarray ,表示一个 array
    '2' in x.values
    
    # 获取子 Series —— 切片
    # 包左不包右
    x[1:3]
    # 从索引中获取切片
    x[[0, 2, 1]]
    
    # 删除
    # 如果有指定索引,这里不能用默认的索引:0,1,2,3……来删除了
    x.drop('first')
    # 如果追加了两次元素,且没有指定索引,则两次索引均从0开始,即索引重复,此时会找不到对应 index 
    x.drop(x.index[3])
    # 返回元素值不为 '2' 的 Series,即剔除
    x['2' != x.values]
    
    • DataFrame —— 存储多行或多列,有列名(字段名),有索引(从0开始),元素的位置是[3, 2](从1开始,三行二列)。DataFrame 可以被看做成 Series 的字典
    from pandas import DataFrame
    
    # 定义
    df = DataFrame({
                'age': [21,22,23],
                'name':['ken', 'john', 'jay']
            })
    df = DataFrame(
                data={
                    'age': [21,22,23],
                    'name':['ken', 'john', 'jay']
                },
                index=['first', 'second', 'third']
            )
       
    # 访问
    # 访问单列 —— 根据字段名,获取一个 Series
    df['age']
    # 访问多列 —— 根据字段名 list,获取一个 DataFrame
    df[['age', 'name']]
    # 访问行 —— 切片方式,获取一个 DataFrame
    # 错误:df[1]
    df[1:2]
    # 访问单行 —— 索引方式,获取一个 Series
    df.loc['first']
    # 访问多行 —— 索引方式,获取一个 DataFrame
    df.loc[['first', 'second']]
    # 按行列号访问 —— 切片方式,获取一个 DataFrame,第一个切片指行,第二个切片指列
    df.iloc[0:1, 0:2]
    # 访问元素 —— 按行索引和列名
    df.at['first', 'name']
    # 行遍历
    # df.iterrows() 是一个 generator 
    # index 是 df 的索引的值
    # row 是一个 Series,df 的列名变成 row 的索引
    for index, row in df.iterrows():
    
    # 修改列名
    df.columns = ['age2', 'name2']
    # 修改索引
    df.index = range(1, 4)
    # 使原来用于索引的字段重新变成字段,而加入的索引从0,1,2,... 开始
    df.reset_index()
    
    # 删除。axis=0 为行,1为列,默认为 axis=0
    df.drop('first', axis=0)
    df.drop('age', axis=1)
    
    # 增加
    # 增加行(这种方式效率低,不应用于遍历中)
    df.loc[len(df)] = [24, "andy"]
    # 增加列
    df['newColumn'] = [2,4,6,8]
    
    
    

    向量化运算

    一种特殊的并行计算方式,可在同时执行多次操作,通常是对不同数据执行同样的一个或一批指令,或者说把指令应用于一个数组 / 向量中

    生成等差数列:numpy.arange(start, end, step)

    # py 原生只能生成整数,读取只能 for 循环
    r1_10 = range(1,11,2)
    for i in r1_10:
        print(i)
    
    import numpy
    # r 类型是 numpy.ndarray,即一个 array
    r = numpy.arange(0.1, 0.5, 0.01)
    
    • 向量化运算的四则运算

    规则:相同位置的数据进行运算,结果保留在相同位置

    原则:1. 代码中尽量避免显式的 for 循环;2. 过早的优化是魔鬼

    r+r
    r-r
    r*r
    r/r
    
    # 函数式的向量化计算
    # r的5次方
    numpy.power(r,5)
    
    # 比较运算,返回 boolean 值的向量,大小与 r 相同
    r > 0.3
    # 比较运算 结合 过滤 使用,根据传入的 boolean 值的向量,保留值为 True 的对应的值重新组成向量
    r[r>0.3]
    
    # 矩阵运算
    # 矩阵相乘
    # r 和 r 的转置相乘
    numpy.dot(r, r.T)
    # 效果同下
    sum(r*r)
    
    • DataFrame 的向量运算 —— 把 DataFrame 的一行或一列看成向量
    # 定义
    # numpy.random 用于生成随机数
    # numpy.random.randn(5) 表示生成5个具有标准正态分布的值组成 array
    # # numpy.random.randn(2,4) 表示生成结构为 array[array[4个元素], array[4个元素]]
    df = DataFrame({
                'col1':numpy.random.randn(5),
                'col2':numpy.random.randn(5)
            })
    
    # 获取最小值
    # axis=0 按列获取,axis=1 按行获取。默认 axis=0
    # 返回一个 Series,axis=0 时索引为df 的列名,axis=1 索引为 df 的索引
    # min 为计算的函数,表示取最小值
    df.apply(min)
    df.apply(min, axis=0)
    df.apply(min, axis=1)
    
    # 判断每一行,值是否都大于0
    # numpy.all(array) 判断传进来的向量是否值都为 True
    df.apply(
                lambda x: numpy.all(x>0),
                axis=1
            )
    
    # df.apply 用于过滤 dataFrame 的行数据
    df[df.apply(
                lambda x: numpy.all(x>0),
                axis=1
            )]
    

    相关文章

      网友评论

          本文标题:数据分析1 - 数据准备

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