Внезапно Probit не работает на PySAL (1.14.4)

До прошлой недели у меня был фрагмент кода для расчета вероятности того, что что-то произойдет для серии событий, но начиная с этой недели код не работает.

Код следующий:

import numpy as np
import pysal
import os

dbf = pysal.open('file.csv','r')

y = np.array([dbf.by_col('result')]).T

names_to_extract = ['dist', 'angle']
x = np.array([dbf.by_col(name) for name in names_to_extract]).T

id = np.array([dbf.by_col('incidenceId')]).T

model = pysal.spreg.probit.Probit(y, x, w=None, name_y='result', name_x=['dist','angle'], name_w=None, name_ds=None)

fin = np.column_stack((id, model.y, model.predy))

os.chdir("/destinyfolder")

np.savetxt('xg.csv', fin, delimiter=',', fmt='%d, %d, %f')

И я получаю эту ошибку:

/usr/local/lib/python3.7/site-packages/pysal/__init__.py:65: VisibleDeprecationWarning: PySAL's API will be changed on 2018-12-31. The last release made with this API is version 1.14.4. A preview of the next API version is provided in the `pysalnext` package. The API changes and a guide on how to change imports is provided at https://migrating.pysal.org
  ), VisibleDeprecationWarning)
Traceback (most recent call last):
  File "xg.py", line 14, in <module>
    model = pysal.spreg.probit.Probit(y, x, w=None, name_y='result', name_x=['dist','angle'], name_w=None, name_ds=None)
  File "/usr/local/lib/python3.7/site-packages/pysal/spreg/probit.py", line 807, in __init__
    n = USER.check_arrays(y, x)
  File "/usr/local/lib/python3.7/site-packages/pysal/spreg/user_output.py", line 359, in check_arrays
    if not spu.spisfinite(i):
  File "/usr/local/lib/python3.7/site-packages/pysal/spreg/sputils.py", line 267, in spisfinite
    return np.isfinite(a.sum())
  File "/usr/local/lib/python3.7/site-packages/numpy/core/_methods.py", line 36, in _sum
    return umr_sum(a, axis, dtype, out, keepdims, initial)
TypeError: cannot perform reduce with flexible type

Обычно я получал только DeprecationWarning, но код работал. С сегодняшнего дня код не работает. Учтите, что сейчас я использую pysal 1.14.4, numpy 1.16.2 и scipy 1.2.1. Я не обновлял свой код до pysal 2.0, потому что не мог понять, как перенести этот код в новую версию (и именно поэтому я получил DeprecationWarning в первую очередь).

Вот файл: file.csv

Можете ли вы помочь мне сделать эту работу?


person Gonzalo Pardo    schedule 18.03.2019    source источник
comment
Не могли бы вы также опубликовать достаточно файла .csv, чтобы воссоздать проблему?   -  person Inon Peled    schedule 18.03.2019
comment
Привет! Я только что обновил исходный пост со ссылкой на файл.   -  person Gonzalo Pardo    schedule 19.03.2019


Ответы (1)


Записи в вашем x являются строками, преобразуйте их в число с плавающей запятой:

x = np.array(...).T.astype(np.float)

Сначала это не удастся из-за значений «NULL» в файле.csv, вам нужно либо отфильтровать их, либо указать, в какое значение с плавающей запятой они должны быть преобразованы.

Прежде чем задать вопрос, попробуйте сначала выполнить простой поиск в Google, чтобы получить немедленный ответ. Если вы погуглите эту ошибку вместе с "pysal 1.14.4", то сразу найдете такое решение:

TypeError: невозможно выполнить сокращение с гибким типом

person Inon Peled    schedule 19.03.2019
comment
Благодарю вас! Я не видел значений NULL! Вот почему это не сработало (никогда предыдущий процесс не давал мне нулевых значений). Хорошая идея дать им определенное значение, чтобы избежать этого в будущем. Спасибо еще раз! - person Gonzalo Pardo; 19.03.2019