المحطة 9 · الدرس 5

تنظيم الملفات والتخزين

مهم12 دقيقةقبل هذا الدرس: معالجة دفعات (batch)اطبع البطاقة
تبدأ من: sub-002_task-FaceRecognition_eeg.set (D4) · لا شيء: البيانات كما نزّلتها.تنزيل البيانات (يفتح في نافذة جديدة)
سكربت الوصول لهذه الحالة
MATLAB
[ALLEEG, EEG, CURRENTSET, ALLCOM] = eeglab;

% Run from inside faces_project, where ds002718 sits in rawdata
bidsRoot = fullfile(pwd, 'rawdata');
EEG = pop_loadset('sub-002_task-FaceRecognition_eeg.set', fullfile(bidsRoot, 'sub-002', 'eeg'));

% Show the dataset in the main EEGLAB window
[ALLEEG, EEG, CURRENTSET] = pop_newset(ALLEEG, EEG, 0, 'setname', 'sub-002 raw', 'gui', 'off');
eeglab redraw;

الفكرة باختصار

مع مشاركparticipantالشخص الذي سُجّلت بياناته في التجربة. واحد، كل شيء في مجلد واحد يكفي. مع عشرين مشاركاً وخمس مراحل معالجة، يصبح عندك مئة ملف أو أكثر. بعد شهرين لن تتذكر أي ملف نظّفته، ولا بأي إعدادات، ولا أي نسخة استخدمتها في الرسم.

قبل وبعد

شجرة مجلد faces_project: rawdata للبيانات الخام وعليه قفل لأنه للقراءة فقط، و derivatives/eeglab فيه sub-002/eeg بملفين desc-clean و desc-epochs، و code للسكربتات، و figures للرسوم، و logs لملفات الأخطاء.

أسئلتك بعد هذا، كل جواب في قسمه:

لماذا أحتاج هذه الخطوة؟

السبب بالتفصيل، والمصطلحات التي تحتاجها

والتخزين يكبر أسرع مما تتوقع. كل نسخة مستمرة تحفظها من مشارك تأخذ تقريباً نفس حجم ملفه الخام. في D4 الملف الخام لكل مشارك حوالي 234 ميجابايت، وفيها 18 مشاركاً، أي حوالي 4.2 جيجابايت للبيانات الخام وحدها. إذا حفظت خمس مراحل لكل مشارك، تصل إلى حوالي 21 جيجابايت قبل أي epochمقطع زمني قصير مقتطع حول حدث. أو رسم.

هذا الدرس يعطيك ثلاث قواعد قبل أن تبدأ أي مشروع: هيكل مجلدات ثابت، وأسماء ملفات ثابتة، وحساب للتخزين وقرار مسبق بما تحفظه.

كيف أطبّقها في EEGLAB؟

8 خطوة من القوائم

أولاً: الهيكل

  1. أنشئ مجلداً للمشروع، وفيه خمسة مجلدات فقط:
    • rawdata: البيانات الخام كما نزّلتها. لا تكتب فيه شيئاً أبداً.
    • derivatives/eeglab: كل ما تنتجه المعالجة، بمجلد لكل مشارك.
    • code: سكربتscriptملف أوامر MATLAB ينفّذ خطوات المعالجة بالترتيب.. هي التي تعيد إنتاج كل شيء آخر.
    • figures: الرسوم النهائية.
    • logs: ملفات الأخطاء التي يكتبها سكربت الدفعات من الدرس السابق.

هذا نفس منطق BIDSمعيار موحّد لتسمية ملفات البيانات العصبية وتنظيمها في مجلدات.: البيانات الخام في مكان، والمشتقات (derivatives) في مكان آخر، بنفس أسماء المشاركين.

ثانياً: الأسماء

  1. سمِّ كل ملف من نفس الأجزاء وبنفس الترتيب: المشارك، ثم المهمة، ثم وصف المرحلة، ثم النوع. مثال: sub-002_task-FaceRecognition_desc-clean_eeg.set. الجزء desc- يقول أي مرحلة هذه، والباقي منسوخ من الملف الخام.
  2. اجعل اسم داتاستdatasetملف بيانات EEG واحد محمّل في EEGLAB مع معلوماته. داخل EEGLAB يقول نفس الشيء. عند الحفظ من File ثم Save current dataset as اكتب الاسم الكامل، وغيّر Dataset name من Edit ثم Dataset info عند الحاجة.

ثالثاً: التخزين

  1. افتح مجلد rawdata في مستكشف الملفات، وانظر حجم ملف .set لمشارك واحد. اضربه في عدد المشاركين، ثم في عدد المراحل المستمرة التي تنوي حفظها.
  2. قرّر ماذا تحفظ قبل أن تشغّل. قاعدة عملية:
    • احفظ ما هو بطيء أو يعتمد على حكمك: أوزان ICAطريقة تفصل الإشارة المسجّلة إلى مصادر مستقلة، بعضها دماغي وبعضها آرتفاكت.، قائمةmenuمجموعة أوامر تظهر عند الضغط على اسمها في أعلى النافذة. قناةchannelالإشارة المسجّلة من قطب واحد، وهي ما يعرضه EEGLAB. السيئة، وأرقام المكوّنات التي حذفتها.
    • أعد حسابه ما هو سريع وآلي: فلترfilterأداة تُضعف ترددات معيّنة في الإشارة وتُبقي غيرها.، المرجعreferenceالنقطة التي يُقاس جهد كل قناة بالنسبة لها.، والتقطيع، والخط القاعدي.
    • احفظ دائماً النسخة النهائية التي تدخل الإحصاء.

رابعاً: حوّل بياناتك إلى BIDS

  1. إذا كانت بياناتك الخام ليست بصيغة BIDS، pluginحزمة تضيف وظائف أو قوائم جديدة إلى EEGLAB. EEG-BIDS المرفقة مع EEGLAB تحوّلها. افتح File ثم BIDS tools ثم BIDS export wizard (from raw EEG to BIDS)، واتبع الخطوات: الملفات، ثم المهمة، ثم المشاركين، ثم حدثeventعلامة في التسجيل تحدد لحظة شيء مهم، مثل ظهور مثير..
  2. إذا كانت عندك STUDY جاهزة، فاستخدم File ثم BIDS tools ثم Export STUDY to BIDS folder.
  3. افحص الناتج بـ File ثم BIDS tools ثم Validate BIDS dataset. يفتح صفحة الفاحص الرسمي في المتصفح.

D4 نفسها مثال على BIDS جاهز: افتح مجلدها وانظر dataset_description.json و README و task-FaceRecognition_events.json ومجلدات sub-002 وما بعدها.

لمشاركة ملف واحد مع شخص يستخدم برنامجاً آخر، يكتبه File ثم Export ثم Data to EDF/BDF/GDF file بصيغة قياسية تقرؤها أغلب برامج EEG (يحتاج إضافة Biosig من درس التثبيت). استخدمه للمشاركة فقط، وأبقِ داخل مشروعك ملفات .set ومجلد BIDS.

كيف أكتبها بالكود؟

نفس الخطوات في 36 أسطر MATLAB
MATLAB
[ALLEEG, EEG, CURRENTSET, ALLCOM] = eeglab;
eeglabRoot = fileparts(which('eeglab'));

% Project layout: raw data stay untouched, results go to derivatives
projectRoot = pwd;   % run from inside faces_project
bidsRoot    = fullfile(projectRoot, 'rawdata');            % ds002718 lives here
derivRoot   = fullfile(projectRoot, 'derivatives', 'eeglab');
folders = {bidsRoot, derivRoot, fullfile(projectRoot, 'code'), ...
           fullfile(projectRoot, 'figures'), fullfile(projectRoot, 'logs')};
for k = 1:numel(folders)
    if ~exist(folders{k}, 'dir'), mkdir(folders{k}); end
end

% Storage estimate from the raw files on disk
rawFiles  = dir(fullfile(bidsRoot, 'sub-*', 'eeg', '*_eeg.set'));
rawGB     = sum([rawFiles.bytes]) / 1e9;
nSubjects = numel(rawFiles);
fprintf('%d subject(s) on disk, %.2f GB of raw data\n', nSubjects, rawGB);

% Each continuous stage you save costs about one raw copy per subject
nSavedStages = 2;   % clean continuous + epochs
fprintf('Derivatives for these subjects: up to about %.1f GB\n', rawGB * nSavedStages);
fprintf('Full dataset (18 subjects): about %.1f GB raw\n', 18 * rawGB / max(nSubjects, 1));

% BIDS-style derivative name for one subject and one stage
subj   = 'sub-002';
stage  = 'clean';
outDir = fullfile(derivRoot, subj, 'eeg');
if ~exist(outDir, 'dir'), mkdir(outDir); end
outName = sprintf('%s_task-FaceRecognition_desc-%s_eeg.set', subj, stage);
fprintf('Save stage "%s" as %s\n', stage, fullfile(outDir, outName));

% Small files are cheap: keep ICA weights apart from the data
% icaInfo = struct('icaweights', EEG.icaweights, 'icasphere', EEG.icasphere, ...
%                  'icachansind', EEG.icachansind);
% save(fullfile(outDir, sprintf('%s_task-FaceRecognition_desc-ica.mat', subj)), '-struct', 'icaInfo');

% Convert a non-BIDS dataset (here D1) to BIDS with EEG-BIDS
data = struct('file', {fullfile(eeglabRoot, 'sample_data', 'eeglab_data.set')});
% Practice export only: delete d1_bids when you are done
bids_export(data, 'targetdir', fullfile(projectRoot, 'd1_bids'), ...
    'tInfo', struct('TaskName', 'attention', 'PowerLineFrequency', 60));

أي قيمة أختار؟

القيم المناسبة حسب هدف تحليلك
القرارالاختيار في الدرسلماذا
مكان البيانات الخامrawdata، للقراءة فقطإذا خرّبت ملفاً خاماً بالخطأ لا يمكن إصلاحه. كل ما بعده يُعاد من السكربت.
مكان النتائجderivatives/eeglab/sub-XXX/eegنفس منطق مواصفات BIDS للمشتقات، فيفهمه أي باحث، وتقرؤه أدوات BIDS.
عدد المراحل المحفوظةاثنتان: النسخة النظيفة المستمرة، ثم الـ epochsتكفي لإعادة أي تحليل لاحق بدون تشغيل ICA من جديد.
ما يُحفظ منفصلاًأوزان ICA، والقنوات السيئة، والمكوّنات المحذوفةصغيرة جداً، وهي نتيجة ساعات حساب أو قرارات بعينك.
ملف أو ملفان لكل داتاستملفان، .set و .fdt (افتراضي EEGLAB 2026.1)تُحمَّل البيانات أسرع في الـ STUDY. انسخ الملفين أو انقلهما معاً دائماً. خيار الملف .set الواحد في File ثم Preferences.
صيغة الأرقامsingle (افتراضي EEGLAB)double يضاعف الحجم بلا فائدة لبيانات EEG.

كيف أتأكد أنها نجحت؟

4 فحوص سريعة
  • مجلد المشروع فيه الخمسة مجلدات، ولم يتغيّر أي ملف في rawdata منذ نزّلته.
  • السكربت يطبع عدد المشاركين وحجم بياناتهم الخام والتقدير الكلي.
  • كل ملف في derivatives اسمه يبدأ بـ sub- ويحتوي desc- باسم مرحلته.
  • المجلد d1_bids فيه dataset_description.json ومجلد sub-001.

ما الأخطاء التي يقع فيها كثيرون؟

4 أخطاء، وكيف تتجنّبها
  • الحفظ فوق الملف الخام. File ثم Resave current dataset(s) يكتب فوق الملف المفتوح. استخدم دائماً File ثم Save current dataset as مع اسم المرحلة.
  • حفظ كل مرحلة “احتياطاً”. خمس مراحل في 18 مشاركاً تعني أكثر من 20 جيجابايت من D4 وحدها، وأغلبها يُعاد حسابه في دقائق.
  • أسماء مثل final2_new_REAL.set. بعد شهر لا أحد يعرف الفرق. اسم المرحلة في desc- يكفي، والإعدادات مكانها السكربت في code.
  • فصل السكربت عن النتائج. نتيجة بلا السكربت الذي أنتجها لا يمكن إعادتها. احفظ السكربت مع كل تشغيل، أو استخدم نظام نسخ مثل git لمجلد code.

أين أقرأ أكثر؟

4 مراجع: التوثيق الرسمي أولاً

مكتوب لـ EEGLAB 2026.1 · 2026-10-28

تحتاج مساعدة؟

اسأل، أو شاركنا رأيك، أو بلّغ عن خطأ