最近几天,我花费时间学习如何构建数据科学项目以使其简单、可重复和Pythonic。遵循这个指南,我创建了my_project
。你可以在下面看到它的结构。
├── README.md
├── data
│ ├── processed <-- data files
│ └── raw
├── notebooks
| └── notebook_1
├── setup.py
|
├── settings.py <-- settings file
└── src
├── __init__.py
│
└── data
└── get_data.py <-- script
我定义了一个函数,从.data/processed
加载数据。我想在其他脚本和位于.notebooks的jupyter笔记本中使用此函数。
def data_sample(code=None):
df = pd.read_parquet('../../data/processed/my_data')
if not code:
code = random.choice(df.code.unique())
df = df[df.code == code].sort_values('Date')
return df
很明显,除非我直接在定义它的脚本中运行该函数,否则它将无法在任何地方正常工作。
我的想法是创建一个名为settings.py
的文件,在其中声明:
from os.path import join, dirname
DATA_DIR = join(dirname(__file__), 'data', 'processed')
现在我可以写:
from my_project import settings
import os
def data_sample(code=None):
file_path = os.path.join(settings.DATA_DIR, 'my_data')
df = pd.read_parquet(file_path)
if not code:
code = random.choice(df.code.unique())
df = df[df.code == code].sort_values('Date')
return df
问题:
这种方式引用文件是常见的吗?
settings.DATA_DIR
看起来有些难看。settings.py
应该如何使用?它应该放在这个目录下吗?我在这个repo的不同位置看到过它,位于.samr/settings.py
下。
我明白可能没有“一个正确答案”,我只是试图找到处理这些事情的逻辑、优雅的方法。