20
votes

ImportError: impossible d'importer le nom 'factoriel'

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'```


6 commentaires

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 package TPOT qui nécessite scipy> = 1.3 et il ne prend pas en charge statsmodel = 0.10.0


5 Réponses :


39
votes

À 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 .


2 commentaires

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.



0
votes
ImportError: cannot import name 'factorial' from 'scipy.misc'

1 commentaires

Ê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).



9
votes

Merci @ 9769953.

  1. pip3 uninstall statsmodels # assurez-vous de supprimer les anciennes versions
  2. pip3 install statsmodels==0.10.0rc2 --pre --user # install release candidate de statsmodels
  3. Redémarrer le noyau du notebook Jupyter

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 :)


1 commentaires

ce n'est plus nécessaire car statsmodels est déjà en version 1.14.0, la solution de Giorgos Myrianthous suffit



3
votes
pip install statsmodels --upgrade 
did the trick for me

0 commentaires

0
votes

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.


0 commentaires