# Rasch Model Implementation
Rasch modeli asosida o'quvchilarni baholash tizimi. Bu loyiha o'quvchilarning imtihon natijalarini Rasch modeli yordamida tahlil qilish va baholash uchun mo'ljallangan.
## Xususiyatlar
- **Rasch modeli asosida baholash**: O'quvchilarning skill level (θ) ni hisoblash
- **Z-score va scaled score**: Standartlashtirilgan ballni hisoblash (0-100 oralig'ida)
- **Daraja belgilash**: A+, A, B+, B, C+, C, NC darajalarini avtomatik belgilash
- **Excel fayl bilan ishlash**: Excel fayllardan ma'lumotlarni o'qish va natijalarni eksport qilish
- **Statistik tahlil**: Natijalar bo'yicha batafsil statistika
- **Moslashuvchan konfiguratsiya**: Daraja chegaralarini o'zgartirish imkoniyati
## O'rnatish
### PyPI dan o'rnatish (tavsiya etiladi)
```bash
pip install rasch-pkg
```
### Repository dan o'rnatish
1. Repository ni klonlash:
```bash
git clone <repository-url>
cd rasch
```
2. Virtual muhit yaratish:
```bash
python3 -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
```
3. Bog'liqliklarni o'rnatish:
```bash
pip install -r requirements.txt
```
## Foydalanish
### 1. Asosiy misol (fayllar bilan)
```python
from rasch_pkg import RaschModel
# Rasch modeli obyektini yaratish
rasch = RaschModel()
# O'quvchi javoblari (1 - to'g'ri, 0 - noto'g'ri)
answers = [1, 1, 0, 1, 0, 1, 1, 0, 1, 1] # 10 ta savol
# O'quvchini baholash
result = rasch.process_student_answers(
student_id="001",
name="Ahmadov Ahmad",
answers=answers
)
print(f"Ball: {result.scaled_score:.2f}")
print(f"Daraja: {result.grade.value}")
```
### 2. PostgreSQL ma'lumotlar bazasi bilan ishlash
```python
from rasch_pkg import RaschEvaluator
# Database konfiguratsiyasi
db_config = DatabaseConfig(
host="localhost",
port=5432,
database="postgres",
username="postgres",
password="password"
)
# Context manager bilan ishlash
with DatabaseRaschProcessor(db_config) as processor:
# Barcha foydalanuvchilarni qayta ishlash
results = processor.process_all_users()
# Excel fayliga eksport qilish
excel_path = processor.export_to_excel(
results,
"matematika_test_natijalari.xlsx"
)
print(f"Natijalar {excel_path} fayliga saqlandi")
```
### Excel fayl bilan ishlash
```python
import pandas as pd
from src.rasch_model import RaschModel
# Excel faylni o'qish
df = pd.read_excel('exam_results.xlsx')
# Rasch modeli
rasch = RaschModel()
# Barcha o'quvchilarni baholash
results = rasch.process_multiple_students(df)
# Natijalarni eksport qilish
rasch.export_results(results, 'output_results.xlsx')
```
### Ko'p o'quvchilarni baholash
```python
# O'quvchilar ma'lumotlari
students_data = [
{
'id': '001',
'name': 'O\'quvchi 1',
'answers': [1, 1, 0, 1, 0, 1, 1, 0, 1, 1]
},
{
'id': '002',
'name': 'O\'quvchi 2',
'answers': [1, 0, 1, 1, 0, 0, 1, 1, 0, 1]
}
]
results = rasch.process_multiple_students(students_data)
# Statistika
stats = rasch.get_statistics(results)
print(f"O'rtacha ball: {stats['score_statistics']['mean']}")
```
## Daraja tizimi
| Daraja | Ball oralig'i | Tavsif |
|--------|---------------|---------|
| A+ | 70.0 - 100.0 | A'lo |
| A | 65.0 - 69.99 | A'lo |
| B+ | 60.0 - 64.99 | Yaxshi |
| B | 55.0 - 59.99 | Yaxshi |
| C+ | 50.0 - 54.99 | Qoniqarli |
| C | 46.0 - 49.99 | Qoniqarli |
| NC | 0.0 - 45.99 | Qoniqarsiz |
## Rasch modeli formulalari
1. **Theta (θ) hisoblash**:
```
θ = ln(p / (1-p))
```
Bu yerda p = to'g'ri javoblar nisbati
2. **Z-score hisoblash**:
```
Z = (θ - μ) / σ
```
3. **Scaled score hisoblash**:
```
Ball = 50 + 10 * Z
```
## Loyiha tuzilishi
```
rasch/
├── src/
│ ├── __init__.py
│ ├── rasch_model.py # Asosiy Rasch modeli klassi
│ └── database_rasch.py # PostgreSQL bilan ishlash klassi
├── tests/
│ ├── __init__.py
│ ├── test_rasch_model.py # Rasch modeli unit testlar
│ └── test_database_rasch.py # Database unit testlar
├── examples/
│ ├── rasch_example.py # Asosiy foydalanish misollari
│ ├── advanced_example.py # Qo'shimcha misollar
│ └── database_example.py # Database misollari
├── docs/
│ ├── rules.pdf # Rasch modeli qoidalari
│ └── exam_answers_example_*.xlsx # Misol Excel fayllari
├── output/ # Natijalar papkasi
├── requirements.txt # Python bog'liqliklar
├── README.md # Ushbu fayl
└── USAGE_GUIDE.md # Foydalanish qo'llanmasi
```
## Testlarni ishga tushirish
```bash
# Barcha testlar
python -m pytest tests/ -v
# Coverage bilan
python -m pytest tests/ --cov=src --cov-report=html
# Bitta test fayl
python -m unittest tests.test_rasch_model -v
```
## Misollarni ishga tushirish
```bash
# Asosiy misollar
python examples/rasch_example.py
# Qo'shimcha misollar
python examples/advanced_example.py
# Database misollari
python examples/database_example.py
# Alohida misollar
python -c "from examples.rasch_example import example_1_single_student; example_1_single_student()"
```
## API Hujjatlari
### RaschModel klassi
#### Konstruktor
```python
RaschModel(grade_thresholds=None, max_iterations=100, convergence_threshold=1e-6)
```
#### Asosiy metodlar
- `process_student_answers(student_id, name, answers)` - Bitta o'quvchini baholash
- `process_multiple_students(data)` - Ko'p o'quvchilarni baholash
- `get_statistics(results)` - Statistika hisoblash
- `export_results(results, filename)` - Natijalarni eksport qilish
#### Yordamchi metodlar
- `calculate_theta(correct_answers, total_questions)` - Theta hisoblash
- `calculate_z_score(theta, mu, sigma)` - Z-score hisoblash
- `calculate_scaled_score(z_score)` - Scaled score hisoblash
- `determine_grade(scaled_score)` - Daraja belgilash
### StudentResult dataclass
O'quvchi natijasi uchun ma'lumotlar strukturasi:
```python
@dataclass
class StudentResult:
student_id: str
name: str
answers: List[Union[int, float]]
correct_count: int
total_questions: int
raw_score: float
theta: float
mu: float
sigma: float
z_score: float
scaled_score: float
grade: GradeLevel
```
## Konfiguratsiya
### Maxsus daraja chegaralari
```python
custom_thresholds = {
'NC': (0.0, 39.99),
'C': (40.0, 49.99),
'C+': (50.0, 59.99),
'B': (60.0, 69.99),
'B+': (70.0, 79.99),
'A': (80.0, 89.99),
'A+': (90.0, 100.0)
}
rasch = RaschModel(grade_thresholds=custom_thresholds)
```
## Xatoliklar va yechimlar
### Keng uchraydigan xatoliklar
1. **Excel fayl topilmadi**
- Fayl yo'lini tekshiring
- Fayl mavjudligini tasdiqlang
2. **Noto'g'ri javob formati**
- Javoblar 0 yoki 1 bo'lishi kerak
- Boshqa qiymatlar avtomatik 0 ga aylantiriladi
3. **Bo'sh ma'lumotlar**
- Kamida bitta javob bo'lishi kerak
- Bo'sh ro'yxatlar xatolikka olib keladi
## Hissa qo'shish
1. Fork qiling
2. Feature branch yarating (`git checkout -b feature/yangi-xususiyat`)
3. O'zgarishlarni commit qiling (`git commit -am 'Yangi xususiyat qo'shildi'`)
4. Branch ni push qiling (`git push origin feature/yangi-xususiyat`)
5. Pull Request yarating
## Litsenziya
MIT License
## Muallif
Rasch modeli implementatsiyasi - O'zbekiston Milliy Universiteti
Raw data
{
"_id": null,
"home_page": null,
"name": "rasch-pkg",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": "Muhammad Ali <muhammadali@example.com>",
"keywords": "rasch-model, student-assessment, educational-measurement, psychometrics, item-response-theory, uzbekistan, education",
"author": null,
"author_email": "Muhammad Ali <muhammadali@example.com>",
"download_url": "https://files.pythonhosted.org/packages/52/77/71af1f9fbd1b175a69fd6aae15ad5b79835ac89e1efce0a2a283d90f0f91/rasch_pkg-1.0.1.tar.gz",
"platform": null,
"description": "# Rasch Model Implementation\n\nRasch modeli asosida o'quvchilarni baholash tizimi. Bu loyiha o'quvchilarning imtihon natijalarini Rasch modeli yordamida tahlil qilish va baholash uchun mo'ljallangan.\n\n## Xususiyatlar\n\n- **Rasch modeli asosida baholash**: O'quvchilarning skill level (\u03b8) ni hisoblash\n- **Z-score va scaled score**: Standartlashtirilgan ballni hisoblash (0-100 oralig'ida)\n- **Daraja belgilash**: A+, A, B+, B, C+, C, NC darajalarini avtomatik belgilash\n- **Excel fayl bilan ishlash**: Excel fayllardan ma'lumotlarni o'qish va natijalarni eksport qilish\n- **Statistik tahlil**: Natijalar bo'yicha batafsil statistika\n- **Moslashuvchan konfiguratsiya**: Daraja chegaralarini o'zgartirish imkoniyati\n\n## O'rnatish\n\n### PyPI dan o'rnatish (tavsiya etiladi)\n\n```bash\npip install rasch-pkg\n```\n\n### Repository dan o'rnatish\n\n1. Repository ni klonlash:\n```bash\ngit clone <repository-url>\ncd rasch\n```\n\n2. Virtual muhit yaratish:\n```bash\npython3 -m venv .venv\nsource .venv/bin/activate # Windows: .venv\\Scripts\\activate\n```\n\n3. Bog'liqliklarni o'rnatish:\n```bash\npip install -r requirements.txt\n```\n\n## Foydalanish\n\n### 1. Asosiy misol (fayllar bilan)\n\n```python\nfrom rasch_pkg import RaschModel\n\n# Rasch modeli obyektini yaratish\nrasch = RaschModel()\n\n# O'quvchi javoblari (1 - to'g'ri, 0 - noto'g'ri)\nanswers = [1, 1, 0, 1, 0, 1, 1, 0, 1, 1] # 10 ta savol\n\n# O'quvchini baholash\nresult = rasch.process_student_answers(\n student_id=\"001\",\n name=\"Ahmadov Ahmad\",\n answers=answers\n)\n\nprint(f\"Ball: {result.scaled_score:.2f}\")\nprint(f\"Daraja: {result.grade.value}\")\n```\n\n### 2. PostgreSQL ma'lumotlar bazasi bilan ishlash\n\n```python\nfrom rasch_pkg import RaschEvaluator\n\n# Database konfiguratsiyasi\ndb_config = DatabaseConfig(\n host=\"localhost\",\n port=5432,\n database=\"postgres\",\n username=\"postgres\",\n password=\"password\"\n)\n\n# Context manager bilan ishlash\nwith DatabaseRaschProcessor(db_config) as processor:\n # Barcha foydalanuvchilarni qayta ishlash\n results = processor.process_all_users()\n\n # Excel fayliga eksport qilish\n excel_path = processor.export_to_excel(\n results,\n \"matematika_test_natijalari.xlsx\"\n )\n\n print(f\"Natijalar {excel_path} fayliga saqlandi\")\n```\n\n### Excel fayl bilan ishlash\n\n```python\nimport pandas as pd\nfrom src.rasch_model import RaschModel\n\n# Excel faylni o'qish\ndf = pd.read_excel('exam_results.xlsx')\n\n# Rasch modeli\nrasch = RaschModel()\n\n# Barcha o'quvchilarni baholash\nresults = rasch.process_multiple_students(df)\n\n# Natijalarni eksport qilish\nrasch.export_results(results, 'output_results.xlsx')\n```\n\n### Ko'p o'quvchilarni baholash\n\n```python\n# O'quvchilar ma'lumotlari\nstudents_data = [\n {\n 'id': '001',\n 'name': 'O\\'quvchi 1',\n 'answers': [1, 1, 0, 1, 0, 1, 1, 0, 1, 1]\n },\n {\n 'id': '002', \n 'name': 'O\\'quvchi 2',\n 'answers': [1, 0, 1, 1, 0, 0, 1, 1, 0, 1]\n }\n]\n\nresults = rasch.process_multiple_students(students_data)\n\n# Statistika\nstats = rasch.get_statistics(results)\nprint(f\"O'rtacha ball: {stats['score_statistics']['mean']}\")\n```\n\n## Daraja tizimi\n\n| Daraja | Ball oralig'i | Tavsif |\n|--------|---------------|---------|\n| A+ | 70.0 - 100.0 | A'lo |\n| A | 65.0 - 69.99 | A'lo |\n| B+ | 60.0 - 64.99 | Yaxshi |\n| B | 55.0 - 59.99 | Yaxshi |\n| C+ | 50.0 - 54.99 | Qoniqarli |\n| C | 46.0 - 49.99 | Qoniqarli |\n| NC | 0.0 - 45.99 | Qoniqarsiz |\n\n## Rasch modeli formulalari\n\n1. **Theta (\u03b8) hisoblash**:\n ```\n \u03b8 = ln(p / (1-p))\n ```\n Bu yerda p = to'g'ri javoblar nisbati\n\n2. **Z-score hisoblash**:\n ```\n Z = (\u03b8 - \u03bc) / \u03c3\n ```\n\n3. **Scaled score hisoblash**:\n ```\n Ball = 50 + 10 * Z\n ```\n\n## Loyiha tuzilishi\n\n```\nrasch/\n\u251c\u2500\u2500 src/\n\u2502 \u251c\u2500\u2500 __init__.py\n\u2502 \u251c\u2500\u2500 rasch_model.py # Asosiy Rasch modeli klassi\n\u2502 \u2514\u2500\u2500 database_rasch.py # PostgreSQL bilan ishlash klassi\n\u251c\u2500\u2500 tests/\n\u2502 \u251c\u2500\u2500 __init__.py\n\u2502 \u251c\u2500\u2500 test_rasch_model.py # Rasch modeli unit testlar\n\u2502 \u2514\u2500\u2500 test_database_rasch.py # Database unit testlar\n\u251c\u2500\u2500 examples/\n\u2502 \u251c\u2500\u2500 rasch_example.py # Asosiy foydalanish misollari\n\u2502 \u251c\u2500\u2500 advanced_example.py # Qo'shimcha misollar\n\u2502 \u2514\u2500\u2500 database_example.py # Database misollari\n\u251c\u2500\u2500 docs/\n\u2502 \u251c\u2500\u2500 rules.pdf # Rasch modeli qoidalari\n\u2502 \u2514\u2500\u2500 exam_answers_example_*.xlsx # Misol Excel fayllari\n\u251c\u2500\u2500 output/ # Natijalar papkasi\n\u251c\u2500\u2500 requirements.txt # Python bog'liqliklar\n\u251c\u2500\u2500 README.md # Ushbu fayl\n\u2514\u2500\u2500 USAGE_GUIDE.md # Foydalanish qo'llanmasi\n```\n\n## Testlarni ishga tushirish\n\n```bash\n# Barcha testlar\npython -m pytest tests/ -v\n\n# Coverage bilan\npython -m pytest tests/ --cov=src --cov-report=html\n\n# Bitta test fayl\npython -m unittest tests.test_rasch_model -v\n```\n\n## Misollarni ishga tushirish\n\n```bash\n# Asosiy misollar\npython examples/rasch_example.py\n\n# Qo'shimcha misollar\npython examples/advanced_example.py\n\n# Database misollari\npython examples/database_example.py\n\n# Alohida misollar\npython -c \"from examples.rasch_example import example_1_single_student; example_1_single_student()\"\n```\n\n## API Hujjatlari\n\n### RaschModel klassi\n\n#### Konstruktor\n```python\nRaschModel(grade_thresholds=None, max_iterations=100, convergence_threshold=1e-6)\n```\n\n#### Asosiy metodlar\n\n- `process_student_answers(student_id, name, answers)` - Bitta o'quvchini baholash\n- `process_multiple_students(data)` - Ko'p o'quvchilarni baholash \n- `get_statistics(results)` - Statistika hisoblash\n- `export_results(results, filename)` - Natijalarni eksport qilish\n\n#### Yordamchi metodlar\n\n- `calculate_theta(correct_answers, total_questions)` - Theta hisoblash\n- `calculate_z_score(theta, mu, sigma)` - Z-score hisoblash\n- `calculate_scaled_score(z_score)` - Scaled score hisoblash\n- `determine_grade(scaled_score)` - Daraja belgilash\n\n### StudentResult dataclass\n\nO'quvchi natijasi uchun ma'lumotlar strukturasi:\n\n```python\n@dataclass\nclass StudentResult:\n student_id: str\n name: str\n answers: List[Union[int, float]]\n correct_count: int\n total_questions: int\n raw_score: float\n theta: float\n mu: float\n sigma: float\n z_score: float\n scaled_score: float\n grade: GradeLevel\n```\n\n## Konfiguratsiya\n\n### Maxsus daraja chegaralari\n\n```python\ncustom_thresholds = {\n 'NC': (0.0, 39.99),\n 'C': (40.0, 49.99),\n 'C+': (50.0, 59.99),\n 'B': (60.0, 69.99),\n 'B+': (70.0, 79.99),\n 'A': (80.0, 89.99),\n 'A+': (90.0, 100.0)\n}\n\nrasch = RaschModel(grade_thresholds=custom_thresholds)\n```\n\n## Xatoliklar va yechimlar\n\n### Keng uchraydigan xatoliklar\n\n1. **Excel fayl topilmadi**\n - Fayl yo'lini tekshiring\n - Fayl mavjudligini tasdiqlang\n\n2. **Noto'g'ri javob formati**\n - Javoblar 0 yoki 1 bo'lishi kerak\n - Boshqa qiymatlar avtomatik 0 ga aylantiriladi\n\n3. **Bo'sh ma'lumotlar**\n - Kamida bitta javob bo'lishi kerak\n - Bo'sh ro'yxatlar xatolikka olib keladi\n\n## Hissa qo'shish\n\n1. Fork qiling\n2. Feature branch yarating (`git checkout -b feature/yangi-xususiyat`)\n3. O'zgarishlarni commit qiling (`git commit -am 'Yangi xususiyat qo'shildi'`)\n4. Branch ni push qiling (`git push origin feature/yangi-xususiyat`)\n5. Pull Request yarating\n\n## Litsenziya\n\nMIT License\n\n## Muallif\n\nRasch modeli implementatsiyasi - O'zbekiston Milliy Universiteti\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Rasch modeli asosida o'quvchilarni baholash tizimi - Student assessment system based on Rasch model",
"version": "1.0.1",
"project_urls": {
"Bug Tracker": "https://github.com/muhammadali/rasch-pkg/issues",
"Documentation": "https://github.com/muhammadali/rasch-pkg#readme",
"Homepage": "https://github.com/muhammadali/rasch-pkg",
"Repository": "https://github.com/muhammadali/rasch-pkg.git"
},
"split_keywords": [
"rasch-model",
" student-assessment",
" educational-measurement",
" psychometrics",
" item-response-theory",
" uzbekistan",
" education"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "bedb678e6086b33aba9d2c28ea4c2c94ee115ebfbc597f6b9bf4306c251cc95c",
"md5": "9ee50f7d0b19cc337bf953142b48b93d",
"sha256": "e211ee3d51bfdeb61383140786354d25724f2bb30e8854e981d905d556b60550"
},
"downloads": -1,
"filename": "rasch_pkg-1.0.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "9ee50f7d0b19cc337bf953142b48b93d",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 13930,
"upload_time": "2025-08-04T06:34:26",
"upload_time_iso_8601": "2025-08-04T06:34:26.439954Z",
"url": "https://files.pythonhosted.org/packages/be/db/678e6086b33aba9d2c28ea4c2c94ee115ebfbc597f6b9bf4306c251cc95c/rasch_pkg-1.0.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "527771af1f9fbd1b175a69fd6aae15ad5b79835ac89e1efce0a2a283d90f0f91",
"md5": "bd2bf967fa5c50a85e1348b5e4fdebb7",
"sha256": "6005b9179b50d86c7bc487c3498ae882844ae65ad71e7cd0fd55c524e1e1acaa"
},
"downloads": -1,
"filename": "rasch_pkg-1.0.1.tar.gz",
"has_sig": false,
"md5_digest": "bd2bf967fa5c50a85e1348b5e4fdebb7",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 17795,
"upload_time": "2025-08-04T06:34:27",
"upload_time_iso_8601": "2025-08-04T06:34:27.738720Z",
"url": "https://files.pythonhosted.org/packages/52/77/71af1f9fbd1b175a69fd6aae15ad5b79835ac89e1efce0a2a283d90f0f91/rasch_pkg-1.0.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-08-04 06:34:27",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "muhammadali",
"github_project": "rasch-pkg",
"github_not_found": true,
"lcname": "rasch-pkg"
}