# تحميل

يمكن تخزين بياناتك في أماكن مختلفة؛ فقد تكون على قرص جهازك المحلي، أو في مستودع Github، أو في هياكل بيانات في الذاكرة مثل قواميس Python وأطارات بيانات Pandas. أينما كان موقع مجموعة البيانات، يمكن لـ 🤗 Datasets مساعدتك في تحميلها.

ستُظهر لك هذه الدليل كيفية تحميل مجموعة بيانات من:

- مركز هافينغ فاس
- الملفات المحلية
- البيانات في الذاكرة
- دون اتصال
- شريحة محددة من تقسيم

لمزيد من التفاصيل الخاصة بتحميل أنماط بيانات أخرى، راجد دليل تحميل مجموعة بيانات الصوت، ودليل تحميل مجموعة بيانات الصور، ودليل تحميل مجموعة بيانات الفيديو، ودليل تحميل مجموعة بيانات الشبكات، ودليل تحميل مجموعة بيانات النص، أو دليل مهام تقييم الوكلاء.

## Hugging Face Hub

يمكنك أيضًا تحميل مجموعة بيانات من أي مستودع مجموعات بيانات على الـ Hub! ابدأ بـ [إنشاء مستودع مجموعة بيانات](share#create-the-repository) ثم ارفع ملفات بياناتك. الآن يمكنك استخدام دالة [load_dataset()](/docs/datasets/v5.2.0/ar/package_reference/loading_methods#datasets.load_dataset) لتحميل مجموعة البيانات.

على سبيل المثال، جرّب تحميل الملفات من [مستودع العرض](https://huggingface.co/datasets/lhoestq/demo1) هذا عن طريق تقديم مساحة أسماء المستودع واسم مجموعة البيانات. يحتوي مستودع مجموعة البيانات هذا على ملفات CSV، ويحمّل الكود أدناه مجموعة البيانات من ملفات CSV:

```py
>>> from datasets import load_dataset
>>> dataset = load_dataset("lhoestq/demo1")
```

قد تحتوي بعض مجموعات البيانات على أكثر من إصدار بناءً على وسوم Git أو الفروع أو الالتزامات. استخدم معامل `revision` لتحديد إصدار مجموعة البيانات الذي تريد تحميله:

```py
>>> dataset = load_dataset(
...   "lhoestq/custom_squad",
...   revision="main"  # tag name, or branch name, or commit hash
... )
```

> [!TIP]
> راجع شرح [رفع مجموعة بيانات إلى Hub](./upload_dataset) لمزيد من التفاصيل حول كيفية إنشاء مستودع مجموعة بيانات على Hub، وكيفية رفع ملفات البيانات الخاصة بك.

تُحمّل مجموعة البيانات افتراضيًا جميع البيانات إلى الجزء `train`، أو تبحث عن ذكر أسماء الأجزاء في أسماء ملفات البيانات (مثل "train" و"test" و"validation"). استخدم معامل `data_files` لربط ملفات البيانات بالأجزاء مثل `train` و`validation` و`test`:

```py
>>> data_files = {"train": "train.csv", "test": "test.csv"}
>>> dataset = load_dataset("namespace/your_dataset_name", data_files=data_files)
```

> [!WARNING]
> إذا لم تحدد ملفات البيانات التي تريد استخدامها، فسيُرجع [load_dataset()](/docs/datasets/v5.2.0/ar/package_reference/loading_methods#datasets.load_dataset) جميع ملفات البيانات. وقد يستغرق ذلك وقتاً طويلاً إذا قمت بتحميل مجموعة بيانات كبيرة مثل C4، والتي تحتوي على ما يقرب من 13 تيرابايت من البيانات.

يمكنك أيضًا تحميل مجموعة فرعية محددة من الملفات باستخدام معامل `data_files` أو `data_dir`. يمكن لهذه المعاملات قبول مسار نسبي يُحل إلى المسار الأساسي المقابل للمكان الذي يُحمَّل منه مجموعة البيانات.

```py
>>> from datasets import load_dataset

# load files that match the grep pattern
>>> c4_subset = load_dataset("allenai/c4", data_files="en/c4-train.0000*-of-01024.json.gz")

# load dataset from the en directory on the Hub
>>> c4_subset = load_dataset("allenai/c4", data_dir="en")
```

يمكن أيضًا لمعامل `split` تعيين ملف بيانات إلى قسم محدد:

```py
>>> data_files = {"validation": "en/c4-validation.*.json.gz"}
>>> c4_validation = load_dataset("allenai/c4", data_files=data_files, split="validation")
```

## الملفات المحلية والبعيدة

يمكن تحميل مجموعات البيانات من ملفات محلية مخزنة على حاسوبك ومن ملفات عن بُعد. غالبًا ما تُخزَّن مجموعات البيانات كملف `csv` أو `json` أو `txt` أو `parquet` أو `tsfile`. ويمكن لدالة [load_dataset()](/docs/datasets/v5.2.0/ar/package_reference/loading_methods#datasets.load_dataset) تحميل كلٍّ من هذه الأنواع من الملفات.

### CSV

🤗 يمكن لـ Datasets قراءة مجموعة بيانات تتكون من ملف CSV واحد أو عدة ملفات (في هذه الحالة، مرر ملفات CSV الخاصة بك كقائمة):

```py
>>> from datasets import load_dataset
>>> dataset = load_dataset("csv", data_files="my_file.csv")
```

> [!TIP]
> لمزيد من التفاصيل، راجد دليل [كيفية تحميل مجموعات البيانات الجدولية من ملفات CSV](tabular_load#csv-files).

### JSON

تُحمَّل ملفات JSON مباشرةً باستخدام [load_dataset()](/docs/datasets/v5.2.0/ar/package_reference/loading_methods#datasets.load_dataset) كما هو موضح أدناه:

```py
>>> from datasets import load_dataset
>>> dataset = load_dataset("json", data_files="my_file.json")
```

تتميز ملفات JSON بتنسيقات متنوعة، لكننا نعتقد أن الأكثر كفاءة هو تضمين كائنات JSON متعددة؛ حيث يمثل كل سطر صفًا فرديًا من البيانات. على سبيل المثال:

```json
{"a": 1, "b": 2.0, "c": "foo", "d": false}
{"a": 4, "b": -5.5, "c": null, "d": true}
```

تنسيق JSON آخر قد تواجهه هو الحقل المتداخل، وفي هذه الحالة ستحتاج إلى تحديد معامل `field` كما هو موضح فيما يلي:

```py
{"version": "0.1.0",
 "data": [{"a": 1, "b": 2.0, "c": "foo", "d": false},
          {"a": 4, "b": -5.5, "c": null, "d": true}]
}

>>> from datasets import load_dataset
>>> dataset = load_dataset("json", data_files="my_file.json", field="data")
```

لتحميل ملفات JSON عن بُعد عبر HTTP، مرر عناوين URL بدلاً من ذلك:

```py
>>> base_url = "https://rajpurkar.github.io/SQuAD-explorer/dataset/"
>>> dataset = load_dataset("json", data_files={"train": base_url + "train-v1.1.json", "validation": base_url + "dev-v1.1.json"}, field="data")
```

على الرغم من أن هذه هي أكثر صيغ JSON شيوعًا، إلا أنك ستجد مجموعات بيانات أخرى مُنسّقة بشكل مختلف. يتعرّف 🤗 Datasets على هذه الصيغ الأخرى ويعتمد تلقائيًا على طرق تحميل JSON في Python للتعامل معها.

### Parquet

تُخزَّن ملفات Parquet في تنسيق أعمدة، على عكس الملفات القائمة على الصفوف مثل CSV. قد تُخزَّن مجموعات البيانات الكبيرة في ملف Parquet لأنه أكثر كفاءة وسرعة في إرجاع استعلامك.

لتحميل ملف Parquet:

```py
>>> from datasets import load_dataset
>>> dataset = load_dataset("parquet", data_files={'train': 'train.parquet', 'test': 'test.parquet'})
```

لتحميل ملفات Parquet عن بُعد عبر HTTP، مرر عناوين URL بدلاً من ذلك:

```py
>>> base_url = "https://huggingface.co/datasets/wikimedia/wikipedia/resolve/main/20231101.ab/"
>>> data_files = {"train": base_url + "train-00000-of-00001.parquet"}
>>> wiki = load_dataset("parquet", data_files=data_files, split="train")
```

### Arrow

تُخزَّن ملفات Arrow في تنسيق أعمدة في الذاكرة، على عكس التنسيقات القائمة على الصفوف مثل CSV والتنسيقات غير المضغوطة مثل Parquet.

لتحميل ملف Arrow:

```py
>>> from datasets import load_dataset
>>> dataset = load_dataset("arrow", data_files={'train': 'train.arrow', 'test': 'test.arrow'})
```

لتحميل ملفات Arrow عن بُعد عبر HTTP، مرر عناوين URL بدلاً من ذلك:

```py
>>> base_url = "https://huggingface.co/datasets/croissantllm/croissant_dataset/resolve/main/english_660B_11/"
>>> data_files = {"train": base_url + "train/data-00000-of-00080.arrow"}
>>> wiki = load_dataset("arrow", data_files=data_files, split="train")
```

Arrow is the file format used by 🤗 Datasets under the hood, therefore you can load a local Arrow file using [Dataset.from_file()](/docs/datasets/v5.2.0/ar/package_reference/main_classes#datasets.Dataset.from_file) directly:

```py
>>> from datasets import Dataset
>>> dataset = Dataset.from_file("data.arrow")
```

على عكس [load_dataset()](/docs/datasets/v5.2.0/ar/package_reference/loading_methods#datasets.load_dataset)، يقوم [Dataset.from_file()](/docs/datasets/v5.2.0/ar/package_reference/main_classes#datasets.Dataset.from_file) بتعيين ذاكرة (memory mapping) لملف Arrow دون إعداد مجموعة البيانات في ذاكرة التخزين المؤقت، مما يوفر لك مساحة القرص. في هذه الحالة، ستكون مجلد التخزين المؤقت لتخزين نتائج المعالجة الوسيطة هو مجلد ملف Arrow.

حاليًا، يُدعم فقط تنسيق Arrow للبث. ولا يُدعم تنسيق ملفات Arrow IPC (المعروف أيضًا باسم Feather V2).

### Lance

[Lance](https://lance.org) هو تنسيق جداول مفتوح المصدر متعدد الوسائط لخزانات البيانات (lakehouse) مخصص للذكاء الاصطناعي. يمكن لجداول Lance تخزين القيم النصية والقياسية بشكل أصلي، بالإضافة إلى الكائنات الثنائية الكبيرة (blobs) مثل الصور والصوت والفيديو، جنبًا إلى جنب مع بياناتك الجدولية.

```py
>>> from datasets import load_dataset
>>> lance_base_url = "lance-format/laion-1m"
```

لتبثّ مجموعة البيانات دون نسخها إلى جهازك المحلي، حدّد معامل `streaming=True`:

```py
ds = load_dataset(lance_base_url, split="train", streaming=True)
# Take first three rows
for row in ds.take(3):
    print(row["caption"], row["image"])
```

سيُعيد هذا وصف الصورة وبيانات الصورة في طلب واحد.

### Vortex

[Vortex](https://docs.vortex.dev) هو تنسيق ملفات عمودي مصمم للعمليات المسحية السريعة على البيانات المضغوطة. ثبّته باستخدام `pip install vortex-data`، ثم حمّل ملفات `.vortex` كما تفعل مع أي تنسيق آخر:

```py
>>> from datasets import load_dataset
>>> dataset = load_dataset("vortex", data_files="data.vortex", split="train")
```

تُمرَّر الأعمدة والفلاتر إلى مسح Vortex، بحيث تُقرأ الصفوف والأعمدة المطلوبة فقط. ويعمل هذا أثناء البث أيضًا، مما يتيح لك تصفية مجموعة بيانات على Hub دون تنزيل الأجزاء التي لا تطابق المعايير:

```py
>>> filters = [("label", "==", 1)]
>>> dataset = load_dataset(vortex_dataset_id, columns=["text", "label"], filters=filters, streaming=True, split="train")
```

تتّبع المرشِّحات نفس الشكل الطبيعي المنفصل (disjunctive normal form) الذي يتّبعه مُحمِّل Parquet: قائمة من الشروط `(column, operator, value)` تُشكِّل عطفًا (conjunction)، وقائمة من تلك القوائم تُشكِّل فصلًا (disjunction). تتّبع القيم الفارغة (Nulls) دلالات SQL — فالقيمة الفارغة لا تُحقِّق أي مقارنة، لذا لن تُعاد أبدًا أي صف تكون قيمته في العمود المُرشَّح فارغة، بما في ذلك عند استخدام `not in`. لأي شيء لا يمكن التعبير عنه بهذا الشكل، مرِّر تعبير Vortex بدلاً من ذلك:

```py
>>> import vortex.expr as ve
>>> dataset = load_dataset(vortex_dataset_id, filters=ve.column("score") >= 0.5, split="train")
```

يفتح Vortex الملفات بنفسه بدلاً من المرور عبر fsspec، لذا يمكن أن يشير `data_files` إلى مسارات محلية، ومجموعات بيانات Hub، والمواقع البعيدة التي يقرأها Vortex بشكل أصلي (HTTP ومخازن الكائنات الشائعة) — لكن ليس داخل الأرشيفات (`zip://...`) أو بروتوكولات fsspec الحصرية الأخرى.

### ملفات HDF5

تُستخدم ملفات [HDF5](https://www.hdfgroup.org/solutions/hdf5/) بشكل شائع لتخزين كميات كبيرة من البيانات الرقمية في الحوسبة العلمية وتعلم الآلة. يشبه تحميل ملفات HDF5 باستخدام 🤗 Datasets تحميل ملفات CSV:

```py
>>> from datasets import load_dataset
>>> dataset = load_dataset("hdf5", data_files="data.h5")
```

لاحظ أن محمّل HDF5 يفترض أن الملف له بنية "جدولية"، أي أن جميع مجموعات البيانات في الملف تحتوي على (نفس عدد) الصفوف في بُعدها الأول.

### TsFile

[TsFile](https://tsfile.apache.org/) هو تنسيق ملفات عمودي مصمم لبيانات السلاسل الزمنية، ويُستخدم كطبقة تخزين أصلية في [Apache IoTDB](https://iotdb.apache.org/). يمثل بشكل أصلي الطوابع الزمنية، ووسوم الأجهزة، ومجالات القياس، ويحافظ على فهرس زمني داخلي يتيح تقليم نطاقات الوقت بكفاءة.

تتوافق كل صف في مجموعة البيانات الناتجة مع **جهاز** واحد (يُعرَّف بأعمدة TAG الخاصة به)؛ وعمود `time` وكل عمود FIELD هو عمود قائمة يحتوي على سلسلة زمنية كاملة لذلك الجهاز، مرتبة بترتيب تصاعدي زمني.

لتحميل ملف TsFile:

```py
>>> from datasets import load_dataset
>>> dataset = load_dataset("tsfile", data_files="my_data.tsfile")
```

التصفية حسب نطاق زمني — تُدفع الحدود إلى فهرس الوقت الداخلي في TsFile وتقبل `int` epochs، و`datetime`، و`date`، وسلاسل ISO-601، أو قيم `pyarrow` timestamp:

```py
>>> from datetime import datetime
>>> dataset = load_dataset(
...     "tsfile",
...     data_files="my_data.tsfile",
...     start_time=datetime(2023, 11, 14),
...     end_time=datetime(2023, 11, 15),
... )
```

> [!TIP]
> لمزيد من التفاصيل، راجد دليل [كيفية تحميل بيانات TsFile](tsfile_load).

### Harbor

مجموعات بيانات [Harbor](https://harborframework.com/docs) هي مجموعات من *المهام* تُستخدم لتقييم وكلاء الذكاء الاصطناعي. تتكون من مجلدات بدلاً من ملفات البيانات: كل مهمة هي مجلد يحتوي على ملف إعدادات `task.toml` وملف `instruction.md`، بالإضافة إلى بيئتها ومُتحققها وحلّها.

تصف كل صف في مجموعة البيانات الناتجة مهمة واحدة (تعليماتها، وملف `task.toml` الخاص بها، والملفات المرفقة بها)، ولا يؤدي تحميلها إلى تشغيل أي شيء:

```py
>>> from datasets import load_dataset
>>> dataset = load_dataset("harborframework/terminal-bench")
>>> dataset["train"][0]["task_id"]
'tasks/atrx-vep-crispr'
```

> [!TIP]
> لمزيد من التفاصيل، راجد دليل [كيفية تحميل مهام تقييم الوكلاء](harbor_load).

### PDB

[PDB](https://www.wwpdb.org/documentation/file-format) (Protein Data Bank) هو التنسيق القديم ذو العرض الثابت لتمثيل الهياكل ثلاثية الأبعاد للماكرو جزيئات. وعلى الرغم من أن mmCIF هو المعيار الحديث، إلا أن PDB لا يزال مستخدماً على نطاق واسع، والعديد من مجموعات البيانات التاريخية موجودة بهذا التنسيق.

كل صف يمثل ملف بنية واحدًا، ويتبع نفس تخطيط المجلدات كما في `ImageFolder`: حيث تصبح أسماء المجلدات الفرعية تسميات، ويضيف ملف `metadata.csv`/`metadata.jsonl` بيانات وصفية لكل بنية. يستخدم عمود `structure` [BioStructure](/docs/datasets/v5.2.0/ar/package_reference/main_classes#datasets.BioStructure) مع `format="pdb"` ويُفكّك إلى كائن `Bio.PDB.Structure.Structure` يحتوي على نماذج الملف وسلاسله ومخلفاته وذراته. يتطلب فك الترميز `biopython`؛ وبدونه، يؤدي الوصول إلى بنية مفكوكة الترميز إلى رفع `ImportError`.

لتحميل ملفات PDB من مجلد:

```py
>>> from datasets import BioStructure, load_dataset
>>> dataset = load_dataset("pdb", data_dir="path/to/structures")
>>> dataset["train"].features["structure"]
BioStructure(format='pdb', decode=True)
```

للوصول إلى قاموس `{"bytes": ..., "path": ...}` الأساسي دون فك الترميز أو الحاجة إلى biopython، قم بتحويل العمود باستخدام `decode=False`:

```py
>>> dataset = dataset.cast_column("structure", BioStructure(format="pdb", decode=False))
```

تُدعَم الامتدادات `.pdb` و`.ent`.

### SQL

اقرأ محتوى قاعدة البيانات باستخدام [from_sql()](/docs/datasets/v5.2.0/ar/package_reference/main_classes#datasets.Dataset.from_sql) عن طريق تحديد URI للاتصال بقاعدة بياناتك. يمكنك قراءة أسماء الجداول والاستعلامات على حد سواء:

```py
>>> from datasets import Dataset
# load entire table
>>> dataset = Dataset.from_sql("data_table_name", con="sqlite:///sqlite_file.db")
# load from query
>>> dataset = Dataset.from_sql("SELECT text FROM table WHERE length(text) > 100 LIMIT 10", con="sqlite:///sqlite_file.db")
```

> [!TIP]
> لمزيد من التفاصيل، راجد دليل [كيفية تحميل مجموعات البيانات الجدولية من قواعد بيانات SQL](tabular_load#databases).

### WebDataset

يعتمد تنسيق [WebDataset](https://github.com/webdataset/webdataset) على أرشيفات TAR وهو مناسب لمجموعات بيانات الصور الكبيرة. ونظراً لحجمها، يتم تحميل WebDatasets عادةً في وضع البث (باستخدام `streaming=True`).

يمكنك تحميل WebDataset على النحو التالي:

```python
>>> from datasets import load_dataset
>>>
>>> path = "path/to/train/*.tar"
>>> dataset = load_dataset("webdataset", data_files={"train": path}, split="train", streaming=True)
```

لتحميل مجموعات بيانات ويب عن بُعد عبر HTTP، مرر عناوين URL بدلاً من ذلك:

```python
>>> from datasets import load_dataset
>>>
>>> base_url = "https://huggingface.co/datasets/lhoestq/small-publaynet-wds/resolve/main/publaynet-train-{i:06d}.tar"
>>> urls = [base_url.format(i=i) for i in range(4)]
>>> dataset = load_dataset("webdataset", data_files={"train": urls}, split="train", streaming=True)
```

### mmCIF

[mmCIF](https://mmcif.wwpdb.org/) (ملف معلومات البلورات الجزيئية الكبيرة) هو المعيار الحديث لتمثيل البنى الجزيئية الكبيرة ثلاثية الأبعاد، وتستخدمه بنك بيانات البروتين (PDB) منذ عام 2014.

كل صف يمثل ملف بنية واحدًا، ويتبع نفس تخطيط المجلدات كما في `ImageFolder`: حيث تصبح أسماء المجلدات الفرعية تسميات، ويضيف ملف `metadata.csv`/`metadata.jsonl` بيانات وصفية لكل بنية. يستخدم عمود `structure` [BioStructure](/docs/datasets/v5.2.0/ar/package_reference/main_classes#datasets.BioStructure) مع `format="mmcif"` ويُفكّك إلى كائن `Bio.PDB.Structure.Structure` يحتوي على نماذج الملف وسلاسله ومخلفاته وذراته. يتطلب فك الترميز `biopython`؛ وبدونه، يؤدي الوصول إلى بنية مفكوكة الترميز إلى رفع `ImportError`.

لتحميل ملفات mmCIF من مجلد:

```py
>>> from datasets import BioStructure, load_dataset
>>> dataset = load_dataset("mmcif", data_dir="path/to/structures")
>>> dataset["train"].features["structure"]
BioStructure(format='mmcif', decode=True)
```

للوصول إلى قاموس `{"bytes": ..., "path": ...}` الأساسي دون فك الترميز أو الحاجة إلى biopython، قم بتحويل العمود باستخدام `decode=False`:

```py
>>> dataset = dataset.cast_column("structure", BioStructure(format="mmcif", decode=False))
```

تُدعَم الامتدادات `.cif` و`.mmcif`.

### GenBank

[GenBank](https://www.ncbi.nlm.nih.gov/genbank/) هو تنسيق نصي من NCBI لتسلسلات النيوكليوتيدات والبروتينات معًا مع تعليقاتها. تستخدم الملفات الامتداد `.gb` أو `.gbk` أو `.genbank` (مع إمكانية الضغط اختياريًا)، ويتم فك تشفير قسم `FEATURES` لكل سجل إلى كائنات منظمة.

إلى جانب الأعمدة المُحلَّلة خفيفة الوزن، تتضمن كل صف عمود `record` من النوع `BioSequence(format="genbank")`، والذي يُفكَّك إلى `Bio.SeqRecord.SeqRecord` عند تثبيت `biopython`. قم بتحويل هذا العمود إلى `BioSequence(format="genbank", decode=False)` للوصول إلى بايتات السجل الأصلية على شكل `{"bytes": ..., "path": None}`، أو احذفه باستخدام `columns=[...]` لاستخدام الأعمدة المُحلَّلة فقط دون `biopython`.

لتحميل ملفات GenBank:

```py
>>> from datasets import load_dataset
>>> dataset = load_dataset("genbank", data_files="*.gb", split="train")
```

يمكنك تجربتها على مجموعة بيانات صغيرة تحتوي على سجلات حقيقية من NCBI (أحدها مضغوط بصيغة gzip لإظهار أن الملفات المضغوطة تُحمَّل بشكل شفاف):

```py
>>> from datasets import load_dataset
>>> dataset = load_dataset("ermiaazarkhalili/datasets-genbank-test", data_files="*.gb*", split="train")
>>> dataset[0]["locus_name"], dataset[0]["organism"], dataset[0]["length"]
```

### FASTQ

[FASTQ](https://en.wikipedia.org/wiki/FASTQ_format) هو تنسيق نصي لتخزين تسلسلات النيوكليوتيدات مع درجات جودتها، ويُستخدم على نطاق واسع لبيانات التسلسل عالي الإنتاجية.

تحميل ملف FASTQ:

```py
>>> from datasets import load_dataset
>>> dataset = load_dataset("fastq", data_files="reads.fq")
```

يعيد المُحمِّل خمس أعمدة:

| عمود | النوع | الوصف |
|--------|------|-------------|
| `id` | string | معرّف التسلسل (الكلمة الأولى بعد `@`) |
| `description` | string | سطر الوصف الكامل (كل ما يلي المعرّف) |
| `sequence` | large_string | تسلسل النيوكليوتيدات |
| `quality` | large_string | درجات الجودة المُرمّزة بتشفير ASCII |
| `record` | [BioSequence](/docs/datasets/v5.2.0/ar/package_reference/main_classes#datasets.BioSequence) | مع `format="fastq"`، تُخزَّن البايتات الأصلية لكل سجل، وتُفكّك إلى `SeqRecord` من Biopython عند الوصول إليها. |

لا يتطلب قراءة الأعمدة المُحلَّلة استخدام Biopython؛ استبعد `record` باستخدام `columns`، أو استخدم `dataset.cast_column("record", BioSequence(decode=False))` (المستورد من `datasets`) للوصول إلى تخزينه `{"bytes": ..., "path": None}` دون فك الترميز.

تحميل أعمدة محددة فقط:

```py
>>> dataset = load_dataset("fastq", data_files="reads.fq", columns=["sequence", "quality"])
```

تتمّ اكتشاف الملفات المضغوطة (.fq.gz، .fastq.gz، .fq.bz2، .fq.xz) تلقائيًا وفكّ ضغطها.

### FASTA

[FASTA](https://en.wikipedia.org/wiki/FASTA_format) هو تنسيق نصي لتمثيل تسلسلات النيوكليوتيدات (DNA/RNA) أو تسلسلات الببتيدات (البروتينات)، ويُستخدم على نطاق واسع في المعلوماتية الحيوية.

لتحميل ملف FASTA:

```py
>>> from datasets import load_dataset
>>> dataset = load_dataset("fasta", data_files="sequences.fasta")
```

يعيد هذا مجموعة بيانات بالأعمدة التالية:
- `id`: معرّف التسلسل (الكلمة الأولى بعد `>`)
- `description`: سطر الوصف الكامل (كل ما يلي المعرّف)
- `sequence`: التسلسل البيولوجي (حمض نووي ريبوزي منقوص الأكسجين/حمض نووي ريبوزي/بروتين)
- `record`: [BioSequence](/docs/datasets/v5.2.0/ar/package_reference/main_classes#datasets.BioSequence) مع `format="fasta"` يخزّن البايتات الأصلية لكل سجل، ويُفكّ ترميزها إلى `SeqRecord` من Biopython عند الوصول إليها.

لا يتطلب قراءة الأعمدة المُحلَّلة استخدام Biopython؛ استبعد `record` باستخدام `columns`، أو استخدم `dataset.cast_column("record", BioSequence(decode=False))` (المستورد من `datasets`) للوصول إلى تخزينه `{"bytes": ..., "path": None}` دون فك الترميز.

يمكنك أيضًا تحميل أعمدة محددة فقط:

```py
>>> dataset = load_dataset("fasta", data_files="sequences.fa", columns=["id", "sequence"])
```

تُؤيَّد ملفات FASTA ذات الامتدادات المختلفة: `.fa`، `.fasta`، `.fna` (حمض نووي)، `.ffn` (نيوكليوتيدات مناطق الجينات)، `.faa` (حمض أميني)، و`.frn` (حمض نووي ريبوزي غير مشفر). يتم اكتشاف الملفات المضغوطة (gzip، bzip2، xz) تلقائيًا وفك ضغطها.

## الملفات عن بُعد

إذا كانت لديك ملفات عن بُعد على الأرجح مخزنة بصيغة `csv` أو `json` أو `txt` أو `parquet` أو أي صيغة مدعومة، يمكن لدالة [load_dataset()](/docs/datasets/v5.2.0/ar/package_reference/loading_methods#datasets.load_dataset) تحميلها إذا حددت مساراتها عن بُعد:

- عناوين `https://` للملفات العامة المتوفرة عبر الإنترنت، مثل `data_files=["https://rajpurkar.github.io/SQuAD-explorer/dataset/train-v2.0.json"]`
- روابط `hf://` للملفات في أي [مستودع مجموعة بيانات](https://huggingface.co/docs/hub/datasets-overview) أو [دلو تخزين](https://huggingface.co/docs/hub/storage-buckets) على Hugging Face، على سبيل المثال `data_files=["hf://datasets/karpathy/tinystories-gpt4-clean/tinystories_gpt4_clean.parquet"]` أو `data_files=["hf://buckets/julien-c/my-training-bucket/julien/affluence.csv"]`

## التعدد في المعالجة

عندما يتكوّن مجموعة بيانات من عدة ملفات (نسمّيها "شرائح")، فمن الممكن تسريع خطوة تنزيل مجموعة البيانات وإعدادها بشكل كبير.

يمكنك تحديد عدد العمليات التي تريد استخدامها لتحضير مجموعة بيانات بالتوازي باستخدام `num_proc`. في هذه الحالة، يُمنح كل عملية مجموعة فرعية من الشرائح لتحضيرها:

```python
from datasets import load_dataset

imagenet = load_dataset("timm/imagenet-1k-wds", num_proc=8)
ml_librispeech_spanish = load_dataset("facebook/multilingual_librispeech", "spanish", num_proc=8)
```

## البيانات في الذاكرة

🤗 سيتيح لك Datasets أيضًا إنشاء [Dataset](/docs/datasets/v5.2.0/ar/package_reference/main_classes#datasets.Dataset) مباشرة من هياكل بيانات في الذاكرة مثل قواميس Python وأطارات بيانات Pandas.

### قاموس بايثون

حمّل قواميس بايثون باستخدام [from_dict()](/docs/datasets/v5.2.0/ar/package_reference/main_classes#datasets.Dataset.from_dict):

```py
>>> from datasets import Dataset
>>> my_dict = {"a": [1, 2, 3]}
>>> dataset = Dataset.from_dict(my_dict)
```

### قائمة Python من القواميس

حمّل قائمة من قواميس بايثون باستخدام [from_list()](/docs/datasets/v5.2.0/ar/package_reference/main_classes#datasets.Dataset.from_list):

```py
>>> from datasets import Dataset
>>> my_list = [{"a": 1}, {"a": 2}, {"a": 3}]
>>> dataset = Dataset.from_list(my_list)
```

### مولّد بايثون

أنشئ مجموعة بيانات من مولّد بايثون باستخدام [from_generator()](/docs/datasets/v5.2.0/ar/package_reference/main_classes#datasets.Dataset.from_generator):

```py
>>> from datasets import Dataset
>>> def my_gen():
...     for i in range(1, 4):
...         yield {"a": i}
...
>>> dataset = Dataset.from_generator(my_gen)
```

يدعم هذا النهج تحميل بيانات أكبر من الذاكرة المتاحة.

يمكنك أيضًا تحديد مجموعة بيانات مجزأة عن طريق تمرير قوائم إلى `gen_kwargs`:

```py
>>> def gen(shards):
...     for shard in shards:
...         with open(shard) as f:
...             for line in f:
...                 yield {"line": line}
...
>>> shards = [f"data{i}.txt" for i in range(32)]
>>> ds = IterableDataset.from_generator(gen, gen_kwargs={"shards": shards})
>>> ds = ds.shuffle(seed=42, buffer_size=10_000)  # shuffles the shards order + uses a shuffle buffer
>>> from torch.utils.data import DataLoader
>>> dataloader = DataLoader(ds.with_format("torch"), num_workers=4)  # give each worker a subset of 32/4=8 shards
```

### إطار بيانات Pandas

تحميل إطارات بيانات Pandas باستخدام [from_pandas()](/docs/datasets/v5.2.0/ar/package_reference/main_classes#datasets.Dataset.from_pandas):

```py
>>> from datasets import Dataset
>>> import pandas as pd
>>> df = pd.DataFrame({"a": [1, 2, 3]})
>>> dataset = Dataset.from_pandas(df)
```

> [!TIP]
> لمزيد من التفاصيل، راجد دليل [كيفية تحميل مجموعات البيانات الجدولية من إطارات بيانات Pandas](tabular_load#pandas-dataframes).

## دون اتصال

حتى في حال عدم توفر اتصال بالإنترنت، لا يزال من الممكن تحميل مجموعة بيانات. طالما أنك قمت بتنزيل مجموعة بيانات من مستودع Hub سابقًا، فيجب أن تكون مخزنة مؤقتًا. وهذا يعني أنه يمكنك إعادة تحميل مجموعة البيانات من التخزين المؤقت واستخدامها دون اتصال.

إذا كنتَ على علم بأنك لن تتمكن من الوصول إلى الإنترنت، يمكنك تشغيل 🤗 Datasets في وضع عدم الاتصال الكامل. وهذا يوفر الوقت لأنه بدلاً من الانتظار حتى تنتهي مهلة تنزيل Dataset builder، سيقوم 🤗 Datasets بالبحث مباشرةً في ذاكرة التخزين المؤقت. اضبط متغير البيئة `HF_HUB_OFFLINE` على `1` لتفعيل وضع عدم الاتصال الكامل.

## تقسيم الشرائح

يمكنك أيضًا اختيار تحميل شرائح محددة فقط من التقسيم. هناك خياران لتقسيم التقسيم: استخدام السلاسل النصية أو واجهة [ReadInstruction](/docs/datasets/v5.2.0/ar/package_reference/builder_classes#datasets.ReadInstruction). السلاسل النصية أكثر إحكامًا وقابلية للقراءة في الحالات البسيطة، بينما يسهل استخدام [ReadInstruction](/docs/datasets/v5.2.0/ar/package_reference/builder_classes#datasets.ReadInstruction) مع معاملات التقسيم المتغيرة.

قم بدمج تقسيم `train` وتقسيم `test` عن طريق:

```py
>>> train_test_ds = datasets.load_dataset("ajibawa-2023/General-Stories-Collection", split="train+test")
===STRINGAPI-READINSTRUCTION-SPLIT===
>>> ri = datasets.ReadInstruction("train") + datasets.ReadInstruction("test")
>>> train_test_ds = datasets.load_dataset("ajibawa-2023/General-Stories-Collection", split=ri)
```

اختر صفوفًا محددة من الجزء `train`:

```py
>>> train_10_20_ds = datasets.load_dataset("ajibawa-2023/General-Stories-Collection", split="train[10:20]")
===STRINGAPI-READINSTRUCTION-SPLIT===
>>> train_10_20_ds = datasets.load_dataset("rojagtap/bookcorpus", split=datasets.ReadInstruction("train", from_=10, to=20, unit="abs"))
```

أو اختر نسبة من تقسيم باستخدام:

```py
>>> train_10pct_ds = datasets.load_dataset("ajibawa-2023/General-Stories-Collection", split="train[:10%]")
===STRINGAPI-READINSTRUCTION-SPLIT===
>>> train_10_20_ds = datasets.load_dataset("ajibawa-2023/General-Stories-Collection", split=datasets.ReadInstruction("train", to=10, unit="%"))
```

اختر مجموعة من النسب المئوية من كل تقسيم:

```py
>>> train_10_80pct_ds = datasets.load_dataset("ajibawa-2023/General-Stories-Collection", split="train[:10%]+train[-80%:]")
===STRINGAPI-READINSTRUCTION-SPLIT===
>>> ri = (datasets.ReadInstruction("train", to=10, unit="%") + datasets.ReadInstruction("train", from_=-80, unit="%"))
>>> train_10_80pct_ds = datasets.load_dataset("ajibawa-2023/General-Stories-Collection", split=ri)
```

وأخيرًا، يمكنك حتى إنشاء تقسيمات مُتحقَّق منها عبر التحقق المتقاطع. يُنشئ المثال أدناه تقسيمات تحقق متقاطع بعشر طيّات. كل مجموعة بيانات التحقق هي جزء بنسبة 10%، بينما تتكون مجموعة بيانات التدريب من الجزء التكميلي المتبقي بنسبة 90%:

```py
>>> val_ds = datasets.load_dataset("ajibawa-2023/General-Stories-Collection", split=[f"train[{k}%:{k+10}%]" for k in range(0, 100, 10)])
>>> train_ds = datasets.load_dataset("ajibawa-2023/General-Stories-Collection", split=[f"train[:{k}%]+train[{k+10}%:]" for k in range(0, 100, 10)])
===STRINGAPI-READINSTRUCTION-SPLIT===
>>> val_ds = datasets.load_dataset("ajibawa-2023/General-Stories-Collection", [datasets.ReadInstruction("train", from_=k, to=k+10, unit="%") for k in range(0, 100, 10)])
>>> train_ds = datasets.load_dataset("ajibawa-2023/General-Stories-Collection", [(datasets.ReadInstruction("train", to=k, unit="%") + datasets.ReadInstruction("train", from_=k+10, unit="%")) for k in range(0, 100, 10)])
```

### التقطيع والتقريب بالنسبة المئوية

السلوك الافتراضي هو تقريب الحدود إلى أقرب عدد صحيح للمجموعات التي لا تنقسم حدود الشرائح المطلوبة فيها بالتساوي على 100. كما هو موضح أدناه، قد تحتوي بعض الشرائح على أمثلة أكثر من غيرها. على سبيل المثال، إذا تضمنت مجموعة التدريب التالية 999 سجلاً، فإن:

```py
# 19 records, from 500 (included) to 519 (excluded).
>>> train_50_52_ds = datasets.load_dataset("ajibawa-2023/General-Stories-Collection", split="train[50%:52%]")
# 20 records, from 519 (included) to 539 (excluded).
>>> train_52_54_ds = datasets.load_dataset("ajibawa-2023/General-Stories-Collection", split="train[52%:54%]")
```

إذا كنت ترغب في تقسيمات متساوية الحجم، فاستخدم تقريب `pct1_dropremainder` بدلاً من ذلك. يعامل هذا الحدود المئوية المحددة كمضاعفات لـ 1%.

```py
# 18 records, from 450 (included) to 468 (excluded).
>>> train_50_52pct1_ds = datasets.load_dataset("ajibawa-2023/General-Stories-Collection", split=datasets.ReadInstruction("train", from_=50, to=52, unit="%", rounding="pct1_dropremainder"))
# 18 records, from 468 (included) to 486 (excluded).
>>> train_52_54pct1_ds = datasets.load_dataset("ajibawa-2023/General-Stories-Collection", split=datasets.ReadInstruction("train",from_=52, to=54, unit="%", rounding="pct1_dropremainder"))
# Or equivalently:
>>> train_50_52pct1_ds = datasets.load_dataset("ajibawa-2023/General-Stories-Collection", split="train[50%:52%](pct1_dropremainder)")
>>> train_52_54pct1_ds = datasets.load_dataset("ajibawa-2023/General-Stories-Collection", split="train[52%:54%](pct1_dropremainder)")
```

> [!WARNING]
> قد يؤدي التقريب `pct1_dropremainder` إلى حذف الأمثلة الأخيرة في مجموعة البيانات إذا لم يكن عدد الأمثلة في مجموعتك قابلاً للقسمة على 100.

## استكشاف الأخطاء وإصلاحها

في بعض الأحيان، قد تحصل على نتائج غير متوقعة عند تحميل مجموعة بيانات. ومن أكثر المشكلات شيوعًا التي قد تواجهها هي تنزيل مجموعة البيانات يدويًا وتحديد خصائص مجموعة البيانات.

### تحديد الميزات

عند إنشاء مجموعة بيانات من ملفات محلية، يتم استنتاج [Features](/docs/datasets/v5.2.0/ar/package_reference/main_classes#datasets.Features) تلقائيًا بواسطة [Apache Arrow](https://arrow.apache.org/docs/). ومع ذلك، قد لا تتطابق دائمًا ميزات مجموعة البيانات مع توقعاتك، أو قد ترغب في تعريف الميزات بنفسك. يُظهر المثال التالي كيفية إضافة تسميات مخصصة باستخدام ميزة [ClassLabel](/docs/datasets/v5.2.0/ar/package_reference/main_classes#datasets.ClassLabel).

ابدأ بتعريف التسميات الخاصة بك باستخدام فئة [Features](/docs/datasets/v5.2.0/ar/package_reference/main_classes#datasets.Features):

```py
>>> class_names = ["sadness", "joy", "love", "anger", "fear", "surprise"]
>>> emotion_features = Features({'text': Value('string'), 'label': ClassLabel(names=class_names)})
```

بعد ذلك، حدد معامل `features` في [load_dataset()](/docs/datasets/v5.2.0/ar/package_reference/loading_methods#datasets.load_dataset) باستخدام الميزات التي أنشأتها للتو:

```py
>>> dataset = load_dataset('csv', data_files=file_dict, delimiter=';', column_names=['text', 'label'], features=emotion_features)
```

الآن، عند النظر إلى خصائص مجموعة البيانات الخاصة بك، يمكنك ملاحظة أنها تستخدم التسميات المخصصة التي حددتها:

```py
>>> dataset['train'].features
{'text': Value('string'),
'label': ClassLabel(names=['sadness', 'joy', 'love', 'anger', 'fear', 'surprise'])}
```

