Langkah-langkah untuk mereproduksi bug:
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'
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:
@ 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!