zoukankan      html  css  js  c++  java
  • 数据分析模块Numpy Pandas

    如何使用Python进行量化投资
    自己编写:NumPy+pandas+Matplotlib+……
    在线平台:聚宽、优矿、米筐、Quantopian、……
    开源框架:RQAlpha、QUANTAXIS、……
     
    IPython:安装:pip install ipython
    TAB键自动完成
    ?命令(内省、命名空间搜索)
    执行系统命令(!)
    %run命令执行文件代码
    %paste %cpaste命令执行剪贴板代码
    与编辑器和IDE交互
    魔术命令:%timeit
                  %pdb …
    使用命令历史 输入与输出变量(_, __, _2, _i2) 前一个的命令结果,前前一个。。
    jupyter Notebook
     
     
     
     
    NumPy是高性能科学计算和数据分析的基础包。它是pandas等其他各种工具的基础。
    NumPy的主要功能:
    ndarray,一个多维数组结构,高效且节省空间
    无需循环对整组数据进行快速运算的数学函数 *
    读写磁盘数据的工具以及用于操作内存映射文件的工具 *
    线性代数、随机数生成和傅里叶变换功能 *用于集成C、C++等代码的工具
     
     
    安装方法:pip install numpy 引用方式:import numpy as np
     
    创建ndarray:np.array()
    为什么要使用ndarray:
        节省内存
        运行速度快
     
    ndarray多维数组,但数据类型必须一致
    常用属性:
             T 数组的转置(对高维数组而言)
    dtype 数组元素的数据类型
    size 数组元素的个数
    ndim 数组的维数
    shape 数组的维度大小(以元组形式)
     
    dtype:
        bool_, int(8,16,32,64), uint(8,16,32,64), float(16,32,64)
    类型转换:astype()
    创建ndarray:
    array() 将列表转换为数组,可选择显式指定dtype
    arange() range的numpy版,支持浮点数
    linspace() 类似arange(),第三个参数为数组长度
    zeros() 根据指定形状和dtype创建全0数组
    ones() 根据指定形状和dtype创建全1数组
    empty() 根据指定形状和dtype创建空数组(随机值)
    eye() 根据指定边长和dtype创建单位矩阵
     
     
    索引和切片:
             数组和标量之间的运算
        a+1  a*3   1//a   a**0.5
    同样大小数组之间的运算
        a+b  a/b  a**b
    数组的索引
       a[5]     a2[2][3]    a2[2,3]
    数组的切片
        a[5:8]    a[:3] = 1     a2[1:2, :4]     a2[:,:1]     a2[:,1]
    与列表不同,数组切片时并不会自动复制,在切片数组上的修改会影响原数组。
       b = a[:4]     b[-1] = 250
    【解决方法:copy()】b = a[:4].copy()     b[-1] = 250
     
    布尔型索引:
    问题:给一个数组,选出数组中所有大于5的数。
    答案:a[a>5]
    原理:
        a>5会对a中的每一个元素进行判断,返回一个布尔数组 布尔型索引:将同样大小的布尔数组传进索引,会返回一个由所有True对应位置的元素的数组
    问题2:给一个数组,选出数组中所有大于5的偶数。
    问题3:给一个数组,选出数组中所有大于5的数和偶数。 答案: a[(a>5) & (a%2==0)] a[(a>5) | (a%2==0)]
     
    花式索引:
             问题1:对于一个数组,选出其第1,3,4,6,7个元素,组成新的二维数组。
    答案:a[[1,3,4,6,7]]
    问题2:对一个二维数组,选出其第一列和第三列,组成新的二维数组。
    答案:a[:,[1,3]]
     
    通用函数:能同时对数组中所有元素进行运算的函数
    常见通用函数:
    一元函数:abs, sqrt, exp, log, ceil, floor, rint/round, trunc, modf, isnan, isinf, cos, sin, tan
    二元函数:add, substract, multiply, divide, power, mod, maximum, mininum,
     
    常用函数: sum 求和 cumsum 求累计和 mean 求平均数 std 求标准差 var 求方差 min 求最小值 max 求最大值 argmin 求最小值索引 argmax 求最大值索引
     
    随机数生成:
    rand 给定形状产生随机数组(0到1之间的数)
    randint 给定形状产生随机整数
    choice 给定形状产生随机选择
    shuffle 与random.shuffle相同
    uniform 给定形状产生随机数组
     
     
     
    pandas是一个强大的Python数据分析的工具包。
    pandas是基于NumPy构建的。
    pandas的主要功能
    具备对其功能的数据结构DataFrame、Series
    集成时间序列功能
    提供丰富的数学运算和操作
    灵活处理缺失数据
    安装方法:pip install pandas 引用方法:import pandas as pd
     
     
    Series是一种类似于一位数组的对象,由一组数据和一组与之相关的数据标签(索引)组成。
    Series比较像列表(数组)和字典的结合体
    创建方式:pd.Series([4,7,-5,3])
                   pd.Series([4,7,-5,3],index=['a','b','c','d'])
                   pd.Series({'a':1, 'b':2})
                   pd.Series(0, index=['a','b','c','d'])
    获取值数组和索引数组:values属性和index属性
     
    Series支持NumPy模块的特性(下标):
    从ndarray创建Series:
    Series(arr) 与标量运算:sr*2
    两个Series运算:sr1+sr2
    索引:sr[0], sr[[1,2,4]]
    切片:sr[0:2]
    通用函数:np.abs(sr)
    布尔值过滤:sr[sr>0] Series
    支持字典的特性(标签):
    从字典创建Series:Series(dic), in
    运算:’a’ in sr
    键索引:sr['a'], sr[['a', 'b', 'd']]
     
    整数索引的pandas对象往往会使新手抓狂。
    例: sr = np.Series(np.arange(4.))
          sr[-1]
    如果索引是整数类型,则根据整数进行数据操作时总是面向标签的。
    loc 以标签解释
    iloc 以下标解释
     
    数据对齐
    pandas在运算时,会按索引进行对齐然后计算。如果存在不同的索引,则结果的索引是两个操作数索引的并集。
    例:   sr1 = pd.Series([12,23,34], index=['c','a','d'])
    sr2 = pd.Series([11,20,10], index=['d','c','a',])
    sr1+sr2
    sr3 = pd.Series([11,20,10,14], index=['d','c','a','b'])
    sr1+sr3
     
    如何在两个Series对象相加时将缺失值设为0?
    sr1.add(sr2, fill_value=0)
    灵活的算术方法:add, sub, div, mul
    数据缺失:
    缺失数据:使用NaN(Not a Number)来表示缺失数据。其值等于np.nan。内置的None值也会被当做NaN处理。
    处理缺失数据的相关方法:
    dropna() 过滤掉值为NaN的行
    fillna() 填充缺失数据
    isnull() 返回布尔数组,缺失值对应为True
    notnull() 返回布尔数组,缺失值对应为False
    过滤缺失数据:sr.dropna() 或 sr[sr.notnull()]
    填充缺失数据:sr.fillna(0)
     
     
    groupby('').sum()
    merge(left,right,on='key')
     
    DataFrame是一个表格型的数据结构,含有一组有序的列。
    DataFrame可以被看做是由Series组成的字典,并且共用一个索引。
    创建方式:
    pd.DataFrame({'one':[1,2,3,4],'two':[4,3,2,1]})
    pd.DataFrame({'one':pd.Series([1,2,3],index=['a','b','c']), 'two':pd.Series([1,2,3,4],index=['b','a','c','d'])}) ……
     
    csv文件读取与写入
    df.read_csv('filename.csv')
    df.to_csv()
    读取文件:从文件名、URL、文件对象中加载数据
    read_csv 默认分隔符为逗号
    read_table 默认分隔符为
    读取文件函数主要参数:
    sep 指定分隔符,可用正则表达式如's+' header=None 指定文件无列名
    names 指定列名
    index_col 指定某列作为索引
    na_values 指定某些字符串表示缺失值
    parse_dates 指定某些列是否被解析为日期,布尔值或列表
    写入到文件:
     
    写入文件函数的主要参数:
    sep
    na_rep 指定缺失值转换的字符串,默认为空字符串
    header=False 不输出列名一行
    index=False 不输出行索引一列
    cols 指定输出的列,
    传入列表 其他文件类型:json, XML, HTML, 数据库
     
     
    查看数据常用属性及方法
    index 获取行索引
    T 转置
    columns 获取列索引
    values 获取值数组
    describe() 获取快速统计
    DataFrame各列name属性:列名
              rename(columns={…})
     
    DataFrame有行索引和列索引。
    不指定按什么查询时默认标签为按列查,下标为按行查
    df['A']
    df[['A', 'B']]
    df['A'][0]
    df[0:10][['A', 'C']]
     
    按标签查询(左边为行,右边为列)
    df.loc[:,['A','B']]
    df.loc[:,'A':'C']
    df.loc[0,'A']
    df.loc[0:10,['A','C']]
    通过下标获取: (左边为行,右边为列)
    df.iloc[3]
    df.iloc[3,3]
    df.iloc[0:3,4:6]
    df.iloc[1:5,:]
    df.iloc[[1,2,4],[0,3]]
     
    通过布尔值过滤:
    df[df['A']>0]
    df[df<0]
     
    df[df['A'].isin([1,3,5])]
     
    数据对齐与数据缺失
     
    DataFrame对象在运算时,同样会进行数据对其,结果的行索引与列索引分别为两个操作数的行索引与列索引的并集。
    DataFrame处理缺失数据的方法:
    dropna(axis=0,where='any',…)
    fillna()
    isnull()
    notnull()
     
    pandas常用方法(适用Series和DataFrame):
    mean(axis=0,skipna=False)
    sum(axis=1)
    sort_index(axis, …, ascending) 按行或列索引排序
    sort_values(by, axis, ascending) 按值排序
    NumPy的通用函数同样适用于pandas
    apply(func, axis=0) 将自定义函数应用在各行或者各列上 ,func可返回标量或者Series
    applymap(func) 将函数应用在DataFrame各个元素上
    map(func) 将函数应用在Series各个元素上
     
     
    时间序列类型:
    时间戳:特定时刻
    固定时期:如2017年7月
    时间间隔:起始时间-结束时间
    Python标准库:  date  time datetime timedelta
    strftime()
    strptime()
    第三方包:dateutil dateutil.parser.parse()
    成组处理日期:
    pd.to_datetime(['2001-01-01', '2002-02-02'])
     
    产生时间对象数组:
     date_range('2017-01-01','2017-01-31',freq='w')
    tart 开始时间
    end 结束时间
    periods 时间长度
    freq 时间频率,默认为'D',可选H(our),W(eek),B(usiness),S(emi-)M(onth),(min)T(es), S(econd), A(year),…
     
    时间序列就是以时间对象为索引的Series或DataFrame。
    datetime对象作为索引时是存储在DatetimeIndex对象中的。
    时间序列特殊功能:
    传入“年”或“年月”作为切片方式
        df['2017'] df['2017-02']
    传入日期范围作为切片方式
        df['2017-03-03':'2017-03-04'] 
     
  • 相关阅读:
    27. Remove Element
    26. Remove Duplicates from Sorted Array
    643. Maximum Average Subarray I
    674. Longest Continuous Increasing Subsequence
    1. Two Sum
    217. Contains Duplicate
    448. Find All Numbers Disappeared in an Array
    566. Reshape the Matrix
    628. Maximum Product of Three Numbers
    UVa 1349 Optimal Bus Route Design (最佳完美匹配)
  • 原文地址:https://www.cnblogs.com/liuguniang/p/7792638.html
Copyright © 2011-2022 走看看