DolphinDB基础概念理解:Orca与Pandas的差异

  • Orca

    OrcaDolphinDB上实现了Pandas API

    《DolphinDB基础概念理解:Orca》

    《DolphinDB使用案例21:orca入门及底层实现》

    因为先有DolphinDBPandas,后有OrcaDol的底层都已经写好了,导致Orca在实现Pandas时限于底层架构,会与Pandas有些细节差异。

  • 数据类型的差异

    DolphinDB Pandas 备注
    整数字面量 默认解析为32INT类型 默认解析为64位 DolphinDB支持CHARSHORTINTLONG等不同字节数的整数类型
    字符串类型 - STRING 可以进行maxmin等比较运算;
    - SYMBOL 不允许,类似pandascategory的功能
    底层存储是np.object
    经过优化的category类型,使用整数作为底层存储,对于取值范围有限的数据,能减少内存占用。
    pandas允许将任何数据类型的数据转换为category类型,而DolphinDB只允许字符串类型。
    日期和时间类型 DATE
    MINUTE;
    SECOND;
    TIME;
    NANOTIME;
    np.datetime64[ns],以freq表示时间单位
    同一列数据类型 同一列中元素的数据类型必须相同 允许一个Series中的数据有不同数据类型 DolphinDB中字符串类型的NULL值实际上是一个空字符串,而pandas中字符串类型的空值是np.NaN
  • 通用函数的差异

    Orca提供以下通用函数:

    函数 描述
    connect 将会话连接到DolphinDB服务器
    merge 连接两个DataFrame
    concat 按照columns对齐连接两个DataFrame
    date_range 创建时间序列
    to_datetime 将字符串转换成时间类型
    isna 判断是否是空值
    isnull 判断是否是空值
    notna 判断是否不是空值
    notnull 判断是否不是空值
  • Input/Output的差异

    Orca现在支持的Input/output函数有:read_csvread_table

    下表展示Orcaread_csvPandasread_csv函数的差异:

    # engine = 'dolphindb'前提下的参数可能
    read_csv(path, sep=',', delimiter=None, names=None,  index_col=None,engine='dolphindb', usecols=None, squeeze=False, prefix=None, dtype=None, partitioned=True, db_handle=None, table_name=None, partition_columns=None, *args, **kwargs):
    
    Orca Pandas 备注
    engine {’c’,默认在python客户端目录下寻找要导入的文件
    python’, 默认在python客户端目录下寻找要导入的文件
    dolphindb’默认在DolphinDB服务端目录下寻找要导入的文件}
    {’c’,’python’} 当engine参数设置为‘python’或者‘c’时,Orca的read_csv函数相当于调用了pandas的read_csv函数进行导入。下面列出的差异均是在engine参数设置为‘dolphindb’的前提下的差异。
    dtype 还支持以字符串的方式指定DolphinDB的提供的所有数据类型,包括所有时间类型和字符串类型 该参数接收一个字典,键是列名,值是Python原生类型(bool, int, float, str)或npdtypenp.bool, np.int8, np.float32, etc.)
    sep/delimiter 不支持 支持对正则表达式的解析
    partitioned True:允许分区方式将数据导入(实际上是调用DolphinDB的ploadText函数);
    False:强制以非分区的方式导入数据(实际上是调用DolphinDB的loadText函数)
    bool类型,具体见Orca分区表的特殊差异。
    db_handle, table_name以及partition_columns 用于在导入数据的时通过指定DolphinDB的数据库和表等相关信息,将数据导入到DolphinDB的分区表 具体用法与示例请参见Orca分区表的特殊差异。(包括read_table函数)
  • Series、DataFrame的差异

    • Series和DataFrame的创建与修改
      Pandas Orca 备注
      创建 允许在定义一个Series时不设置name参数,或者使用数字作为name 相当于在DolphinDB server端新建一个只含有一列的表,而表的列名则不允许为空值且不能使用数字
      因此,在创建OrcaSeries而不指定名字时,系统会默认为该Series自动生成一个名字,当然,用户不会感知到自动生成的名字,只是会看到Orca抛出的WARNING信息。
      修改 向下取整 四舍五入取整 将一个精度更高的数据类型的值赋值给一个精度更低的Series
      追加数据 允许通过直接访问一个不存在的index去增加新的行 不允许
    • Series和DataFrame的四则运算
      Pandas Orca 备注
      空值的处理 任何数与空值比较,返回都是False,这其实是Python中NaN比较的规则 将空值视为该类型的最小值
      空字符串的处理 字符串会区分NaN值和空字符串 空字符串就是NaN
      零的处理 非零数除以零得到同符号的无穷大;零除以零得到NaN 任何数除以零得到NULL
    • Series和DataFrame的属性与方法
      Pandas Orca 备注
      Attributes and underlying data 唯一没有支持的属性就是memory_usage
      Conversion 由于Orca的优势在于对批量数据读写与计算,因此目前在Conversion方面的功能并不完善,现在仅支持Series.to_numpy这一功能
      Indexing, iteration 见下表

      关于Indexing, iterationorca.DataFrame对象orca.Series对象支持以下函数:

      函数 描述
      head 返回前n个值
      tail 返回最后n个值
      loc 通过index访问
      iloc 通过下标访问
      where 用NaN填充不符合过滤条件的值
      mask 用NaN填充符合过滤条件的值

      orca.DataFrame对象还具备以下函数:

      函数 描述
      items 遍历DataFrame
      iteritems 遍历DataFrame
      lookup 根据标签查询数据
      get 访问某一列
    • loc与iloc(本质上属于indexing方面的事情)
      1. 通过loc访问SeriesDataFrame

        Orca暂不支持通过loc去访问带有DatetimeIndexSeriesDataFrame

        DataFrame的表中有重复的index时,pandas不支持以重复的index值为slice的下界,而Orca则以第一个出现的重复值slice的下界输出结果。

      2. 通过lociloc修改SeriesDataFrame中值的类型

        pandas可以通过lociloc更改DataFrame中一个列(Series)的类型。更改其中一个值的类型会导致整列类型变更,也可以直接通过调用astype函数更改整列的类型。而Orca不允许修改列的类型。

      3. 通过lociloc修改SeriesDataFrame中的值

        Orca不支持:当index有重复的列,通过一个DataFrameindex对齐的原则去修改另一个DataFrame的值

      4. 通过locDataFrame新增一行或者一列

        pandas支持直接通过loc访问不存在的index或者columns来新增行或者列,而Orca暂不支持。

      5. lociloc暂不支持对MultiIndex的访问

    • Binary operator functions

      除了combine和combine_first函数之外,Orca支持pandas提供的所有二元函数。

      1. 二元运算函数的axis参数
      2. 除数是负数
      3. 求余运算
    • Function application, GroupBy & window

      以下函数可用于orca.DataFrame对象和orca.Series对象:

      函数 描述
      apply 应用多个函数
      agg 应用多个聚合函数
      aggregate 应用多个聚合函数
      groupby 分组运算
      rolling 滑动窗口
      ewm 指数加成滑动
    • Computations/descriptive stats的差异

      以下函数可用于orca.DataFrame对象和orca.Series对象:

      函数 描述
      abs 绝对值
      all 判断是否为空
      any 判断是否为空
      clip 返回介于阈值之间的值
      clip_lower 返回大于下界的值
      clip_upper 返回小于上界的值
      corr 相关性
      count 非空元素的个数
      cov 协方差
      cummax 累计最大值
      cummin 累计最小值
      cumprod 累乘
      cumsum 累加
      kurt 倾斜度
      kurtosis 峰度
      mad 平均绝对利差
      max 最大值
      mean 平均值
      median 中位数
      min 最小值
      mode 众数
      pct_change 百分比变化率
      prod 返回乘积
      product 返回乘积
      quantile 分位数
      rank 排名
      round 规整
      sem 无偏标准差
      skew 无偏斜
      std 标准差
      sum 求和
      var 方差
      nunique 返回非重复值的个数

      orca.Series对象还具备以下函数:

      函数 描述
      between 返回介于阈值之间的值
      unique 返回不重复的值
      is_unique 判断是否有重复的值
      is_monotonic 判断是否单调
      is_monotonic_increasing 判断是否单调递增
      is_monotonic_decreasing 判断是否单调递减
    • Reindexing/selection/label manipulation的差异

      以下函数可用于orca.DataFrame对象和orca.Series对象:

      函数 描述
      drop_duplicates 删除重复的值
      duplicated 判断是否重复
      first 返回第一个值
      head 返回前n个值
      idxmax 返回index的最大值
      idxmin 返回index的最小值
      last 返回最后一个值
      rename 重命名
      tail 返回最后n个值

      orca.DataFrame对象还具有以下函数:

      函数 描述
      drop 删除某列
      reindex 重置index
      reset_index 重置index
      set_index 设置index
    • Reshaping, sorting

      Orca目前支持sort_values函数,该函数仅支持ascending参数。在排序中,OrcaNaN值视为最小值处理。

    • Serialization / IO / conversion

      Orca支持pandas所支持的所有序列化相关函数,并提供一个to_pandas函数,该函数将一个Orca对象转化为pandas的对象。

  • Index Objects的差异

    Orca目前支持的Index类型有Index,Int64Index,DatetimeIndex和MultiIndex,下面介绍Index对象所支持的属性和方法。

    • Index的属性

      Orca的Index对象具有以下属性:

      属性 描述
      values 返回取值
      is_monotonic 判断是否单调
      is_monotonic_increasing 判断是否单调递增
      is_monotonic_decreasing 判断是否单调递减
      is_unique 判断是否有重复的值
      hasnans 判断是否有空值
      dtype 返回数据类型
      shape 返回形状
      name 返回名字
      nbytes 返回字节数
      ndim 返回维度
      size 返回大小
      T 返回转置
    • Modifying and computations

      Orca的Index对象支持以下函数:

      函数 描述
      max 最大值
      min 最小值
  • GroupBy的差异

    Orca的groupby函数目前仅支持by参数,且只能对DataFrame进行groupby。

    以下函数可用于orca.DataFrameGroupBy对象:

    函数 描述
    all 判断是否为空
    any 判断是否为空
    bfill 向后填充
    count 非空元素的个数
    cumcount 累计非空元素的个数
    cummax 累计最大值
    cummin 累计最小值
    cumprod 累乘
    cumsum 累加
    ffill 向前填充
    first 返回第一个元素
    last 返回最后一个元素
    mad 平均绝对利差
    max 最大值
    mean 平均值
    median 中位数
    min 最小值
    ohlc 忽略空值求和
    pct_change 百分比变化率
    resample 重采样
    size 元素个数
    sem 无偏标准差
    skew 无偏斜
    std 标准差
    sum 求和
    var 方差
  • Resampling的差异

    Orca支持resample函数,该函数目前支持的参数如下:

    参数 说明
    rule DateOffset,可以是字符串或者是dateoffset对象
    on 时间列,采用该列进行重采样
    level 字符串或整数,对于MultiIndex,采用level指定的列进行重采样

    Orca支持的DateOffset如下:

    Date Offset Frequency String
    BDay or BusinessDay ‘B’
    WeekOfMonth ‘WOM’
    LastWeekOfMonth ‘LWOM’
    MonthEnd ‘M’
    MonthBegin ‘MS’
    BMonthEnd or BusinessMonthEnd ‘BM’
    BMonthBegin or BusinessMonthBegin ‘BMS’
    SemiMonthEnd ‘SM’
    SemiMonthBegin ‘SMS’
    QuarterEnd ‘Q’
    QuarterBegin ‘QS’
    BQuarterEnd ‘BQ’
    BQuarterBegin ‘BQS’
    FY5253Quarter ‘REQ’
    YearEnd ‘A’
    YearBegin ‘AS’ or ‘BYS’
    BYearEnd ‘BA’
    BYearBegin ‘BAS’
    FY5253 ‘RE’
    Day ‘D’
    Hour ‘H’
    Minute ‘T’ or ‘min’
    Second ‘S’
    Milli ‘L’ or ‘ms’
    Micro ‘U’ or ‘us’
    Nano ‘N’
  • Orca分区表的特殊差异

    • Orca的分区表

      pandas作为全内存计算的分析工具,无法解决当数据量过大时带来的内存不足,计算效率低下等问题。DolphinDB是一个分布式时序数据库,并且内置了丰富的计算和分析功能。它可以将TB级的海量数据存储在多台物理机器上,充分利用CPU,对海量数据进行高性能分析计算。

      Orca作为基于DolphinDB开发的分布式pandas接口,其最大的优势就是在语法和pandas保持一致的前提下很好地解决了pandas的瓶颈:大数据场景下的性能问题。而这一问题的解决,则依赖于DolphinDB分区表。在Orca中,我们也引入Orca分区表的概念。

      1. read_csv函数
      2. read_table函数
    • Orca分区表的特殊差异

      在DolphinDB中,分区表与内存表存在着一些差异,在Orca中,分区表的操作也存在这诸多限制。

      1. allanymedian函数
      2. 对非整数类型的index重复选择
      3. 以DataFrame的index为基准对齐设置某一列的值
  • References

  1. Github >> Orca与pandas的差异

你可能感兴趣的:(TSDB,DolphinDB,KDB+)