khaled-dsml 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- khaled_dsml-0.1.0/.github/workflows/python-tests.yml +45 -0
- khaled_dsml-0.1.0/.github/workflows/release.yml +63 -0
- khaled_dsml-0.1.0/.github/workflows/testpypi.yml +51 -0
- khaled_dsml-0.1.0/CHANGELOG.md +10 -0
- khaled_dsml-0.1.0/LICENSE +21 -0
- khaled_dsml-0.1.0/MANIFEST.in +9 -0
- khaled_dsml-0.1.0/PKG-INFO +188 -0
- khaled_dsml-0.1.0/README.md +138 -0
- khaled_dsml-0.1.0/docs/COURSE_MAPPING_AR.md +45 -0
- khaled_dsml-0.1.0/docs/PUBLISH_AR.md +95 -0
- khaled_dsml-0.1.0/examples/bigdata_td1.py +15 -0
- khaled_dsml-0.1.0/examples/economic_regression.py +14 -0
- khaled_dsml-0.1.0/notebooks/01_data_science.ipynb +69 -0
- khaled_dsml-0.1.0/notebooks/02_machine_learning.ipynb +69 -0
- khaled_dsml-0.1.0/notebooks/03_big_data_td1.ipynb +81 -0
- khaled_dsml-0.1.0/notebooks/04_statistical_tests.ipynb +69 -0
- khaled_dsml-0.1.0/pyproject.toml +53 -0
- khaled_dsml-0.1.0/setup.cfg +4 -0
- khaled_dsml-0.1.0/src/khaled_dsml/__init__.py +17 -0
- khaled_dsml-0.1.0/src/khaled_dsml/_results.py +39 -0
- khaled_dsml-0.1.0/src/khaled_dsml/bigdata.py +107 -0
- khaled_dsml-0.1.0/src/khaled_dsml/cli.py +36 -0
- khaled_dsml-0.1.0/src/khaled_dsml/distributed.py +32 -0
- khaled_dsml-0.1.0/src/khaled_dsml/econometrics.py +79 -0
- khaled_dsml-0.1.0/src/khaled_dsml/ml.py +155 -0
- khaled_dsml-0.1.0/src/khaled_dsml/plots.py +41 -0
- khaled_dsml-0.1.0/src/khaled_dsml/quality.py +109 -0
- khaled_dsml-0.1.0/src/khaled_dsml/quizzes.py +62 -0
- khaled_dsml-0.1.0/src/khaled_dsml/sqltools.py +35 -0
- khaled_dsml-0.1.0/src/khaled_dsml/statistics.py +162 -0
- khaled_dsml-0.1.0/src/khaled_dsml/timeseries.py +22 -0
- khaled_dsml-0.1.0/src/khaled_dsml.egg-info/PKG-INFO +188 -0
- khaled_dsml-0.1.0/src/khaled_dsml.egg-info/SOURCES.txt +43 -0
- khaled_dsml-0.1.0/src/khaled_dsml.egg-info/dependency_links.txt +1 -0
- khaled_dsml-0.1.0/src/khaled_dsml.egg-info/entry_points.txt +2 -0
- khaled_dsml-0.1.0/src/khaled_dsml.egg-info/requires.txt +33 -0
- khaled_dsml-0.1.0/src/khaled_dsml.egg-info/top_level.txt +1 -0
- khaled_dsml-0.1.0/tests/test_bigdata.py +64 -0
- khaled_dsml-0.1.0/tests/test_econometrics.py +37 -0
- khaled_dsml-0.1.0/tests/test_ml.py +80 -0
- khaled_dsml-0.1.0/tests/test_quality.py +56 -0
- khaled_dsml-0.1.0/tests/test_quizzes.py +20 -0
- khaled_dsml-0.1.0/tests/test_sqltools.py +18 -0
- khaled_dsml-0.1.0/tests/test_statistics.py +73 -0
- khaled_dsml-0.1.0/tests/test_timeseries_distributed.py +18 -0
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
name: Python tests
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
pull_request:
|
|
6
|
+
|
|
7
|
+
permissions:
|
|
8
|
+
contents: read
|
|
9
|
+
|
|
10
|
+
jobs:
|
|
11
|
+
test:
|
|
12
|
+
runs-on: ubuntu-latest
|
|
13
|
+
strategy:
|
|
14
|
+
fail-fast: false
|
|
15
|
+
matrix:
|
|
16
|
+
python-version: ['3.10', '3.11', '3.12', '3.13']
|
|
17
|
+
steps:
|
|
18
|
+
- uses: actions/checkout@v4
|
|
19
|
+
- uses: actions/setup-python@v5
|
|
20
|
+
with:
|
|
21
|
+
python-version: ${{ matrix.python-version }}
|
|
22
|
+
- name: Install project and test dependencies
|
|
23
|
+
run: python -m pip install -e '.[dev,econometrics,plots]'
|
|
24
|
+
- name: Run all tests
|
|
25
|
+
run: python -m pytest
|
|
26
|
+
|
|
27
|
+
distributions:
|
|
28
|
+
needs: test
|
|
29
|
+
runs-on: ubuntu-latest
|
|
30
|
+
steps:
|
|
31
|
+
- uses: actions/checkout@v4
|
|
32
|
+
- uses: actions/setup-python@v5
|
|
33
|
+
with:
|
|
34
|
+
python-version: '3.13'
|
|
35
|
+
- name: Install build and test dependencies
|
|
36
|
+
run: python -m pip install --upgrade build twine
|
|
37
|
+
- name: Build wheel and source archive
|
|
38
|
+
run: python -m build
|
|
39
|
+
- name: Check distribution metadata
|
|
40
|
+
run: python -m twine check dist/*
|
|
41
|
+
- name: Test installation of built wheel
|
|
42
|
+
run: |
|
|
43
|
+
python -m pip install dist/*.whl
|
|
44
|
+
python -c "import khaled_dsml; print('KhaledDSML import OK')"
|
|
45
|
+
khaled-dsml --help
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
name: Publish to PyPI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
release:
|
|
5
|
+
types: [published]
|
|
6
|
+
|
|
7
|
+
permissions:
|
|
8
|
+
contents: read
|
|
9
|
+
|
|
10
|
+
jobs:
|
|
11
|
+
build:
|
|
12
|
+
runs-on: ubuntu-latest
|
|
13
|
+
steps:
|
|
14
|
+
- name: Checkout release tag
|
|
15
|
+
uses: actions/checkout@v4
|
|
16
|
+
- name: Set up Python
|
|
17
|
+
uses: actions/setup-python@v5
|
|
18
|
+
with:
|
|
19
|
+
python-version: '3.13'
|
|
20
|
+
- name: Verify release tag matches package version
|
|
21
|
+
env:
|
|
22
|
+
RELEASE_TAG: ${{ github.event.release.tag_name }}
|
|
23
|
+
run: |
|
|
24
|
+
python - <<'PY'
|
|
25
|
+
import os
|
|
26
|
+
import tomllib
|
|
27
|
+
from pathlib import Path
|
|
28
|
+
version = tomllib.loads(Path('pyproject.toml').read_text(encoding='utf-8'))['project']['version']
|
|
29
|
+
tag = os.environ['RELEASE_TAG']
|
|
30
|
+
if tag != f'v{version}':
|
|
31
|
+
raise SystemExit(f'Release tag {tag!r} must match v{version}')
|
|
32
|
+
PY
|
|
33
|
+
- name: Install validation dependencies
|
|
34
|
+
run: python -m pip install --upgrade build twine '.[dev,econometrics,plots]'
|
|
35
|
+
- name: Run tests
|
|
36
|
+
run: python -m pytest
|
|
37
|
+
- name: Build distributions
|
|
38
|
+
run: python -m build
|
|
39
|
+
- name: Validate distributions
|
|
40
|
+
run: python -m twine check dist/*
|
|
41
|
+
- name: Upload distributions
|
|
42
|
+
uses: actions/upload-artifact@v4
|
|
43
|
+
with:
|
|
44
|
+
name: python-package-distributions
|
|
45
|
+
path: dist/
|
|
46
|
+
if-no-files-found: error
|
|
47
|
+
|
|
48
|
+
publish:
|
|
49
|
+
needs: build
|
|
50
|
+
runs-on: ubuntu-latest
|
|
51
|
+
environment:
|
|
52
|
+
name: pypi
|
|
53
|
+
url: https://pypi.org/project/khaled-dsml/
|
|
54
|
+
permissions:
|
|
55
|
+
id-token: write
|
|
56
|
+
steps:
|
|
57
|
+
- name: Download distributions
|
|
58
|
+
uses: actions/download-artifact@v4
|
|
59
|
+
with:
|
|
60
|
+
name: python-package-distributions
|
|
61
|
+
path: dist/
|
|
62
|
+
- name: Publish via Trusted Publishing (OIDC)
|
|
63
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
name: Publish to TestPyPI (manual)
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_dispatch:
|
|
5
|
+
|
|
6
|
+
permissions:
|
|
7
|
+
contents: read
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
build:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
steps:
|
|
13
|
+
- name: Checkout source
|
|
14
|
+
uses: actions/checkout@v4
|
|
15
|
+
- name: Set up Python
|
|
16
|
+
uses: actions/setup-python@v5
|
|
17
|
+
with:
|
|
18
|
+
python-version: '3.13'
|
|
19
|
+
- name: Install test and packaging dependencies
|
|
20
|
+
run: python -m pip install --upgrade build twine '.[dev,econometrics,plots]'
|
|
21
|
+
- name: Run tests
|
|
22
|
+
run: python -m pytest
|
|
23
|
+
- name: Build distributions
|
|
24
|
+
run: python -m build
|
|
25
|
+
- name: Validate distributions
|
|
26
|
+
run: python -m twine check dist/*
|
|
27
|
+
- name: Upload distributions as artifact
|
|
28
|
+
uses: actions/upload-artifact@v4
|
|
29
|
+
with:
|
|
30
|
+
name: python-package-distributions
|
|
31
|
+
path: dist/
|
|
32
|
+
if-no-files-found: error
|
|
33
|
+
|
|
34
|
+
publish:
|
|
35
|
+
needs: build
|
|
36
|
+
runs-on: ubuntu-latest
|
|
37
|
+
environment:
|
|
38
|
+
name: testpypi
|
|
39
|
+
url: https://test.pypi.org/project/khaled-dsml/
|
|
40
|
+
permissions:
|
|
41
|
+
id-token: write
|
|
42
|
+
steps:
|
|
43
|
+
- name: Download distributions
|
|
44
|
+
uses: actions/download-artifact@v4
|
|
45
|
+
with:
|
|
46
|
+
name: python-package-distributions
|
|
47
|
+
path: dist/
|
|
48
|
+
- name: Publish via Trusted Publishing (OIDC)
|
|
49
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
50
|
+
with:
|
|
51
|
+
repository-url: https://test.pypi.org/legacy/
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# سجل التغييرات | Changelog
|
|
2
|
+
|
|
3
|
+
## 0.1.0 — إصدار تمهيدي (Unreleased on PyPI)
|
|
4
|
+
|
|
5
|
+
- اختبارات الاستدلال الإحصائي، وجودة البيانات، وتقييم نماذج تعلم الآلة.
|
|
6
|
+
- أدوات محلية لمعالجة ملفات CSV بالأجزاء، وأمثلة اقتصادية تعليمية.
|
|
7
|
+
- التقويم بأسئلة اختيار متعدد وتصحيح آلي، ودفاتر Jupyter عربية.
|
|
8
|
+
- تجهيز التحقق المستمر على GitHub وملفي نشر منفصلين لـ TestPyPI وPyPI.
|
|
9
|
+
|
|
10
|
+
يُستخدم هذا الإصدار للتجربة والمراجعة؛ لا تعني ملفات التوزيع المحلية أنه نُشر على فهرس حزم عام.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Khaled Ali
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: khaled-dsml
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Educational data science, machine learning and big-data analysis toolkit with Arabic interpretations
|
|
5
|
+
Author-email: Khaled Ali <ali-khaled@univ-eloued.dz>
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/noble2013/KhaledDSML
|
|
8
|
+
Project-URL: Repository, https://github.com/noble2013/KhaledDSML
|
|
9
|
+
Project-URL: Issues, https://github.com/noble2013/KhaledDSML/issues
|
|
10
|
+
Keywords: data-science,machine-learning,big-data,education,statistics,arabic
|
|
11
|
+
Classifier: Development Status :: 3 - Alpha
|
|
12
|
+
Classifier: Intended Audience :: Education
|
|
13
|
+
Classifier: Intended Audience :: Science/Research
|
|
14
|
+
Classifier: Programming Language :: Python :: 3
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
19
|
+
Classifier: Topic :: Scientific/Engineering :: Information Analysis
|
|
20
|
+
Requires-Python: >=3.10
|
|
21
|
+
Description-Content-Type: text/markdown
|
|
22
|
+
License-File: LICENSE
|
|
23
|
+
Requires-Dist: numpy>=1.26
|
|
24
|
+
Requires-Dist: pandas>=2.1
|
|
25
|
+
Requires-Dist: scipy>=1.11
|
|
26
|
+
Requires-Dist: scikit-learn>=1.3
|
|
27
|
+
Provides-Extra: econometrics
|
|
28
|
+
Requires-Dist: statsmodels>=0.14; extra == "econometrics"
|
|
29
|
+
Provides-Extra: dask
|
|
30
|
+
Requires-Dist: dask[dataframe]>=2024.1; extra == "dask"
|
|
31
|
+
Provides-Extra: spark
|
|
32
|
+
Requires-Dist: pyspark>=3.5; extra == "spark"
|
|
33
|
+
Provides-Extra: plots
|
|
34
|
+
Requires-Dist: matplotlib>=3.8; extra == "plots"
|
|
35
|
+
Provides-Extra: notebooks
|
|
36
|
+
Requires-Dist: jupyterlab>=4; extra == "notebooks"
|
|
37
|
+
Requires-Dist: ipykernel>=6; extra == "notebooks"
|
|
38
|
+
Requires-Dist: openpyxl>=3.1; extra == "notebooks"
|
|
39
|
+
Provides-Extra: dev
|
|
40
|
+
Requires-Dist: pytest>=8; extra == "dev"
|
|
41
|
+
Requires-Dist: build>=1; extra == "dev"
|
|
42
|
+
Requires-Dist: twine>=5; extra == "dev"
|
|
43
|
+
Provides-Extra: all
|
|
44
|
+
Requires-Dist: statsmodels>=0.14; extra == "all"
|
|
45
|
+
Requires-Dist: matplotlib>=3.8; extra == "all"
|
|
46
|
+
Requires-Dist: jupyterlab>=4; extra == "all"
|
|
47
|
+
Requires-Dist: ipykernel>=6; extra == "all"
|
|
48
|
+
Requires-Dist: openpyxl>=3.1; extra == "all"
|
|
49
|
+
Dynamic: license-file
|
|
50
|
+
|
|
51
|
+
# KhaledDSML — علم البيانات وتعلّم الآلة وتحليل البيانات الضخمة
|
|
52
|
+
|
|
53
|
+
**الإعداد والتطوير: الأستاذ الدكتور خالد علي (Khaled Ali)**
|
|
54
|
+
**الجامعة:** جامعة الشهيد حمه لخضر – الوادي، الجزائر (University of El Oued, Algeria)
|
|
55
|
+
**الكلية:** كلية العلوم الاقتصادية والتجارية وعلوم التسيير (Faculty of Economic, Commercial and Management Sciences)
|
|
56
|
+
**البريد الإلكتروني المهني:** [ali-khaled@univ-eloued.dz](mailto:ali-khaled@univ-eloued.dz)
|
|
57
|
+
**الإصدار التجريبي: 0.1.0 — أكتوبر 2026**
|
|
58
|
+
|
|
59
|
+
حزمة Python تعليمية للمقاييس التالية:
|
|
60
|
+
|
|
61
|
+
- علم البيانات وتعلّم الآلة — السنة الثالثة ليسانس اقتصاد وتسيير المؤسسات.
|
|
62
|
+
- تحليل البيانات الضخمة — السنة الثانية ماستر اقتصاد كمي.
|
|
63
|
+
|
|
64
|
+
> تنبيه: تم تصميم المشروع وفق البرامج البيداغوجية التي أعدّها المؤلف؛ لا يُدَّعى تطابقه مع بطاقة وزارية رسمية دون مراجعتها. البيانات الاصطناعية للأغراض التعليمية فقط. الإحصاء الوصفي لا يثبت السببية، وعدم رفض الفرضية الصفرية لا يثبت صحتها.
|
|
65
|
+
|
|
66
|
+
## لماذا هذه المكتبة؟
|
|
67
|
+
|
|
68
|
+
- اختبارات فرضيات شائعة مع `statistic`، و`p_value`، وفرضية صفرية، وتفسير عربي.
|
|
69
|
+
- فحص جودة البيانات واكتشاف القيم الشاذة وتحسين الذاكرة.
|
|
70
|
+
- أنابيب تدريب آمنة من تسرب البيانات، وتقييم الانحدار والتصنيف والتجميع.
|
|
71
|
+
- معالجة CSV بالأجزاء، وتجميع شهري وجغرافي، وتوليد مليون معاملة اصطناعية إذا طُلب ذلك.
|
|
72
|
+
- 24 سؤال اختيار متعدد للتقويم التكويني مع التصحيح والتفسير.
|
|
73
|
+
- دعم Windows وJupyterLab وGoogle Colab بعد تثبيت الاعتمادات.
|
|
74
|
+
|
|
75
|
+
## التثبيت من المجلد المصدر — Windows PowerShell
|
|
76
|
+
|
|
77
|
+
افتح PowerShell من داخل المجلد الذي يحتوي `pyproject.toml`:
|
|
78
|
+
|
|
79
|
+
```powershell
|
|
80
|
+
py -3.13 -m venv .venv
|
|
81
|
+
.\.venv\Scripts\python.exe -m pip install --upgrade pip
|
|
82
|
+
.\.venv\Scripts\python.exe -m pip install -e ".[all,dev]"
|
|
83
|
+
.\.venv\Scripts\python.exe -m pytest
|
|
84
|
+
.\.venv\Scripts\khaled-dsml.exe demo --rows 1000
|
|
85
|
+
.\.venv\Scripts\khaled-dsml.exe quiz --course big_data --count 5
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
بعض بيئات Windows تستعمل `py` بدل `py -3.13` عند عدم توفر الفرع 3.13.
|
|
89
|
+
|
|
90
|
+
*لاحقًا وبعد النشر الفعلي على PyPI فقط:*
|
|
91
|
+
|
|
92
|
+
```powershell
|
|
93
|
+
py -m pip install khaled-dsml
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## أمثلة عملية
|
|
97
|
+
|
|
98
|
+
### اختبار اعتدالية
|
|
99
|
+
|
|
100
|
+
```python
|
|
101
|
+
from khaled_dsml import normality_test
|
|
102
|
+
result = normality_test([12, 13, 15, 17, 16, 14, 13, 18])
|
|
103
|
+
print(result.interpretation_ar)
|
|
104
|
+
print(result.p_value)
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### كشف مشاكل البيانات
|
|
108
|
+
|
|
109
|
+
```python
|
|
110
|
+
from khaled_dsml import generate_transactions, quality_report, missingness_report
|
|
111
|
+
transactions = generate_transactions(100_000)
|
|
112
|
+
print(quality_report(transactions))
|
|
113
|
+
print(missingness_report(transactions))
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### تعلم الآلة (منع تسرب البيانات)
|
|
117
|
+
|
|
118
|
+
```python
|
|
119
|
+
from sklearn.datasets import make_regression
|
|
120
|
+
from khaled_dsml import split_data, make_regressor, regression_metrics
|
|
121
|
+
X, y = make_regression(n_samples=200, n_features=3, noise=3, random_state=42)
|
|
122
|
+
X_train, X_test, y_train, y_test = split_data(X, y)
|
|
123
|
+
model = make_regressor(X_train, "ridge", alpha=1.0)
|
|
124
|
+
model.fit(X_train, y_train)
|
|
125
|
+
print(regression_metrics(y_test, model.predict(X_test)))
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### مليون معاملة والتجميع بالأجزاء
|
|
129
|
+
|
|
130
|
+
```python
|
|
131
|
+
from khaled_dsml import generate_transactions, csv_chunk_summary, csv_chunk_monthly
|
|
132
|
+
transactions = generate_transactions(1_000_000)
|
|
133
|
+
transactions.to_csv("transactions.csv", index=False)
|
|
134
|
+
print(csv_chunk_summary("transactions.csv", group_by="wilaya"))
|
|
135
|
+
print(csv_chunk_monthly("transactions.csv"))
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
`read_csv(chunksize=...)` لا يحتاج تحميل الملف بكامله. **لكن** توليد مليون صف في `generate_transactions` يحتفظ بها في الذاكرة قبل الحفظ؛ اختر عدد صفوف أصغر لجهاز بذاكرة محدودة.
|
|
139
|
+
|
|
140
|
+
### أسئلة تصحيح آلي
|
|
141
|
+
|
|
142
|
+
```python
|
|
143
|
+
from khaled_dsml import get_questions, grade_quiz
|
|
144
|
+
questions = get_questions("machine_learning", limit=3, seed=3)
|
|
145
|
+
for question in questions:
|
|
146
|
+
print(question.id, question.question)
|
|
147
|
+
answers = {q.id: "A" for q in questions} # إجابات افتراضية
|
|
148
|
+
print(grade_quiz(questions, answers))
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
## واجهات المكتبة
|
|
152
|
+
|
|
153
|
+
| الوحدة | أمثلة الدوال |
|
|
154
|
+
|---|---|
|
|
155
|
+
| `statistics` | `normality_test`, `independent_t_test`, `paired_t_test`, `anova_test`, `kruskal_test`, `chi_square_test`, `pearson_test`, `spearman_test`, `levene_test`, `ks_two_sample_test` |
|
|
156
|
+
| `quality` | `quality_report`, `missingness_report`, `iqr_outliers`, `fill_missing_numeric`, `optimize_memory`, `distribution_drift_test` |
|
|
157
|
+
| `ml` | `make_regressor`, `make_classifier`, `cross_validation_summary`, `classification_metrics`, `regression_metrics`, `cluster_data`, `pca_summary` |
|
|
158
|
+
| `bigdata` | `generate_transactions`, `csv_chunk_summary`, `csv_chunk_missing`, `csv_chunk_monthly`, `map_reduce_word_count`, `json_documents_to_table` |
|
|
159
|
+
| `sqltools` | `sqlite_import_frame`, `sqlite_group_summary` (SQLite محلي لتجارب SQL) |
|
|
160
|
+
| `timeseries` | `lagged_features` (خصائص مؤخرة دون تسرب للمستقبل) |
|
|
161
|
+
| `distributed` | `dask_csv_summary`, `spark_group_summary` (تثبيت `[dask]` أو `[spark]` واستخدام محرك فعلي) |
|
|
162
|
+
| `econometrics` | `adf_test`, `vif_table`, `breusch_pagan_test`, `ljung_box_test`, `cronbach_alpha` (تثبيت `econometrics`) |
|
|
163
|
+
| `plots` | `plot_missingness`, `plot_monthly`, `plot_confusion` (تثبيت `plots`) |
|
|
164
|
+
| `quizzes` | `get_questions`, `grade_quiz` |
|
|
165
|
+
|
|
166
|
+
لخريطة المقياسين والتغطية التفصيلية، راجع [docs/COURSE_MAPPING_AR.md](docs/COURSE_MAPPING_AR.md). للحصول على أمثلة مكتملة راجع `examples/`.
|
|
167
|
+
|
|
168
|
+
**لإنشاء المستودع ونشر الحزمة بأمان عبر GitHub Actions وTrusted Publishing (بدون حفظ مفتاح API)، راجع [دليل النشر العربي](docs/PUBLISH_AR.md).**
|
|
169
|
+
|
|
170
|
+
## نشر الحزمة على TestPyPI وPyPI باستخدام GitHub Actions
|
|
171
|
+
|
|
172
|
+
هذه المكتبة **غير منشورة بعد** على PyPI أو TestPyPI؛ لا تستخدم أمر `pip install khaled-dsml` من PyPI إلى حين نشرها.
|
|
173
|
+
|
|
174
|
+
1. تابع نتائج الاختبارات والبناء في [GitHub Actions](https://github.com/noble2013/KhaledDSML/actions).
|
|
175
|
+
2. أنشئ حسابًا منفصلًا على [TestPyPI](https://test.pypi.org/account/register/) وبيئة `testpypi` في `Settings → Environments` بمستودع GitHub.
|
|
176
|
+
3. أضف في [TestPyPI Trusted Publishing](https://test.pypi.org/manage/account/publishing/) ناشرًا معلقًا للاسم `khaled-dsml` ومعلومات المستودع `noble2013/KhaledDSML`، وملف `testpypi.yml`، والبيئة `testpypi`.
|
|
177
|
+
4. بعد نجاح البناء، نفذ `Actions → Publish to TestPyPI (manual) → Run workflow`.
|
|
178
|
+
5. بعد نجاح التجربة، أنشئ البيئة `pypi` وناشرًا موثوقًا للاسم نفسه على [PyPI](https://pypi.org/manage/account/publishing/) باستخدام `release.yml` والبيئة `pypi`، ثم انشر GitHub Release يحمل الوسم `v0.1.0`.
|
|
179
|
+
|
|
180
|
+
يوصى بحماية بيئة `pypi` بمراجعة يدوية. لا تضع كلمات مرور أو رموز API داخل GitHub. اقرأ [دليل النشر العربي](docs/PUBLISH_AR.md) للمزيد.
|
|
181
|
+
|
|
182
|
+
## Notes (English)
|
|
183
|
+
|
|
184
|
+
KhaledDSML is an **educational** Python toolkit; it wraps proven NumPy, pandas, SciPy and scikit-learn primitives rather than reinventing statistical algorithms. Optional statistics are backed by statsmodels. It is not a distributed processing engine: the MapReduce example runs locally; Optional Dask and Spark adapters are included, but need real engines and are not validated on a Spark cluster in version 0.1.0. Do not fit preprocessing on test data. Hypothesis-test interpretations should be checked against sampling design and assumptions. An MIT license covers this original wrapper code, not a claim of authorship over third-party algorithms.
|
|
185
|
+
|
|
186
|
+
## حقوق الاستخدام
|
|
187
|
+
|
|
188
|
+
الترخيص MIT. الاسم المقترح للنشر هو `khaled-dsml` (يلزم التحقق من توفره عند رفع الحزمة). كل الإضافات يمكن مراجعتها عبر اختبارات `pytest` قبل النشر. حقوق المنهجيات والخوارزميات الأساسية محفوظة لمؤلفيها ومشروعاتها الأصلية.
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
# KhaledDSML — علم البيانات وتعلّم الآلة وتحليل البيانات الضخمة
|
|
2
|
+
|
|
3
|
+
**الإعداد والتطوير: الأستاذ الدكتور خالد علي (Khaled Ali)**
|
|
4
|
+
**الجامعة:** جامعة الشهيد حمه لخضر – الوادي، الجزائر (University of El Oued, Algeria)
|
|
5
|
+
**الكلية:** كلية العلوم الاقتصادية والتجارية وعلوم التسيير (Faculty of Economic, Commercial and Management Sciences)
|
|
6
|
+
**البريد الإلكتروني المهني:** [ali-khaled@univ-eloued.dz](mailto:ali-khaled@univ-eloued.dz)
|
|
7
|
+
**الإصدار التجريبي: 0.1.0 — أكتوبر 2026**
|
|
8
|
+
|
|
9
|
+
حزمة Python تعليمية للمقاييس التالية:
|
|
10
|
+
|
|
11
|
+
- علم البيانات وتعلّم الآلة — السنة الثالثة ليسانس اقتصاد وتسيير المؤسسات.
|
|
12
|
+
- تحليل البيانات الضخمة — السنة الثانية ماستر اقتصاد كمي.
|
|
13
|
+
|
|
14
|
+
> تنبيه: تم تصميم المشروع وفق البرامج البيداغوجية التي أعدّها المؤلف؛ لا يُدَّعى تطابقه مع بطاقة وزارية رسمية دون مراجعتها. البيانات الاصطناعية للأغراض التعليمية فقط. الإحصاء الوصفي لا يثبت السببية، وعدم رفض الفرضية الصفرية لا يثبت صحتها.
|
|
15
|
+
|
|
16
|
+
## لماذا هذه المكتبة؟
|
|
17
|
+
|
|
18
|
+
- اختبارات فرضيات شائعة مع `statistic`، و`p_value`، وفرضية صفرية، وتفسير عربي.
|
|
19
|
+
- فحص جودة البيانات واكتشاف القيم الشاذة وتحسين الذاكرة.
|
|
20
|
+
- أنابيب تدريب آمنة من تسرب البيانات، وتقييم الانحدار والتصنيف والتجميع.
|
|
21
|
+
- معالجة CSV بالأجزاء، وتجميع شهري وجغرافي، وتوليد مليون معاملة اصطناعية إذا طُلب ذلك.
|
|
22
|
+
- 24 سؤال اختيار متعدد للتقويم التكويني مع التصحيح والتفسير.
|
|
23
|
+
- دعم Windows وJupyterLab وGoogle Colab بعد تثبيت الاعتمادات.
|
|
24
|
+
|
|
25
|
+
## التثبيت من المجلد المصدر — Windows PowerShell
|
|
26
|
+
|
|
27
|
+
افتح PowerShell من داخل المجلد الذي يحتوي `pyproject.toml`:
|
|
28
|
+
|
|
29
|
+
```powershell
|
|
30
|
+
py -3.13 -m venv .venv
|
|
31
|
+
.\.venv\Scripts\python.exe -m pip install --upgrade pip
|
|
32
|
+
.\.venv\Scripts\python.exe -m pip install -e ".[all,dev]"
|
|
33
|
+
.\.venv\Scripts\python.exe -m pytest
|
|
34
|
+
.\.venv\Scripts\khaled-dsml.exe demo --rows 1000
|
|
35
|
+
.\.venv\Scripts\khaled-dsml.exe quiz --course big_data --count 5
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
بعض بيئات Windows تستعمل `py` بدل `py -3.13` عند عدم توفر الفرع 3.13.
|
|
39
|
+
|
|
40
|
+
*لاحقًا وبعد النشر الفعلي على PyPI فقط:*
|
|
41
|
+
|
|
42
|
+
```powershell
|
|
43
|
+
py -m pip install khaled-dsml
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## أمثلة عملية
|
|
47
|
+
|
|
48
|
+
### اختبار اعتدالية
|
|
49
|
+
|
|
50
|
+
```python
|
|
51
|
+
from khaled_dsml import normality_test
|
|
52
|
+
result = normality_test([12, 13, 15, 17, 16, 14, 13, 18])
|
|
53
|
+
print(result.interpretation_ar)
|
|
54
|
+
print(result.p_value)
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### كشف مشاكل البيانات
|
|
58
|
+
|
|
59
|
+
```python
|
|
60
|
+
from khaled_dsml import generate_transactions, quality_report, missingness_report
|
|
61
|
+
transactions = generate_transactions(100_000)
|
|
62
|
+
print(quality_report(transactions))
|
|
63
|
+
print(missingness_report(transactions))
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### تعلم الآلة (منع تسرب البيانات)
|
|
67
|
+
|
|
68
|
+
```python
|
|
69
|
+
from sklearn.datasets import make_regression
|
|
70
|
+
from khaled_dsml import split_data, make_regressor, regression_metrics
|
|
71
|
+
X, y = make_regression(n_samples=200, n_features=3, noise=3, random_state=42)
|
|
72
|
+
X_train, X_test, y_train, y_test = split_data(X, y)
|
|
73
|
+
model = make_regressor(X_train, "ridge", alpha=1.0)
|
|
74
|
+
model.fit(X_train, y_train)
|
|
75
|
+
print(regression_metrics(y_test, model.predict(X_test)))
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### مليون معاملة والتجميع بالأجزاء
|
|
79
|
+
|
|
80
|
+
```python
|
|
81
|
+
from khaled_dsml import generate_transactions, csv_chunk_summary, csv_chunk_monthly
|
|
82
|
+
transactions = generate_transactions(1_000_000)
|
|
83
|
+
transactions.to_csv("transactions.csv", index=False)
|
|
84
|
+
print(csv_chunk_summary("transactions.csv", group_by="wilaya"))
|
|
85
|
+
print(csv_chunk_monthly("transactions.csv"))
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
`read_csv(chunksize=...)` لا يحتاج تحميل الملف بكامله. **لكن** توليد مليون صف في `generate_transactions` يحتفظ بها في الذاكرة قبل الحفظ؛ اختر عدد صفوف أصغر لجهاز بذاكرة محدودة.
|
|
89
|
+
|
|
90
|
+
### أسئلة تصحيح آلي
|
|
91
|
+
|
|
92
|
+
```python
|
|
93
|
+
from khaled_dsml import get_questions, grade_quiz
|
|
94
|
+
questions = get_questions("machine_learning", limit=3, seed=3)
|
|
95
|
+
for question in questions:
|
|
96
|
+
print(question.id, question.question)
|
|
97
|
+
answers = {q.id: "A" for q in questions} # إجابات افتراضية
|
|
98
|
+
print(grade_quiz(questions, answers))
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## واجهات المكتبة
|
|
102
|
+
|
|
103
|
+
| الوحدة | أمثلة الدوال |
|
|
104
|
+
|---|---|
|
|
105
|
+
| `statistics` | `normality_test`, `independent_t_test`, `paired_t_test`, `anova_test`, `kruskal_test`, `chi_square_test`, `pearson_test`, `spearman_test`, `levene_test`, `ks_two_sample_test` |
|
|
106
|
+
| `quality` | `quality_report`, `missingness_report`, `iqr_outliers`, `fill_missing_numeric`, `optimize_memory`, `distribution_drift_test` |
|
|
107
|
+
| `ml` | `make_regressor`, `make_classifier`, `cross_validation_summary`, `classification_metrics`, `regression_metrics`, `cluster_data`, `pca_summary` |
|
|
108
|
+
| `bigdata` | `generate_transactions`, `csv_chunk_summary`, `csv_chunk_missing`, `csv_chunk_monthly`, `map_reduce_word_count`, `json_documents_to_table` |
|
|
109
|
+
| `sqltools` | `sqlite_import_frame`, `sqlite_group_summary` (SQLite محلي لتجارب SQL) |
|
|
110
|
+
| `timeseries` | `lagged_features` (خصائص مؤخرة دون تسرب للمستقبل) |
|
|
111
|
+
| `distributed` | `dask_csv_summary`, `spark_group_summary` (تثبيت `[dask]` أو `[spark]` واستخدام محرك فعلي) |
|
|
112
|
+
| `econometrics` | `adf_test`, `vif_table`, `breusch_pagan_test`, `ljung_box_test`, `cronbach_alpha` (تثبيت `econometrics`) |
|
|
113
|
+
| `plots` | `plot_missingness`, `plot_monthly`, `plot_confusion` (تثبيت `plots`) |
|
|
114
|
+
| `quizzes` | `get_questions`, `grade_quiz` |
|
|
115
|
+
|
|
116
|
+
لخريطة المقياسين والتغطية التفصيلية، راجع [docs/COURSE_MAPPING_AR.md](docs/COURSE_MAPPING_AR.md). للحصول على أمثلة مكتملة راجع `examples/`.
|
|
117
|
+
|
|
118
|
+
**لإنشاء المستودع ونشر الحزمة بأمان عبر GitHub Actions وTrusted Publishing (بدون حفظ مفتاح API)، راجع [دليل النشر العربي](docs/PUBLISH_AR.md).**
|
|
119
|
+
|
|
120
|
+
## نشر الحزمة على TestPyPI وPyPI باستخدام GitHub Actions
|
|
121
|
+
|
|
122
|
+
هذه المكتبة **غير منشورة بعد** على PyPI أو TestPyPI؛ لا تستخدم أمر `pip install khaled-dsml` من PyPI إلى حين نشرها.
|
|
123
|
+
|
|
124
|
+
1. تابع نتائج الاختبارات والبناء في [GitHub Actions](https://github.com/noble2013/KhaledDSML/actions).
|
|
125
|
+
2. أنشئ حسابًا منفصلًا على [TestPyPI](https://test.pypi.org/account/register/) وبيئة `testpypi` في `Settings → Environments` بمستودع GitHub.
|
|
126
|
+
3. أضف في [TestPyPI Trusted Publishing](https://test.pypi.org/manage/account/publishing/) ناشرًا معلقًا للاسم `khaled-dsml` ومعلومات المستودع `noble2013/KhaledDSML`، وملف `testpypi.yml`، والبيئة `testpypi`.
|
|
127
|
+
4. بعد نجاح البناء، نفذ `Actions → Publish to TestPyPI (manual) → Run workflow`.
|
|
128
|
+
5. بعد نجاح التجربة، أنشئ البيئة `pypi` وناشرًا موثوقًا للاسم نفسه على [PyPI](https://pypi.org/manage/account/publishing/) باستخدام `release.yml` والبيئة `pypi`، ثم انشر GitHub Release يحمل الوسم `v0.1.0`.
|
|
129
|
+
|
|
130
|
+
يوصى بحماية بيئة `pypi` بمراجعة يدوية. لا تضع كلمات مرور أو رموز API داخل GitHub. اقرأ [دليل النشر العربي](docs/PUBLISH_AR.md) للمزيد.
|
|
131
|
+
|
|
132
|
+
## Notes (English)
|
|
133
|
+
|
|
134
|
+
KhaledDSML is an **educational** Python toolkit; it wraps proven NumPy, pandas, SciPy and scikit-learn primitives rather than reinventing statistical algorithms. Optional statistics are backed by statsmodels. It is not a distributed processing engine: the MapReduce example runs locally; Optional Dask and Spark adapters are included, but need real engines and are not validated on a Spark cluster in version 0.1.0. Do not fit preprocessing on test data. Hypothesis-test interpretations should be checked against sampling design and assumptions. An MIT license covers this original wrapper code, not a claim of authorship over third-party algorithms.
|
|
135
|
+
|
|
136
|
+
## حقوق الاستخدام
|
|
137
|
+
|
|
138
|
+
الترخيص MIT. الاسم المقترح للنشر هو `khaled-dsml` (يلزم التحقق من توفره عند رفع الحزمة). كل الإضافات يمكن مراجعتها عبر اختبارات `pytest` قبل النشر. حقوق المنهجيات والخوارزميات الأساسية محفوظة لمؤلفيها ومشروعاتها الأصلية.
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# خريطة الوظائف حسب المقاييس — KhaledDSML 0.1.0
|
|
2
|
+
|
|
3
|
+
## 1. علم البيانات وتعلم الآلة — السنة الثالثة ليسانس
|
|
4
|
+
|
|
5
|
+
| المحور | الوظائف المنفذة حاليًا | المتابعة المطلوبة |
|
|
6
|
+
|---|---|---|
|
|
7
|
+
| مدخل للبيانات | `quality_report`, `generate_transactions`, أمثلة الاقتصاد | نظرية المفاهيم في الدروس |
|
|
8
|
+
| قراءة وتنظيف | `missingness_report`, `fill_missing_numeric`, `iqr_outliers`, `zscore_outliers` | التعويض المتقدم عند الحاجة |
|
|
9
|
+
| إحصاء وصفي واستدلالي | `descriptive_summary`, `shapiro_test`, `jarque_bera_test`, `independent_t_test`, `paired_t_test`, `anova_test`, `kruskal_test`, `chi_square_test`, `pearson_test`, `spearman_test`, `levene_test` | التحقق من الفرضيات بحسب تصميم الدراسة |
|
|
10
|
+
| تقسيم وتسرّب البيانات | `split_data`, `make_regressor`, `make_classifier` (Pipeline) | مراجعة تسرب الميزات المرتبطة بالهدف |
|
|
11
|
+
| الانحدار | Linear Regression, Ridge, Lasso, Random Forest, Decision Tree؛ `regression_metrics` | تفسير المعاملات والتشخيص المتعمق |
|
|
12
|
+
| التصنيف | Logistic Regression, KNN, Decision Tree, Random Forest؛ `classification_metrics` | ROC-AUC والمعايرة في الإصدارات التالية |
|
|
13
|
+
| التجميع | K-means, Hierarchical، Silhouette، Davies–Bouldin، PCA | خوارزميات تجميع أخرى |
|
|
14
|
+
| مقارنة النماذج | `cross_validation_summary` | بحث المعاملات الشبكي وتوصيات عامة |
|
|
15
|
+
| التقويم | `get_questions`, `grade_quiz` | أسئلة وتمارين إضافية لكل TD |
|
|
16
|
+
|
|
17
|
+
## 2. تحليل البيانات الضخمة — السنة الثانية ماستر اقتصاد كمي
|
|
18
|
+
|
|
19
|
+
| المحور | الوظائف المنفذة حاليًا | حدود الإصدار الحالي |
|
|
20
|
+
|---|---|---|
|
|
21
|
+
| TD1 توليد وفحص مليون معاملة | `generate_transactions`, `quality_report`, `missingness_report` | توليد DataFrame كامل يحتاج RAM |
|
|
22
|
+
| TD1 التنظيف والتجميع | `fill_missing_numeric`, `csv_chunk_summary`, `csv_chunk_monthly` | معالجات الأجزاء تتطلب ملف CSV |
|
|
23
|
+
| TD1 تحسين الذاكرة | `memory_report`, `optimize_memory`, `csv_chunk_missing` | تحجيم الفاصلة العائمة قد يغير الدقة وهو غير مفعل افتراضيًا |
|
|
24
|
+
| MapReduce | `map_reduce_word_count` | مثال محلي **غير موزّع** |
|
|
25
|
+
| قواعد بيانات وNoSQL | `json_documents_to_table`, `sqlite_import_frame`, `sqlite_group_summary` | يتوفر محول Spark اختياري للتجميع فقط؛ اتصال MongoDB/Redis غير متاح |
|
|
26
|
+
| تنظيف وإعداد خصائص | `quality`, `ml.make_classifier`, `ml.make_regressor` | تتوفر محولات Dask وSpark الاختيارية؛ الاختبارات الحالية تغطي المعالجة المحلية |
|
|
27
|
+
| Lasso/Ridge والغابات | `make_regressor`, `make_classifier`, `cross_validation_summary` | حجم بيانات التدريب محكوم بذاكرة الجهاز |
|
|
28
|
+
| تنقيب النصوص | `map_reduce_word_count` | التحليل الدلالي/المشاعر المتقدم مؤجل |
|
|
29
|
+
| الاقتصاد القياسي والتسلسل الزمني | `econometrics.adf_test`, `ljung_box_test`, `vif_table`, `breusch_pagan_test` | `lagged_features` متاحة؛ لم تُنفذ نماذج التنبؤ الآني الكاملة |
|
|
30
|
+
| الخصوصية والحوكمة | تمارين التقويم | تتطلب سياسات وحوكمة مؤسسية خارج نطاق المكتبة |
|
|
31
|
+
|
|
32
|
+
## 3. اختبارات إضافية
|
|
33
|
+
|
|
34
|
+
- `stats`: Shapiro–Wilk، Jarque–Bera، Welch، Student، T المزدوج، Mann–Whitney، Wilcoxon، ANOVA، Kruskal–Wallis، Levene، Chi-square، Pearson، Spearman، KS لعينيّتين.
|
|
35
|
+
- `econometrics`: ADF، Ljung–Box، Breusch–Pagan، VIF، Cronbach alpha.
|
|
36
|
+
- ليست كل هذه الاختبارات مطلوبة في كل مقياس، بل إضافات مساندة للتحليل.
|
|
37
|
+
- لا تشمل النسخة 0.1.0 اختبارات Little MCAR أو EFA/CFA أو PLS-SEM، لأن تقديمها بطريقة صحيحة يتطلب طبقة منهجية مستقلة وحالات تحقق معيارية.
|
|
38
|
+
- مستندات المقياسين التي استُخدمت للتصميم هي مواد بيداغوجية مُعدة سابقًا، وليست بطاقة رسمية نهائية؛ **لا يجوز وصف المكتبة بأنها تغطي جميع الاختبارات المقررة رسميًا دون مقارنة ببطاقة التكوين المعتمدة**.
|
|
39
|
+
|
|
40
|
+
## 4. ملاحظات على التفسير
|
|
41
|
+
|
|
42
|
+
- `p_value < alpha` يعني رفض H0 في شروط الاختبار ولا يثبت الأهمية العملية أو السببية.
|
|
43
|
+
- الاختبارات المعلمية تفترض شروطًا متنوعة (استقلالية، اعتدالية أخطاء أو عينات، تجانس التباين حسب الاختبار).
|
|
44
|
+
- نماذج التنبؤ تستلزم فصل تدريب/اختبار؛ في البيانات الزمنية يفضّل التقسيم الزمني بدل التقسيم العشوائي.
|
|
45
|
+
- الأرقام الاصطناعية لا تثبت سلوك السوق الجزائري.
|