首页 > 解决方案 > 遇到来自 PyMC3 - Python 3.8.5 的奇怪错误消息

问题描述

我最近将我的 IDE 从 Spyder 更改为 PyCharm,因为我觉得通过 Anaconda 使用的 Spyder 有点臃肿。下面的代码在 Spyder 中或多或少地运行良好,但我在 PyCharm 中遇到了问题。代码运行平稳,直到将数据框放入模型(1.1)。观察与文件相关的元数据(?),它应该适合分析。

我看过的所有其他地方都在处理错误的文件导入格式。据我所知,这不是我的情况,因为数据框架在模型之前工作正常。

为了解决这个问题,我做了一些事情:

我在运行模型时不断遇到的错误是:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "C:\Users\Greencom\miniconda3\lib\multiprocessing\spawn.py", line 116, in spawn_main
    exitcode = _main(fd, parent_sentinel)
  File "C:\Users\Greencom\miniconda3\lib\multiprocessing\spawn.py", line 125, in _main
    prepare(preparation_data)
  File "C:\Users\Greencom\miniconda3\lib\multiprocessing\spawn.py", line 236, in prepare
    _fixup_main_from_path(data['init_main_from_path'])
  File "C:\Users\Greencom\miniconda3\lib\multiprocessing\spawn.py", line 287, in _fixup_main_from_path
    main_content = runpy.run_path(main_path,
  File "C:\Users\Greencom\miniconda3\lib\runpy.py", line 264, in run_path
    code, fname = _get_code_from_file(run_name, path_name)
  File "C:\Users\Greencom\miniconda3\lib\runpy.py", line 234, in _get_code_from_file
    with io.open_code(decoded_path) as f:
OSError: [Errno 22] Invalid argument: 'C:\\Users\\Greencom\\OneDrive\\Dokumenter\\Trading\\Quant\\Python Analysis\\<input>'

我看不到文件目录在哪里与实际模型有任何相关性,所以我不理解反论点。

我该如何解决这个问题?

from scipy import stats
import arviz as az
import numpy as np
import matplotlib.pyplot as plt
import pymc3 as pm
import seaborn as sns
import pandas as pd
from theano import shared
from sklearn import preprocessing

print ( 'Running on PyMC3 v{}'.format ( pm.__version__ ) )

# data import #
EU50p1d = pd.read_excel (
    "C:\\Users\\Greencom/OneDrive\\Dokumenter\\Trading\\Quant\\Python Analysis\\CURRENCYCOM_EU501Dp.xlsx" )

# checking for 0-values #
EU50p1d.isnull ().sum () / len ( EU50p1d )

# Determining upper & lower value for model
lower = int ( EU50p1d.min () ) if int ( EU50p1d.min () ) == float ( EU50p1d.min () ) else float ( EU50p1d.min () )
upper = int ( EU50p1d.max () ) if int ( EU50p1d.max () ) == float ( EU50p1d.max () ) else float ( EU50p1d.max () )

# Gaussian Inferences #
az.plot_kde ( EU50p1d.close, rug=True )
plt.yticks ( [0], alpha=0 )


### 1.1 Model ##
with pm.Model() as model_g:
    μ = pm.Uniform('μ' , lower=2375.7 , upper=3858.3)
    σ = pm.HalfNormal('σ' , sd=100)
    y = pm.Normal('y' , mu=μ , sd=σ , observed=EU50p1d.values)
    trace_g = pm.sample(100000 , tune=1000)

标签: pythonpycharmtheanobayesianpymc3

解决方案


我决定试一试您的问题,但您的代码似乎有几个与错误没有太大关系的问题,而如果我按照以下步骤操作,错误不会出现:

  • 创建一个只有 main.py 的新空项目,为其设置一个新的 Python 3.8 虚拟环境
  • 将您的代码复制到main.py中,仅删除所有未使用的导入并重新格式化
  • 使用一些任意数据创建一个新test.xlsx的,更改代码中的文件引用
  • 安装要求:

现在,您可以运行代码,它会愉快地继续读取文件。当然,代码中存在一些问题使其无法正常工作:

  • 转换为EU50p1d.min()整数不起作用
  • Uniform()一个参数不应是字符串,但这就是传递的内容

另外,我不知道您的 .xlsx 中有哪些数据,所以当然可能还有其他问题不会出现。但我怀疑这些会导致你描述的问题。

您的问题似乎很可能始于没有设置适当的虚拟环境。假设您使用最近的 Python 并且只使用一些示例路径,您可以根据需要进行更改。

确保您在python命令行上实际执行您想要虚拟环境的 Python 版本的位置,或python.exe直接参考:

python -m venv "c:\my_venv\folder"
"c:\my_venv\folder\Scripts\activate"
pip install arviz
pip install pymc3
pip install xlrd

如果您使用的是 PyCharm,您可以让 PyC​​harm 为您执行此操作,只需确保在创建新环境之前选择适当的基础 Python 解释器。如果您按照描述手动执行此操作,则需要在解释器的项目设置中告诉 PyCharm 使用您刚刚为您正在处理的项目创建的环境。


推荐阅读