GraphLab Create API 中文文档 - 数据工程 - graphlab.SArray

graphlab.SArray

<span style="font-size:18px;"> class graphlab.SArray(data=list(), dtype=None, ignore_cast_failure=False)</span>

一个不可变的,元素同类型的数组对象,支持长期存储。

SArray 可以处理远大于机器主内存的数据。它可以完善地支持数据缺失和随机存储。使用SArray格式的数据存储在和GraphLab Server进程同一台机器上。SFrame的每一列都是一个SArray。

参数:

data : list | numpy.ndarray | pandas.Series | string

输入的数据。如果是一个list, numpy.ndarray, 或 pandas.Series, 列表中的数据被转换并存储在一个SArray里面。或者,如果此参数是一个string,它会被解读为一个指向文本文件的路径(或url)。文本文件中的每一行都会被加载为表格中独立的行。如果data变量的值是一个指向保存了SArray的目录,它会直接从此目录中读出SArray。

dtype : {None, int, float, str, list, array.array, dict, datetime.datetime, graphlab.Image}, 可选参数
SArray的数据格式。如果没有被指定(None),我们会从输入数据中推断它。如它是numpy array或Pandas series,dtype参数会被设为array/series。如果它是一个list, dtype参数会被设为内置的list。如果data是一个指向文本文件的路径或者URL,dtype参数会被设定为str。

 ignore_cast_failure : bool, 可选参数
如果设定为True,当元素不能匹配指定的dtype格式的时候,警告,但忽略匹配错误。


注意:
 
如果数据是pandas.Series,索引(index)会被忽略
datetime 以Boost datetime 格式为基础。[更多详细信息]


示例:


SArray可以使用多种方式构造。


从list构造Sarray

<span style="font-size:18px;">>>> from graphlab import SArray
>>> sa = SArray(data=[1,2,3,4,5], dtype=int)</span>

从numpy.ndarray构造SArray
  
<span style="font-size:18px;"> >>> sa = SArray(data=numpy.asarray([1,2,3,4,5]), dtype=int)
   或:
 >>> sa = SArray(numpy.asarray([1,2,3,4,5]), int)</span>

从pandas.Series构造Sarray
 
<span style="font-size:18px;">>>> sa = SArray(data=pd.Series([1,2,3,4,5]), dtype=int)
    or:
>>> sa = SArray(pd.Series([1,2,3,4,5]), int)</span>

如果数据类型没有指定,会尝试自动识别。
<span style="font-size:18px;"> >>> SArray(data=[1,2,3,4,5]).dtype()
 int
 >>> SArray(data=[1,2,3,4,5.0]).dtype()
 float</span>


SArray支持标准数据格式:int,float和str。同时支持三种高级数据格式: float arrays, dict and list(数组内元素格式不固定)。



从元素为string的list中创建SArray 。
   
<span style="font-size:18px;">>>> sa = SArray(data=['a','b'])</span>

从元素为float array的list中创建SArray 。
   
<span style="font-size:18px;">>>> sa = SArray([[1,2,3], [3,4,5]])</span>

从元素为list的list中创建SArray 。
   
<span style="font-size:18px;">>>> sa = SArray(data=[['a', 1, {'work': 3}], [2, 2.0]])</span>

从元素为dict的list中创建SArray 。
   
<span style="font-size:18px;">>>> sa = SArray(data=[{'a':1, 'b': 2}, {'b':2, 'c': 1}])</span>

从元素为datatime对象的list中创建SArray 。
  
<span style="font-size:18px;"> >>> sa = SArray(data=[datetime.datetime(2011, 10, 20, 9, 30, 10)])</span>

从本地文本文件中创建SArray (仅对本地服务器有效)
   
>>> sa = SArray('/tmp/a_to_z.txt.gz')

从URL下载文本文件建立SArray 。
  
 >>> sa = SArray('http://s3-us-west-2.amazonaws.com/testdatasets/a_to_z.txt.gz')


数值运算

   

对于数值型数据,SArray支持大量的向量化运算。例如:

>>> sa = SArray([1,1,1,1,1])
>>> sb = SArray([2,2,2,2,2])
>>> sc = sa + sb
>>> sc
    dtype: int
    Rows: 5
    [3, 3, 3, 3, 3]
>>> sc + 2
    dtype: int
    Rows: 5
    [5, 5, 5, 5, 5]

 支持所有数值运算(+,-,*,/),比较运算(>,>=,<,<=),以及逻辑运算符(&,|)。
例如:  

>>> sa = SArray([1,2,3,4,5])
>>> (sa >= 2) & (sa <= 4)
    dtype: int
    Rows: 5
    [0, 1, 1, 1, 0]
 

数据运算对数组型亦有效。

  
>>> sa = SArray(data=[[1.0,1.0], [2.0,2.0]])
>>> sa + 1
    dtype: list
    Rows: 2
    [array('f', [2.0, 2.0]), array('f', [3.0, 3.0])]
>>> sa + sa
    dtype: list
    Rows: 2
    [array('f', [2.0, 2.0]), array('f', [4.0, 4.0])]
 
加法运算符(+)也可以进行字符串拼接
>>> sa = SArray(data=['a','b'])
>>> sa + "x"
    dtype: str
    Rows: 2
    ['ax', 'bx']

 将存储为string类的list和dictionary进行解释的时候,这个方法十分有效。
>>> sa = SArray(data=['a,b','c,d'])
>>> ("[" + sa + "]").astype(list) # adding brackets make it look like a list
    dtype: list
    Rows: 2
    [['a', 'b'], ['c', 'd']]

支持所有的比较运算和布尔型操作,并返回一个二进制SArray。
>>> sa = SArray([1,2,3,4,5])
>>> sa >= 2
    dtype: int
    Rows: 3
    [0, 1, 1, 1, 1]
>>> (sa >= 2) & (sa <= 4)
    dtype: int
    Rows: 3
    [0, 1, 1, 1, 0]

可以像一个常规的python list一样,使用整数关键词来访问SArray或者进行切片操作。但是在一个较大的数据集上进行此操作可能会较慢,因此应当避免在SArray上使用循环访问。

>>> sa = SArray([1,2,3,4,5])
>>> sa[0]
    1
>>> sa[2]
    3
>>> sa[5]
    IndexError: SFrame index out of range
 
可以使用导航,从数组的末尾来访问元素。
>>> sa[-1] # returns the last element
    5
>>> sa[-2] # returns the second to last element
    4
  
Sarray支持所有Python切片操作。
>>> sa[1000:] # Returns an SArray containing rows 1000 to the end
>>> sa[:1000] # Returns an SArray containing rows 0 to row 999 inclusive
>>> sa[0:1000:2] # Returns an SArray containing rows 0 to row 1000 in steps of 2
>>> sa[-100:] # Returns an SArray containing last 100 rows
>>> sa[-100:len(sa):2] # Returns an SArray containing last 100 rows in steps of 2
 
逻辑滤波器
    
SArray可以这样进行滤波
>>> array[binary_filter]
   
array和binary_filter是同样长度的SArray,返回的结果是一个包含‘array’中对应行的binary_filter为非零的元素的新SArray。

   
此运算允许使用布尔运算来进行逻辑滤波运算。例如:
>>> sa = SArray([1,2,3,4,5])
>>> sa[(sa >= 2) & (sa <= 4)]
    dtype: int
    Rows: 3
    [2, 3, 4]
 
此运算亦可提供更广泛的滤波运算,否则用简单的布尔函数很难表达。例如:
>>> sa = SArray([1,2,3,4,5])
>>> sa[sa.apply(lambda x: math.log(x) <= 1)]
    dtype: int
    Rows: 3
    [1, 2]
   
等价于
>>> sa.filter(lambda x: math.log(x) <= 1)
    dtype: int
    Rows: 3
    [1, 2]

迭代
 
SArray可迭代处理,但是可能不够高效。因为它涉及到一个从服务器到客户端的流式传输;对于大数据处理,这应当被避免。
>>> sa = SArray([1,2,3,4,5])
>>> [i + 1 for i in sa]
    [2, 3, 4, 5, 6]
 
可以用来将SArray转换为list类。
>>> sa = SArray([1,2,3,4,5])
>>> l = list(sa)
>>> l
    [1, 2, 3, 4, 5]




猜你喜欢

转载自blog.csdn.net/u010657489/article/details/51085586