Je veux utiliser un modèle logit et essayer d'importer la bibliothèque statsmodels. Ma version: Python 3.6.8
La meilleure suggestion que j'ai eue est de rétrograder scipy, mais je ne sais pas comment et vers quelle version dois-je rétrograder. Veuillez aider à résoudre. https://github.com/statsmodels/statsmodels/issues/5747
import statsmodels.formula.api as smf
ImportError Traceback (most recent call last) <ipython-input-52-f897a2d817de> in <module> ----> 1 import statsmodels.formula.api as smf ~/anaconda3/envs/py36/lib/python3.6/site-packages/statsmodels/formula/api.py in <module> 13 from statsmodels.robust.robust_linear_model import RLM 14 rlm = RLM.from_formula ---> 15 from statsmodels.discrete.discrete_model import MNLogit 16 mnlogit = MNLogit.from_formula 17 from statsmodels.discrete.discrete_model import Logit ~/anaconda3/envs/py36/lib/python3.6/site-packages/statsmodels/discrete/discrete_model.py in <module> 43 44 from statsmodels.base.l1_slsqp import fit_l1_slsqp ---> 45 from statsmodels.distributions import genpoisson_p 46 47 try: ~/anaconda3/envs/py36/lib/python3.6/site-packages/statsmodels/distributions/__init__.py in <module> 1 from .empirical_distribution import ECDF, monotone_fn_inverter, StepFunction ----> 2 from .edgeworth import ExpandedNormal 3 from .discrete import genpoisson_p, zipoisson, zigenpoisson, zinegbin ~/anaconda3/envs/py36/lib/python3.6/site-packages/statsmodels/distributions/edgeworth.py in <module> 5 import numpy as np 6 from numpy.polynomial.hermite_e import HermiteE ----> 7 from scipy.misc import factorial 8 from scipy.stats import rv_continuous 9 import scipy.special as special ImportError: cannot import name 'factorial'```
5 Réponses :
À partir de ce problème sur le dépôt github de statsmodels , la solution semble être de rétrograder SciPy vers la version 1.2 (la version actuelle est 1.3, que vous semblez utiliser).
Au moins pour moi, SciPy 1.2 a la fonction factorial
dans le package scipy.misc
.
Tu peux faire
python3.6 -m pip install scipy==1.2 --upgrade
Utilisez l'option --user
avec cela si vous ne disposez pas des droits d'installation standard.
Vous souhaitez peut-être éviter d'utiliser pip, car vous utilisez Conda. Vous devriez également pouvoir épingler la version de scipy dans Conda, mais si vous ne prévoyez pas d'ajouter d'autres packages à votre environnement, utilisez simplement la version pip
.
Bien sûr, la rétrogradation de SciPy peut causer des problèmes ailleurs, mais c'est difficile à prévoir, surtout sans savoir exactement quels autres packages et dépendances vous avez installés; vous devrez juste le découvrir. Croisons les doigts pour ne pas finir dans l'enfer de la dépendance (comme vous êtes déjà sur le pas de la porte).
Pour les plus curieux, scipy.misc.factorial
est obsolète depuis la version 1.0; scipy.special.factorial
doit être utilisé à la place.
L'importation en version 1.2 ne montre cependant aucun avertissement clair, ni son utilisation. Cela pourrait expliquer pourquoi statsmodels
utilise toujours l'ancienne importation. Un correctif est en cours pour la prochaine version de statsmodels
.
Pourriez-vous s'il vous plaît me faire savoir ce qui a pu inciter les gens à rejeter ce message - dois-je modifier la question différemment ou améliorer quoi que ce soit à ce sujet?
J'ai rétrogradé à scipy 1.2.0
partir de 1.3.1
et j'obtiens toujours l'erreur précise mentionnée en haut de la page. J'ai pip 3.7.3
. Cependant, une fois que j'ai désinstallé et réinstallé les statsmodels
, j'étais statsmodels
à partir (par la suggestion ci-dessous.
ImportError: cannot import name 'factorial' from 'scipy.misc'
Êtes-vous sûr d'avoir correctement installé la version 1.2 de scipy? Avez-vous essayé d' import scipy; scipy.__version__
? Il est possible que votre commande pip
n'utilise pas le python que vous exécutez pour Jupyter ou IPython. Voir par exemple la réponse de Clemens, qui utilise explicitement pip3
(puisque SciPy version 1.3 ne prend en charge que Python 3, cela implique que vous exécutez Python 3, mais pip
peut toujours faire référence à Python 2, en fonction de votre système d'exploitation et de votre installation).
Merci @ 9769953.
pip3 uninstall statsmodels
# assurez-vous de supprimer les anciennes versionspip3 install statsmodels==0.10.0rc2 --pre --user
# install release candidate de statsmodels réparé pour moi.
Vous pouvez vérifier vos versions avec la pip3 list
Résumé : copiez et exécutez ce qui suit dans votre terminal:
pip3 uninstall statsmodels -y pip3 install statsmodels==0.10.0rc2 --pre --user
et n'oubliez pas de redémarrer le noyau de votre notebook jupyter :)
ce n'est plus nécessaire car statsmodels est déjà en version 1.14.0, la solution de Giorgos Myrianthous suffit
pip install statsmodels --upgrade did the trick for me
Une solution simple que j'ai trouvée est de modifier le fichier .py
. J'obtenais la même erreur que l'OP en utilisant l'analyse de dominance. from scipy.special import factorial
fichier dominance.py
pour avoir à from scipy.special import factorial
et cela a fonctionné. Je pense que l'édition de la ligne from scipy.misc import factorial
from scipy.special import factorial
dans le code du package statsmodel dans edgeworth.py
ferait le même travail ici.
factorielle est dans le module
math
par défaut@AlecA: Je ne pense pas qu'il essaie d'importer directement des
factorial
. L'erreur est donnée sur (le seul morceau de code fourni ici)import statsmodels.formula.api as smf
.Oui @goodvibration c'est quelque chose à voir avec scipy. J'ai quand même essayé d'importer un module mathématique pour voir si cela fonctionne et non.
github.com/statsmodels/statsmodels/issues/5747
Merci d'avoir indiqué ce lien - j'ai déjà vu ce lien et je l'ai référencé dans ma question. Je ne sais pas si ce lien fournit une résolution - ce n'est pas clair. Pouvez-vous me dire exactement ce qui devrait y remédier?
Cela se produit pour moi car
TPOT
packageTPOT
qui nécessite scipy> = 1.3 et il ne prend pas en charge statsmodel = 0.10.0