python - 遇到来自 PyMC3 - Python 3.8.5 的奇怪错误消息
问题描述
我最近将我的 IDE 从 Spyder 更改为 PyCharm,因为我觉得通过 Anaconda 使用的 Spyder 有点臃肿。下面的代码在 Spyder 中或多或少地运行良好,但我在 PyCharm 中遇到了问题。代码运行平稳,直到将数据框放入模型(1.1)。观察与文件相关的元数据(?),它应该适合分析。
我看过的所有其他地方都在处理错误的文件导入格式。据我所知,这不是我的情况,因为数据框架在模型之前工作正常。
为了解决这个问题,我做了一些事情:
- 将样本量从 100K 减少到 50K 到 10K 到 1K
- 用实际更改了项目目录
- 我通过 conda contra pip 重新安装了以下依赖项:numpy、PyMC3、Theano
- 我将虚拟机增加到 100GB
- 安装新的 GPU 驱动程序进行处理
- 我添加了预处理,认为它可能与此有关
我在运行模型时不断遇到的错误是:
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)
解决方案
我决定试一试您的问题,但您的代码似乎有几个与错误没有太大关系的问题,而如果我按照以下步骤操作,错误不会出现:
- 创建一个只有 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,您可以让 PyCharm 为您执行此操作,只需确保在创建新环境之前选择适当的基础 Python 解释器。如果您按照描述手动执行此操作,则需要在解释器的项目设置中告诉 PyCharm 使用您刚刚为您正在处理的项目创建的环境。
推荐阅读
- python - 如何在列表列表中的对之间获取特定大小的所有唯一联合?
- python - 我不能等待来自 __init__ 的 func()
- spring-integration - 请求的第二个会话上的 Spring Integration TCP 客户端连接问题
- python - 用 NaN 替换特定字符串
- distributed-computing - Ray中的actor抽象
- python - 将简单的 Python 请求 POST 转换为 Rust reqwest
- flutter - VSCode 中是否有用于键入时显示的快速文档的设置?
- transactions - EF Core 在事务中创建一个新的独立事务
- python - 使用仿射变换翻转时,简单的 itk 行为不符合预期
- python - Python:字典在调用条目时无限循环代码