在Graphlab SFrame中保存时,如何找到引发错误的特定行?

时间:2016-01-07 12:16:04

标签: python csv dataframe graphlab sframe

我的SFrame sf.print_rows(10)+--------------+---------------+-------+-------------------------------+ | Dataset | Domain | Score | Sent1 | +--------------+---------------+-------+-------------------------------+ | STS2012-gold | surprise.OnWN | 5.0 | render one language in ano... | | STS2012-gold | surprise.OnWN | 3.25 | nations unified by shared ... | | STS2012-gold | surprise.OnWN | 3.25 | convert into absorbable su... | | STS2012-gold | surprise.OnWN | 4.0 | devote or adapt exclusivel... | | STS2012-gold | surprise.OnWN | 3.25 | elevated wooden porch of a... | | STS2012-gold | surprise.OnWN | 4.0 | either half of an archery bow | | STS2012-gold | surprise.OnWN | 3.333 | a removable device that is... | | STS2012-gold | surprise.OnWN | 4.75 | restrict or confine | | STS2012-gold | surprise.OnWN | 0.5 | orient, be positioned | | STS2012-gold | surprise.OnWN | 4.75 | Bring back to life, return... | +--------------+---------------+-------+-------------------------------+ +-------------------------------+-------------------------------+ | Sent2 | Sent1_tokenized | +-------------------------------+-------------------------------+ | restate (words) from one l... | [render, one, language, in... | | a group of nations having ... | [nations, unified, by, sha... | | soften or disintegrate by ... | [convert, into, absorbable... | | devote oneself to a specia... | [devote, or, adapt, exclus... | | a porch that resembles the... | [elevated, wooden, porch, ... | | either of the two halves o... | [either, half, of, an, arc... | | a supplementary part or ac... | [a, removable, device, tha... | | place limits on (extent or... | [restrict, or, confine] | | be opposite. | [orient,, be, positioned] | | cause to become alive again. | [Bring, back, to, life,, r... | +-------------------------------+-------------------------------+ +-------------------------------+-----------+-----------+----------------------+ | Sent2_tokenized | Sent1_len | Sent2_len | NGRAM-cosChar2ngrams | +-------------------------------+-----------+-----------+----------------------+ | [restate, (words), from, o... | 6 | 8 | 0.82090085 | | [a, group, of, nations, ha... | 8 | 7 | 0.53250804 | | [soften, or, disintegrate,... | 11 | 11 | 0.43274232 | | [devote, oneself, to, a, s... | 10 | 8 | 0.47759567 | | [a, porch, that, resembles... | 6 | 9 | 0.38885689 | | [either, of, the, two, hal... | 6 | 12 | 0.55555556 | | [a, supplementary, part, o... | 10 | 5 | 0.44963552 | | [place, limits, on, (exten... | 3 | 6 | 0.27124449 | | [be, opposite.] | 3 | 2 | 0.43528575 | | [cause, to, become, alive,... | 8 | 5 | 0.37047929 | +-------------------------------+-----------+-----------+----------------------+ +----------------------+----------------------+----------------------+ | NGRAM-cosChar3ngrams | NGRAM-cosChar4ngrams | NGRAM-cosChar5ngrams | +----------------------+----------------------+----------------------+ | 0.74964917 | 0.71490469 | 0.67925959 | | 0.36701702 | 0.28941438 | 0.23635427 | | 0.25899951 | 0.21053227 | 0.17058877 | | 0.26248718 | 0.20518234 | 0.14285714 | | 0.17107978 | 0.12049505 | 0.09320546 | | 0.40754381 | 0.24715577 | 0.11547005 | | 0.21997067 | 0.17554945 | 0.15450786 | | 0.13284223 | 0.09284767 | 0.048795 | | 0.31426968 | 0.17149859 | 0.09449112 | | 0.0632772 | 0.03402069 | 0.0 | +----------------------+----------------------+----------------------+ +---------------------+---------------------+---------------------+---------------------+ [19097 rows x 134 columns] 相似:

sf.save('trainers.csv', format='csv')

但是当我尝试将其保存到带--------------------------------------------------------------------------- RuntimeError Traceback (most recent call last) <ipython-input-23-f82bcb3fa197> in <module>() ----> 1 sts.save('trainers.csv', format='csv') /usr/local/lib/python2.7/dist-packages/graphlab/data_structures/sframe.pyc in save(self, filename, format) 2924 self.export_json(url) 2925 else: -> 2926 raise ValueError("Unsupported format: {}".format(format)) 2927 2928 def export_csv(self, filename, delimiter=',', line_terminator='\n', /usr/local/lib/python2.7/dist-packages/graphlab/cython/context.pyc in __exit__(self, exc_type, exc_value, traceback) 47 if not self.show_cython_trace: 48 # To hide cython trace, we re-raise from here ---> 49 raise exc_type(exc_value) 50 else: 51 # To show the full trace, we do nothing and let exception propagate RuntimeError: Runtime Exception. Traceback (most recent call last): File "<ipython-input-5-e29b4d4eba06>", line 20, in <lambda> ZeroDivisionError: division by zero 的csv时,会抛出错误:

sf.print_rows(10)

我打印n号。一次一行,例如sf.print_rows(100)sf.print_rows(129)--------------------------------------------------------------------------- RuntimeError Traceback (most recent call last) <ipython-input-24-13550768dbcd> in <module>() ----> 1 sts.print_rows(129) /usr/local/lib/python2.7/dist-packages/graphlab/data_structures/sframe.pyc in print_rows(self, num_rows, num_columns, max_column_width, max_row_width, output_file) 2226 max_row_width = max(max_row_width, max_column_width + 1) 2227 -> 2228 printed_sf = self._imagecols_to_stringcols(num_rows) 2229 row_of_tables = printed_sf.__get_pretty_tables__(wrap_text=False, 2230 max_rows_to_display=num_rows, /usr/local/lib/python2.7/dist-packages/graphlab/data_structures/sframe.pyc in _imagecols_to_stringcols(self, num_rows) 2250 if t in image_column_names: 2251 printed_sf[t] = self[t].astype(str) -> 2252 return printed_sf.head(num_rows) 2253 2254 def __str_impl__(self, num_rows=10, footer=True): /usr/local/lib/python2.7/dist-packages/graphlab/data_structures/sframe.pyc in head(self, n) 2454 tail, print_rows 2455 """ -> 2456 return SFrame(_proxy=self.__proxy__.head(n)) 2457 2458 def to_dataframe(self): graphlab/cython/cy_sframe.pyx in graphlab.cython.cy_sframe.UnitySFrameProxy.head() graphlab/cython/cy_sframe.pyx in graphlab.cython.cy_sframe.UnitySFrameProxy.head() RuntimeError: Runtime Exception. Traceback (most recent call last): File "<ipython-input-5-e29b4d4eba06>", line 20, in <lambda> ZeroDivisionError: division by zero ,它会引发错误:

sf.fillna(c, 0)

所以我做了for c in sts.column_names(): sts = sts.fillna(c, 0)

---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
<ipython-input-26-e63cf73308dd> in <module>()
      1 for c in sts.column_names():
----> 2     sts = sts.fillna(c, 0)

/usr/local/lib/python2.7/dist-packages/graphlab/data_structures/sframe.pyc in fillna(self, column, value)
   5652             raise TypeError("Must give column name as a str")
   5653         ret = self[self.column_names()]
-> 5654         ret[column] = ret[column].fillna(value)
   5655         return ret
   5656 

/usr/local/lib/python2.7/dist-packages/graphlab/data_structures/sarray.pyc in fillna(self, value)
   2439 
   2440         with cython_context():
-> 2441             return SArray(_proxy = self.__proxy__.fill_missing_values(value))
   2442 
   2443     def topk_index(self, topk=10, reverse=False):

/usr/local/lib/python2.7/dist-packages/graphlab/cython/context.pyc in __exit__(self, exc_type, exc_value, traceback)
     47             if not self.show_cython_trace:
     48                 # To hide cython trace, we re-raise from here
---> 49                 raise exc_type(exc_value)
     50             else:
     51                 # To show the full trace, we do nothing and let exception propagate

RuntimeError: Runtime Exception. Default value must be convertible to column type

并引发了另一个错误:

fillna()

如何在Graphlab SFrame中保存时找到引发错误的特定行?

我该如何解决这一行?我可以用dropna()替换行中有问题的列吗?因为我需要跟踪有问题的行,所以我无法用dropna()抛弃这些行。

但即使使用sf.dropna() sf.save('trainers.csv', format='csv') ,我最终也会:

---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
<ipython-input-28-f82bcb3fa197> in <module>()
----> 1 sts.save('trainers.csv', format='csv')

/usr/local/lib/python2.7/dist-packages/graphlab/data_structures/sframe.pyc in save(self, filename, format)
   2924                 self.export_json(url)
   2925             else:
-> 2926                 raise ValueError("Unsupported format: {}".format(format))
   2927 
   2928     def export_csv(self, filename, delimiter=',', line_terminator='\n',

/usr/local/lib/python2.7/dist-packages/graphlab/cython/context.pyc in __exit__(self, exc_type, exc_value, traceback)
     47             if not self.show_cython_trace:
     48                 # To hide cython trace, we re-raise from here
---> 49                 raise exc_type(exc_value)
     50             else:
     51                 # To show the full trace, we do nothing and let exception propagate

RuntimeError: Runtime Exception. Traceback (most recent call last):
  File "<ipython-input-5-e29b4d4eba06>", line 20, in <lambda>
ZeroDivisionError: division by zero

如何找到导致错误或ZeroDivisionErrors的行?以及如何纠正它们或用零填充这些列?

for i in sf:
    print i

奇怪的是,当我尝试使用以下内容迭代SFrame时,我无法遍历SFrame:

---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
<ipython-input-29-d2d0035d7bbe> in <module>()
----> 1 for i in sts:
      2     print i

/usr/local/lib/python2.7/dist-packages/graphlab/data_structures/sframe.pyc in generator()
   3712         def generator():
   3713             elems_at_a_time = 262144
-> 3714             self.__proxy__.begin_iterator()
   3715             ret = self.__proxy__.iterator_get_next(elems_at_a_time)
   3716             column_names = self.column_names()

graphlab/cython/cy_sframe.pyx in graphlab.cython.cy_sframe.UnitySFrameProxy.begin_iterator()

graphlab/cython/cy_sframe.pyx in graphlab.cython.cy_sframe.UnitySFrameProxy.begin_iterator()

RuntimeError: Runtime Exception. Traceback (most recent call last):
  File "<ipython-input-5-e29b4d4eba06>", line 10, in <lambda>
TypeError: 'NoneType' object is not iterable

它抛出了这个错误:

sf[num]

它变得陌生,我无法使用num检索特定行,但我可以执行子SFrame,然后检索该特定print sf[25] 行。所以这个:

---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
<ipython-input-62-6bc8898704c0> in <module>()
----> 1 print sts[25]

/usr/local/lib/python2.7/dist-packages/graphlab/data_structures/sframe.pyc in __getitem__(self, key)
   3595             ub = min(sf_len, lb + block_size)
   3596 
-> 3597             val_list = list(SFrame(_proxy = self.__proxy__.copy_range(lb, 1, ub)))
   3598             self._cache["getitem_cache"] = (lb, ub, val_list)
   3599             return val_list[key - lb]

graphlab/cython/cy_sframe.pyx in graphlab.cython.cy_sframe.UnitySFrameProxy.copy_range()

graphlab/cython/cy_sframe.pyx in graphlab.cython.cy_sframe.UnitySFrameProxy.copy_range()

RuntimeError: Runtime Exception. Traceback (most recent call last):
  File "<ipython-input-5-e29b4d4eba06>", line 10, in <lambda>
TypeError: 'NoneType' object is not iterable

打破并抛出:

x =  sf[:30]
print x[25]

但是当我尝试提取一个子集然后打印时,它可以工作。下面的代码使用上面的代码检索先前错误抛出的第25个元素:

sf[25]

为什么前面的NoneType代码会导致sf[0] sf[24]fout = open('superbad.txt', 'w') sflen = len(sf) i = 0 while i < sflen: m = i+100 if i+100 < sflen else sflen x = sf[i:m] for j in x: fout.write(str(j) +'\n\n') 有效,但有什么原因可以解释为什么“T

显然,以这种方式迭代SFrame并将其转发为str sorta:

{{1}}

这很奇怪。 为什么在块中迭代并转储到字符串有效?

1 个答案:

答案 0 :(得分:1)

问题是运行应用程序时存在的除零错误(在保存之上的某处)

RuntimeError: Runtime Exception. Traceback (most recent call last):
File "<ipython-input-5-e29b4d4eba06>", line 20, in <lambda>
ZeroDivisionError: division by zero

这是因为懒惰评估(https://en.wikipedia.org/wiki/Lazy_evaluation)。举个例子,假设我从一个带有单列的SFrame开始

sf = gl.SFrame({'x': range(10000, -1, -1)})
sf['x'].apply(lambda x: 1.0/x)

此时,SFrame的最后一行包含1.0/0值,这是一个错误,但尚未对此进行评估。 save方法触发实现,即实际计算数据中的所有行,然后导致错误发生。您可以使用__materialize__

调用来触发此过程
sf.__materialize__()

会导致发生以下错误。

RuntimeError: Runtime Exception. Traceback (most recent call last):
File "<ipython-input-55-5af90e232e2d>", line 1, in <lambda>
ZeroDivisionError: float division by zero

延迟评估和查询规划作为性能优化非常重要,也是SFrame快速且可扩展的原因之一。遗憾的是,跟踪错误是其中的一个烦恼,但是一旦你意识到它是如何工作的,你就会习惯它。

head()函数不会触发完整的实现,因此您可以根据需要在任意数量的行上执行它,直到找到错误。