指南:從環(huán)境搭建、代碼風(fēng)格到多版本測(cè)試的完整開發(fā)流程)
特征工程機(jī)器學(xué)習(xí)數(shù)據(jù)分析【免費(fèi)下載鏈接】tsfreshAutomatic extraction of relevant features from time series:項(xiàng)目地址https://gitcode.com/gh_mirrors/ts/tsfresh點(diǎn)擊查看免費(fèi)下載tsfresh 是一個(gè)用于從時(shí)間序列中自動(dòng)提取相關(guān)特征的開源 Python 庫(kù)項(xiàng)目核心實(shí)現(xiàn)位于 tsfresh/feature_extraction 與 tsfresh/feature_selection 等模塊。本文以官方貢獻(xiàn)文檔 docs/text/how_to_contribute.rst 為骨架結(jié)合倉(cāng)庫(kù)內(nèi)真實(shí)的配置文件與測(cè)試代碼系統(tǒng)梳理貢獻(xiàn)者的完整工作流開發(fā)環(huán)境的安裝、單元測(cè)試與多版本兼容測(cè)試、文檔構(gòu)建、代碼風(fēng)格規(guī)范以及 PR 提交要求。讀完本文你將掌握從克隆倉(cāng)庫(kù)到提交可合并 PR 的全套實(shí)操步驟。貢獻(xiàn)方式任何形式的幫助都?xì)g迎tsfresh 的社區(qū)愿景是讓該項(xiàng)目成為 Python 生態(tài)中最大的特征提取方法庫(kù)因此所有形式的貢獻(xiàn)都受歡迎bug 報(bào)告、bug 修復(fù)、文檔改進(jìn)、功能增強(qiáng)與 idea 建議。無論你想新增一兩個(gè)有趣的特征計(jì)算器feature calculators如 feature_calculators.py 中已內(nèi)置的數(shù)百個(gè)計(jì)算函數(shù)還是實(shí)現(xiàn)一種新的特征選擇流程或者只是修正 1-2 個(gè)拼寫錯(cuò)誤都會(huì)得到認(rèn)可。最直接的貢獻(xiàn)方式是向項(xiàng)目提交 Pull RequestPR。如果你不熟悉 Git 的工作流也可以通過郵件聯(lián)系項(xiàng)目維護(hù)者參見 docs/authors.rst。三條編碼范式與兩條版權(quán)底線編碼范式簡(jiǎn)單、文檔化、可測(cè)試貢獻(xiàn)者需要遵循三條核心編碼范式Keep it simple保持簡(jiǎn)單項(xiàng)目信奉程序首先是給人讀的其次才是給機(jī)器執(zhí)行的。代碼應(yīng)追求簡(jiǎn)潔可讀而非炫技。Keep it documented保持文檔化每個(gè)方法和類至少要有 docstring。docstring 的重點(diǎn)不是描述做了什么而是解釋為什么這樣做——讓后來者理解設(shè)計(jì)意圖。Keep it tested保持可測(cè)試項(xiàng)目追求高測(cè)試覆蓋率。新增代碼應(yīng)同步補(bǔ)充對(duì)應(yīng)測(cè)試倉(cāng)庫(kù)中 tests/units 與 tests/integrations 即按模塊組織的大量測(cè)試用例即是佐證。版權(quán)底線保護(hù)整個(gè)項(xiàng)目的許可證項(xiàng)目特別強(qiáng)調(diào)兩條與版權(quán)相關(guān)的硬性約束不要引入許可證不可用或禁止商業(yè)使用的數(shù)據(jù)集——這類數(shù)據(jù)可能侵蝕整個(gè)項(xiàng)目的許可證本項(xiàng)目采用 MIT 許可證見 LICENSE.txt。不要使用許可證不可用或禁止商業(yè)使用的代碼片段例如來自 StackOverflow 的某些回答——同理這會(huì)危及整個(gè)項(xiàng)目的法律合規(guī)性。技術(shù)決策清理 Notebook 輸出另一條技術(shù)性約定是提交 iPython Notebook 前務(wù)必清除輸出。這能顯著提升 Git diff 的可讀性避免無關(guān)的 base64 輸出噪音污染變更記錄倉(cāng)庫(kù)中的示例筆記本位于 notebooks 目錄。開發(fā)環(huán)境搭建三步安裝可編輯安裝與 pre-commit 鉤子在倉(cāng)庫(kù)根目錄執(zhí)行以下三條命令即可完成開發(fā)環(huán)境安裝cd /path/to/tsfresh pip install -e .[testing] pre-commit installpip install -e .[testing]以可編輯editable模式安裝 tsfresh并帶上測(cè)試所需的全部依賴。testing這一 extras 的完整依賴清單定義在 setup.cfg 的[options.extras_require]段包括pytest4.4.0、pytest-cov2.6.1、pytest-xdist1.26.1、pytest-benchmark3.0.0、mock2.0.0、matplotlib、seaborn、notebook以及pre-commit等同時(shí)它通過%(dask)s引用了dask[dataframe]2.9.0與distributed2.11.0等 dask 相關(guān)依賴??删庉嫲惭b意味著對(duì)代碼的改動(dòng)會(huì)直接反映到測(cè)試運(yùn)行中無需重復(fù)安裝。pre-commit install會(huì)在本地 Git 倉(cāng)庫(kù)中注冊(cè) pre-commit 鉤子此后每次 commit 都會(huì)自動(dòng)觸發(fā)格式檢查詳見下文代碼風(fēng)格一節(jié)。補(bǔ)充說明從 pyproject.toml 可以看到本項(xiàng)目基于 PyScaffold 3.x 構(gòu)建setuptools70的版本上界正是為了規(guī)避 PyScaffold 3 與較新 setuptools 的兼容性問題因此setup.py本身極簡(jiǎn)僅調(diào)用setup(use_pyscaffoldTrue)并將所有配置委托給 setup.cfg。測(cè)試框架從單機(jī) pytest 到多版本矩陣運(yùn)行單元測(cè)試套件完成改動(dòng)后在倉(cāng)庫(kù)根目錄執(zhí)行pytest即可運(yùn)行完整的單元測(cè)試套件。倉(cāng)庫(kù)的 pytest 配置同樣集中在 setup.cfg 的[tool:pytest]段testpaths tests指定測(cè)試目錄為 testsaddopts默認(rèn)開啟--cov tsfresh --cov-report term-missing覆蓋率統(tǒng)計(jì)與--verbosefilterwarnings可統(tǒng)一配置警告過濾規(guī)則。測(cè)試按功能模塊組織特征提取相關(guān)測(cè)試在 tests/units/feature_extraction如test_feature_calculations.py、test_extraction.py、test_settings.py特征選擇相關(guān)測(cè)試在 tests/units/feature_selection另有 tests/integrations 承載端到端的集成測(cè)試如test_full_pipeline.py、test_relevant_feature_extraction.py。跨 Python 版本測(cè)試tox項(xiàng)目要求代碼在多個(gè) Python 版本下保持兼容使用 tox 批量執(zhí)行tox -r -p auto-r表示強(qiáng)制重建虛擬環(huán)境-p auto表示并行運(yùn)行多個(gè)環(huán)境的測(cè)試。測(cè)試的 Python 版本由 setup.cfg 的[tox:tox]段中的envlist決定當(dāng)前為py39, py310, py311, py312對(duì)應(yīng) Python 3.9–3.12。skip_missing_interpreters True意味著本地缺少某個(gè) Python 版本時(shí)不會(huì)報(bào)錯(cuò)而是跳過該環(huán)境。每個(gè)[testenv]會(huì)依次執(zhí)行打印 Python 版本python -V、安裝測(cè)試依賴python -m pip install .[testing]、運(yùn)行測(cè)試python -m pytest tests/。具體的 Python 微版本如 3.11.7 還是 3.11.8取決于本地安裝的解釋器envlist只鎖定大版本。管理多版本 Pythonpyenv官方推薦的本地多版本 Python 管理工具是pyenv它可以有序地安裝并在不同 Python 版本間切換配合tox的envlist即可在本地復(fù)現(xiàn)項(xiàng)目聲明的全部受支持版本。倉(cāng)庫(kù)的 Dockerfile.testing 正是基于這一思路構(gòu)建的它以 Ubuntu 22.04 為基礎(chǔ)鏡像通過pyenv編譯安裝 Makefile 中指定的 Python 版本默認(rèn)PYTHON_VERSIONS : 3.9 3.10 3.11 3.12再在容器內(nèi)運(yùn)行tox -r -p auto。其中對(duì) Python 3.7.x 使用clang編譯的細(xì)節(jié)是該鏡像處理 pyenv 編譯問題的既有方案。Docker 化測(cè)試環(huán)境除了本地運(yùn)行還可以在 Docker 容器中執(zhí)行測(cè)試make test-all-testenv這條命令依次觸發(fā) Makefile 中的三個(gè)目標(biāo)build-docker-testenv基于Dockerfile.testing構(gòu)建名為tsfresh-test-image的鏡像并通過--build-arg PYTHON_VERSIONS注入要編譯的 Python 版本run-docker-tests以只讀方式掛載當(dāng)前倉(cāng)庫(kù)-v .:/tsfresh并將 build、.tox、egg-info 等構(gòu)建產(chǎn)物用命名卷隔離build_artifacts、tox_artifacts、egg_artifacts保證宿主目錄不被污染clean清理.tox、build/、dist/與*.egg-info。首次運(yùn)行會(huì)因編譯多個(gè) Python 版本而耗時(shí)較長(zhǎng)但后續(xù)調(diào)用會(huì)顯著加快鏡像層與 tox 緩存均被復(fù)用。這種方式保證了無論本地環(huán)境如何都能在干凈、一致的測(cè)試環(huán)境中驗(yàn)證代碼。順帶一提Makefile 還提供了一個(gè)調(diào)試?yán)鱩ake bisect GOOD_COMMITcommit_hash。它利用git bisect自動(dòng)二分定位壞提交——假設(shè)當(dāng)前檢出的提交已知有問題執(zhí)行該命令后 git 會(huì)在pytest作為判定命令的情況下自動(dòng)二分出首個(gè)引入問題的提交。構(gòu)建文檔tsfresh 的文檔由 Sphinx 生成源碼位于 docs 目錄如 docs/text/feature_calculation.rst、docs/api 等。在完成上文的基礎(chǔ)安裝后執(zhí)行pip install -e .[docs] cd docs make htmldocsextras 在 setup.cfg 中定義為Sphinx6.1.3、sphinx_rtd_theme1.2.0、b2luigi、docutils0.18.1。make html實(shí)際調(diào)用 docs/Makefile 中的sphinx-build默認(rèn)將源碼目錄設(shè)為docs、構(gòu)建目錄設(shè)為docs/_build。構(gòu)建完成后成品文檔位于docs/_build/html目錄可直接用瀏覽器打開index.html預(yù)覽。文檔改動(dòng)應(yīng)與代碼改動(dòng)一樣遵循清晰、可讀的原則。代碼風(fēng)格black isort pre-commit項(xiàng)目統(tǒng)一使用black與isort進(jìn)行代碼格式化。安裝 pre-commit 后這兩個(gè)工具會(huì)在每次 commit 時(shí)自動(dòng)觸發(fā)無需手動(dòng)運(yùn)行。倉(cāng)庫(kù)根目錄的 .pre-commit-config.yaml 展示了完整的鉤子配置blackrev 22.12.0代碼格式化器exclude: ^docs/.*$表明文檔目錄不參與格式化isortrev 5.12.0import 排序器并顯式指定--profile black使 isort 的排序風(fēng)格與 black 兼容pre-commit-hooksrev v4.4.0一組通用檢查包括trailing-whitespace去除行尾空白、end-of-file-fixer保證文件以換行結(jié)尾、check-yaml校驗(yàn) YAML 語法、check-added-large-files阻止誤提交大文件。這套鉤子機(jī)制將風(fēng)格檢查前置到提交階段確保進(jìn)入倉(cāng)庫(kù)的每一行代碼都符合統(tǒng)一風(fēng)格也從機(jī)制上減輕了 PR 評(píng)審的負(fù)擔(dān)。PR 描述規(guī)范提交 Pull Request 時(shí)需要做到清晰且描述性的標(biāo)題讓維護(hù)者一眼看出改動(dòng)意圖詳細(xì)的變更說明包括改了什么、解決了什么問題為評(píng)審者提供提示說明評(píng)審時(shí)應(yīng)重點(diǎn)關(guān)注哪些地方以及相關(guān)的背景信息。好的 PR 描述能顯著降低評(píng)審成本這也是開源協(xié)作中文檔化思維的延伸——正如編碼范式所強(qiáng)調(diào)的不僅代碼要解釋為什么變更本身也要向協(xié)作方解釋為什么。小結(jié)為 tsfresh 做貢獻(xiàn)的完整閉環(huán)可以概括為可編輯安裝pip install -e .[testing]→ pre-commit 風(fēng)格鉤子 →pytest本地單測(cè) →tox -r -p auto多版本矩陣可選make test-all-testenv的 Docker 化方案→ Sphinx 文檔構(gòu)建 → 提交規(guī)范化的 PR。這三條編碼范式、兩條版權(quán)底線與一條技術(shù)約定加上倉(cāng)庫(kù)中 setup.cfg、.pre-commit-config.yaml、Makefile、Dockerfile.testing 等配置文件的落地構(gòu)成了一個(gè)可復(fù)制、可驗(yàn)證、可審計(jì)的貢獻(xiàn)流程。無論你的貢獻(xiàn)是一個(gè)特征計(jì)算器、一個(gè)選擇算法還是一個(gè)錯(cuò)別字修復(fù)這套流程都能保證改動(dòng)質(zhì)量與項(xiàng)目的長(zhǎng)期可持續(xù)性。贊分享特征工程機(jī)器學(xué)習(xí)數(shù)據(jù)分析【免費(fèi)下載鏈接】tsfreshAutomatic extraction of relevant features from time series:項(xiàng)目地址https://gitcode.com/gh_mirrors/ts/tsfresh點(diǎn)擊查看免費(fèi)下載相關(guān)推薦BorgBackup 貢獻(xiàn)指南從開發(fā)環(huán)境搭建、代碼風(fēng)格到測(cè)試與合入的完整實(shí)踐BorgBackup 貢獻(xiàn)指南從開發(fā)環(huán)境搭建、代碼風(fēng)格到測(cè)試與合入的完整實(shí)踐 本篇指南圍繞開源備份工具 BorgBackupborg倉(cāng)庫(kù)的 CONTRIB運(yùn)維存儲(chǔ)TileLang 貢獻(xiàn)者開發(fā)指南從環(huán)境搭建、代碼規(guī)范到本地測(cè)試的完整流程TileLang 貢獻(xiàn)者開發(fā)指南從環(huán)境搭建、代碼規(guī)范到本地測(cè)試的完整流程 TileLang 是一個(gè)基于 TVM 之上、用 Pythonic 語法編寫高性能 G編譯器編程語言高性能計(jì)算人工智能深度學(xué)習(xí)Nexent開發(fā)者指南從環(huán)境搭建到代碼貢獻(xiàn)的完整流程N(yùn)exent開發(fā)者指南從環(huán)境搭建到代碼貢獻(xiàn)的完整流程 Nexent是一個(gè)開源智能體SDK和平臺(tái)能夠?qū)蝹€(gè)提示轉(zhuǎn)換為完整的多模態(tài)服務(wù)無需復(fù)雜的圖表和連線操作AI AgentAI 應(yīng)用后端前端大模型RAG上一篇Buzz 完全指南如何用本地 Whisper 實(shí)現(xiàn)離線音頻轉(zhuǎn)錄下一篇告別重復(fù)求職JobFunnel一站式職位聚合神器全攻略創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考