Evalml: Tes unit gagal setelah memutakhirkan ke pandas 1.0.0

Dibuat pada 30 Jan 2020  ·  10Komentar  ·  Sumber: alteryx/evalml

Langkah-langkah untuk mereproduksi bug:

  1. Tarik dari tuan. Ini akan mereproduksi s3fs ImportError.
  2. Tingkatkan s3fs secara lokal melalui pip ke 0.3.0 atau lebih tinggi. Sekarang panggil load_fraud() untuk melihat kesalahan numpy/panda kedua.

Isu:
Tes unit CircleCI sekarang gagal karena pandas 1.0.0 diinstal, dan pandas 1.0.0 sekarang membutuhkan s3fs 0.3.0.

evalml/demos/fraud.py:17: in load_fraud
    n_rows=n_rows
evalml/preprocessing/utils.py:31: in load_data
    feature_matrix = pd.read_csv(path, index_col=index, nrows=n_rows, **kwargs)
test_python/lib/python3.7/site-packages/pandas/io/parsers.py:676: in parser_f
    return _read(filepath_or_buffer, kwds)
test_python/lib/python3.7/site-packages/pandas/io/parsers.py:431: in _read
    filepath_or_buffer, encoding, compression
test_python/lib/python3.7/site-packages/pandas/io/common.py:182: in get_filepath_or_buffer
    from pandas.io import s3
test_python/lib/python3.7/site-packages/pandas/io/s3.py:9: in <module>
    "s3fs", extra="The s3fs package is required to handle s3 files."
E                   ImportError: Pandas requires version '0.3.0' or newer of 's3fs' (version '0.2.2' currently installed).

Namun, memutakhirkan s3fs ke 0.3.0 menyebabkan masalah berikut ini dengan X.corwith(y) saat membuat dokumen sebagai gantinya:

~/evalml/test_python/lib/python3.7/site-packages/numpy/lib/function_base.py in corrcoef(x, y, rowvar, bias, ddof)
   2524         warnings.warn('bias and ddof have no effect and are deprecated',
   2525                       DeprecationWarning, stacklevel=3)
-> 2526     c = cov(x, y, rowvar)
   2527     try:
   2528         d = diag(c)

<__array_function__ internals> in cov(*args, **kwargs)

~/evalml/test_python/lib/python3.7/site-packages/numpy/lib/function_base.py in cov(m, y, rowvar, bias, ddof, fweights, aweights)
   2429             w *= aweights
   2430 
-> 2431     avg, w_sum = average(X, axis=1, weights=w, returned=True)
   2432     w_sum = w_sum[0]
   2433 

<__array_function__ internals> in average(*args, **kwargs)

~/evalml/test_python/lib/python3.7/site-packages/numpy/lib/function_base.py in average(a, axis, weights, returned)
    426 
    427     if returned:
--> 428         if scl.shape != avg.shape:
    429             scl = np.broadcast_to(scl, avg.shape).copy()
    430         return avg, scl

AttributeError: 'float' object has no attribute 'shape'
bug

Semua 10 komentar

Hanya menggali-gali tetapi sepertinya kesalahannya hilang jika y adalah DataFrame sebagai gantinya ... mungkin panda tidak menangani data Seri dengan benar?

pandas memanggil fungsi numpys corrcoef() sehingga sesuatu yang internal pada panda pasti telah berubah dengan rilis baru.

Saya memeriksa halaman masalah mereka tetapi belum ada yang muncul.

Saya baru saja memutar ulang master ke sebelum 1.0.0 (#325). Sekarang kita dapat men-debug masalah ini dengan kecepatan kita sendiri

Setelah men-debug sedikit, ini seharusnya menjadi masalah: https://github.com/pandas-dev/pandas/issues/31466 .

Ini karena jika y adalah objek pd.Series , panda akan merutekan ulang pd.corrwith(other) ke pd.apply(lambda x: other.corr(x)) .

Menambahkan ini ke pandas.core.nanops.py.get_corr_func._pearson memperbaiki masalah:

def _pearson(a, b):
        b = b.astype(np.float32)
        return np.corrcoef(a, b)[0, 1]

Ooh, pekerjaan detektif yang hebat @jeremyliweishih !

Jadi, opsi kami:

  1. Tidak melakukan apapun. Pertahankan versi panda kami dibatasi di bawah 1.0.0 dan tunggu panda untuk memperbaikinya ( @jeremyliweishih mungkin Anda dapat menulis kepada mereka dengan temuan Anda?)
  2. Temukan cara untuk menerapkan tambalan yang Anda temukan di pemasangan kami

@ angela97lin yang Anda sebutkan mengonversi sesuatu ke kerangka data sepertinya memperbaiki banyak hal; apakah itu sesuatu yang harus kita tambahkan ke daftar opsi ini?

Opsi 1 sepertinya pemenang bagi saya. Pikiran?

Jika kita melihat mendukung versi terbaru dari pandas sebagai kemenangan besar, saya yakin patch (baik mengonversi ke kerangka data atau mengulang dan menghitung corr) akan bagus! Kami selalu dapat melingkari kembali dan menghapus tambalan saat mereka memperbaikinya. Jika tidak maka saya setuju kita hanya bisa menunggu.

Saya pikir itu harus menjadi tujuan untuk tetap mengikuti panda. siapa tahu ada kesalahan lain yang tidak kami tangkap di unit test kami.

jika ada perbaikan mudah yang datang dengan biaya kinerja, lakukan saja dan tinggalkan catatan yang mengatakan itu dapat dioptimalkan nanti.

Keren, kedengarannya bagus. Kayaknya @jeremyliweishih udah punya PR, keren!

Apakah halaman ini membantu?
0 / 5 - 0 peringkat