استيراد البيانات في R: قراءة ملفات CSV وExcel وSPSS وStata وSAS
⚡ ملخص ذكي
يتناول هذا الدليل كيفية استيراد البيانات في لغة R، بما في ذلك قراءة ملفات CSV باستخدام الدالة read.csv()، وملفات Excel باستخدام الدالة readxl، وملفات SAS أو STATA أو SPSS باستخدام الدالة haven. كما يوضح كيفية تحديد الأوراق والصفوف ونطاقات الخلايا بدقة عند الاستيراد.

يمكن أن توجد البيانات في أشكال مختلفة. لكل تنسيق R لديه وظيفة وحجة محددة. يشرح هذا البرنامج التعليمي كيفية استيراد البيانات إلى R.
قراءة ملفات CSV
يُعدّ تنسيق CSV (قيم مفصولة بفواصل) أكثر تنسيقات البيانات استخدامًا. يقوم برنامج R بتحميل مجموعة من المكتبات عند بدء التشغيل، بما في ذلك حزمة utils. توفر هذه الحزمة الدالة read.csv()، وهي الطريقة القياسية لفتح ملف CSV. إليك صيغة الدالة:
read.csv(file, header = TRUE, sep = ",")
حجة:
- ملف: PATH حيث يتم تخزين الملف
- رأس: تأكيد ما إذا كان الملف يحتوي على رأس أم لا، افتراضيًا، يتم تعيين الرأس على TRUE
- سبتمبر: الرمز المستخدم لتقسيم المتغير. بشكل افتراضي، `،`.
سوف نقرأ اسم ملف البيانات mtcats. يتم تخزين ملف CSV على الإنترنت. إذا تم تخزين ملف .csv محليًا، فيمكنك استبدال PATH داخل مقتطف الشفرة. لا تنس أن تغلفه بالداخل ' '. يجب أن يكون PATH قيمة سلسلة.
بالنسبة لمستخدم ماك، مسار مجلد التنزيل هو:
"/Users/USERNAME/Downloads/FILENAME.csv"
لمستخدمي الويندوز:
"C:\Users\USERNAME\Downloads\FILENAME.csv"
لاحظ أنه يجب علينا دائمًا تحديد امتداد اسم الملف.
- . CSV
- . XLSX
- .رسالة قصيرة
- ...
PATH <- 'https://raw.githubusercontent.com/guru99-edu/R-Programming/master/mtcars.csv' df <- read.csv(PATH, header = TRUE, sep = ',') length(df)
الإخراج:
## [1] 12
class(df$X)
الإخراج:
## [1] "factor"
في إصدارات R السابقة للإصدار 4.0.0، كانت الدالة read.csv() تحوّل كل عمود نصي إلى عامل، ولهذا السبب تُرجع الدالة class(df$X) القيمة "factor" المذكورة أعلاه. يمكنك تعطيل هذه الخاصية باستخدام stringsAsFactors = FALSE.
⚠️ ملاحظة حول الإصدار: منذ R 4.0.0 (G) القيمة الافتراضية هي stringsAsFactors = FALSE، لذا تبقى أعمدة الأحرف من نوع أحرف، ويعيد المثال الأول الآن القيمة "character" في التثبيتات الحديثة. تمرير الوسيط بشكل صريح، كما هو موضح أدناه، يُعطي النتيجة نفسها في جميع الإصدارات، وهو الأسلوب الأمثل.
PATH <- 'https://raw.githubusercontent.com/guru99-edu/R-Programming/master/mtcars.csv' df <-read.csv(PATH, header =TRUE, sep = ',', stringsAsFactors =FALSE) class(df$X)
الإخراج:
## [1] "character"
أصبحت فئة المتغير X الآن حرفًا.
دالة read.csv() مقابل دالة read_csv(): أيهما يجب عليك استخدامه؟
تأتي الدالة read.csv() مُدمجة مع لغة R الأساسية ولا تحتاج إلى أي حزمة إضافية. أما حزمة readr فتضيف الدالة read_csv()، وهي أسرع وتتخذ قرارات أقل نيابةً عنك.
| المعايير | read.csv() (utils) | read_csv() (readr) |
|---|---|---|
| الحزمة المطلوبة | بدون سلوفان | اقرأ |
| سرعة التعامل مع الملفات الكبيرة | أبطأ | أسرع بعدة مرات |
| سياسات الإرجاع والاستبدال | البيانات | تيبل |
| أسماء الأعمدة | تم تحويل المسافات إلى نقاط | تم الاحتفاظ بها كما هي مكتوبة تماماً |
| الكشف عن النوع | صامت | تم الإبلاغ عنه في مواصفات العمود |
library(readr) df <- read_csv(PATH) # For very large files, data.table::fread() is faster still library(data.table) df <- fread(PATH)
استخدم الدالة read.csv() للملفات الصغيرة والبرامج النصية التي يجب تشغيلها دون الحاجة إلى حزم إضافية. استخدم الدالة read_csv() عندما يكون الملف كبيرًا أو عندما يكون الحفاظ على أسماء الأعمدة بدقة أمرًا بالغ الأهمية.
قراءة ملفات إكسل
Excel تحظى الملفات بشعبية كبيرة بين محللي البيانات. تتميز جداول البيانات بسهولة العمل ومرونتها. تم تجهيز R بمكتبة readxl لاستيراد جداول بيانات Excel.
استخدم هذا الرمز
require(readxl)
للتحقق من تثبيت readxl في جهازك. إذا قمت بتثبيت r مع r-conda-essential، فإن المكتبة مثبتة بالفعل. يجب أن تشاهد في نافذة الأوامر:
الإخراج:
Loading required package: readxl.
إذا لم تكن الحزمة مثبتة، يمكنك تثبيتها باستخدام conda مكتبة أو في المحطة، استخدم conda install -c mittner r-readxl.
استخدم الأمر التالي لتحميل المكتبة لاستيراد ملفات Excel.
library(readxl)
readxl_example()
نستخدم الأمثلة المضمنة في الحزمة readxl خلال هذا البرنامج التعليمي.
استخدام التعليمات البرمجية
readxl_example()
لرؤية جميع جداول البيانات المتوفرة في المكتبة.
للتحقق من موقع جدول بيانات معين، مرر اسمه:
readxl_example("geometry.xls")
إذا قمت بتثبيت R مع conda، فستكون جداول البيانات موجودة في Anaconda3/lib/R/library/readxl/extdata/filename.xls
read_excel()
تقوم الدالة read_excel() بفتح كل من امتدادات .xls و .xlsx وتختار المحلل المناسب تلقائيًا.
الصيغة هي:
read_excel(PATH, sheet = NULL, range= NULL, col_names = TRUE) arguments: -PATH: Path where the excel is located -sheet: Select the sheet to import. By default, all -range: Select the range to import. By default, all non-null cells -col_names: Select the columns to import. By default, all non-null columns
يمكننا استيراد جداول البيانات من مكتبة readxl وإحصاء عدد الأعمدة في الورقة الأولى.
# Store the path of `datasets.xlsx` example <- readxl_example("datasets.xlsx") # Import the spreadsheet df <- read_excel(example) # Count the number of columns length(df)
الإخراج:
## [1] 5
أوراق التفوق ()
يتكون ملف datasets.xlsx من 4 أوراق. يمكننا معرفة الأوراق المتوفرة في المصنف باستخدام وظيفة excel_sheets()
example <- readxl_example("datasets.xlsx")
excel_sheets(example)
الإخراج:
[1] "iris" "mtcars" "chickwts" "quakes"
إذا كانت ورقة العمل تحتوي على العديد من الأوراق، فمن السهل تحديد ورقة معينة باستخدام وسيطات الورقة. يمكننا تحديد اسم الورقة أو فهرس الورقة. يمكننا التحقق مما إذا كانت كلتا الدالتين تُرجعان نفس الإخراج باستخدام متطابق ().
example <- readxl_example("datasets.xlsx") quake <- read_excel(example, sheet = "quakes") quake_1 <-read_excel(example, sheet = 4) identical(quake, quake_1)
الإخراج:
## [1] TRUE
يمكننا التحكم في الخلايا التي يجب قراءتها بطريقتين
- استخدم الوسيطة n_max لإرجاع عدد n من الصفوف
- استخدم وسيطة النطاق مع cell_rows أو cell_cols
على سبيل المثال، قمنا بتعيين n_max يساوي 5 لاستيراد الصفوف الخمسة الأولى.
# Read the first five row: with header iris <-read_excel(example, n_max =5, col_names =TRUE)
إذا قمنا بتغيير col_names إلى FALSE، فسيقوم R بإنشاء الرؤوس تلقائيًا.
# Read the first five row: without header iris_no_header <-read_excel(example, n_max =5, col_names =FALSE)
iris_no_header
في إطار البيانات iris_no_header، أنشأ برنامج readxl خمسة أسماء عناصر نائبة. أنتجت الإصدارات القديمة أسماءً من X__1 إلى X__5، بينما تنتج الإصدارات الحالية أسماءً من ...1 إلى ...5.
يمكننا أيضًا استخدام نطاق الوسيطة لتحديد الصفوف والأعمدة في جدول البيانات. في الكود أدناه، نستخدم نمط Excel لتحديد النطاق من A1 إلى B5.
# Read rows A1 to B5 example_1 <-read_excel(example, range = "A1:B5", col_names =TRUE) dim(example_1)
الإخراج:
## [1] 4 2
يُرجع المثال رقم 1 أربعة صفوف وعمودين. يغطي النطاق A1:B5 خمسة صفوف في جدول البيانات، ولكن يُستخدم الصف الأول كعنوان، ولهذا السبب يكون البُعد 4 × 2.
في المثال الثاني، نستخدم الدالة cell_rows() التي تتحكم في نطاق الصفوف المراد إرجاعها. إذا أردنا استيراد الصفوف من 1 إلى 5، فيمكننا تعيين cell_rows(1:5). لاحظ أن cell_rows(1:5) يُرجع نفس مخرجات cell_rows(5:1).
# Read rows 1 to 5 example_2 <-read_excel(example, range =cell_rows(1:5),col_names =TRUE) dim(example_2)
الإخراج:
## [1] 4 5
على النقيض من ذلك، فإن المثال 2 هو 4 × 5. وتتعامل cell_rows(1:5) مرة أخرى مع الصف الأول كعنوان، لذلك يتم إرجاع أربعة صفوف بيانات عبر جميع الأعمدة الخمسة.
في حالة أردنا استيراد صفوف لا تبدأ من الصف الأول، فيجب علينا تضمين col_names = FALSE. إذا استخدمنا النطاق = cell_rows(2:5)، يصبح من الواضح أن إطار البيانات الخاص بنا لم يعد يحتوي على رأس.
iris_row_with_header <-read_excel(example, range =cell_rows(2:3), col_names=TRUE) iris_row_no_header <-read_excel(example, range =cell_rows(2:3),col_names =FALSE)
يمكنك أيضًا تحديد الأعمدة حسب الحرف، تمامًا كما هو الحال في برنامج Excel:
# Select columns A and B col <- read_excel(example, range = cell_cols("A:B")) dim(col)
الإخراج:
## [1] 150 2
ملاحظة: النطاق = cell_cols("A:B")، يُرجع إخراج جميع الخلايا ذات القيمة غير الخالية. تحتوي مجموعة البيانات على 150 صفًا، لذلك تقوم read_excel() بإرجاع صفوف تصل إلى 150 صفًا. يتم التحقق من ذلك باستخدام الدالة dim().
تُحدد الوسيطة na للدالة read_excel() القيم التي يجب اعتبارها مفقودة. يتم حسابها باستخدام الدالتين sum() و is.na().
- مجموع
- is.na
ها هو الكود
iris_na <-read_excel(example, na ="setosa") sum(is.na(iris_na))
الإخراج:
## [1] 50
لدينا 50 قيمة مفقودة، وهي الصفوف التي تنتمي إلى فصيلة سيتوسا.
استيراد البيانات من برامج إحصائية أخرى
يتم استيراد الملفات من حزم إحصائية أخرى مع ملاذ حزمة تدعم SAS، وبرنامجي STATA و SPSS. يمكننا استخدام الدالة التالية لفتح أنواع مختلفة من مجموعات البيانات، وفقًا لامتداد الملف:
- ساس: read_sas ()
- STATA: read_dta() (أو read_stata()، وهي متطابقة)
- SPSS: read_sav () أو read_por (). نحن بحاجة للتحقق من التمديد
كل دالة من هذه الدوال تحتاج إلى وسيط واحد فقط، وهو مسار الملف، وتقبل كل منها... URL بسهولة مثل المسار المحلي.
library(haven)
يأتي الملاذ مع كوندارا r-essential وإلا فانتقل إلى الصفحة أو في المحطة الطرفية conda install -c conda-forge r-haven
قراءة ملفات SAS
على سبيل المثال، سنستخدم مجموعة بيانات القبول من IDRE.
PATH_sas <- 'https://github.com/guru99-edu/R-Programming/blob/master/binary.sas7bdat?raw=true' df <- read_sas(PATH_sas) head(df)
الإخراج:
## # A tibble: 6 x 4 ## ADMIT GRE GPA RANK ## <dbl> <dbl> <dbl> <dbl> ## 1 0 380 3.61 3 ## 2 1 660 3.67 3 ## 3 1 800 4.00 1 ## 4 1 640 3.19 4 ## 5 0 520 2.93 4 ## 6 1 760 3.00 2
قراءة ملفات STATA
بالنسبة لملفات بيانات STATA، يمكنك استخدام read_dta(). نحن نستخدم نفس مجموعة البيانات تمامًا ولكننا نخزنها في ملف .dta.
PATH_stata <- 'https://github.com/guru99-edu/R-Programming/blob/master/binary.dta?raw=true' df <- read_dta(PATH_stata) head(df)
الإخراج:
## # A tibble: 6 x 4 ## admit gre gpa rank ## <dbl> <dbl> <dbl> <dbl> ## 1 0 380 3.61 3 ## 2 1 660 3.67 3 ## 3 1 800 4.00 1 ## 4 1 640 3.19 4 ## 5 0 520 2.93 4 ## 6 1 760 3.00 2
قراءة ملفات SPSS
تقوم الدالة read_sav() بفتح ملف SPSS، والذي يحمل الامتداد .sav.
PATH_spss <- 'https://github.com/guru99-edu/R-Programming/blob/master/binary.sav?raw=true' df <- read_sav(PATH_spss) head(df)
الإخراج:
## # A tibble: 6 x 4 ## admit gre gpa rank ## <dbl> <dbl> <dbl> <dbl> ## 1 0 380 3.61 3 ## 2 1 660 3.67 3 ## 3 1 800 4.00 1 ## 4 1 640 3.19 4 ## 5 0 520 2.93 4 ## 6 1 760 3.00 2
أفضل الممارسات لاستيراد البيانات
اتباع قائمة التحقق أدناه قبل الاستيراد يوفر معظم أعمال التنظيف اللاحقة:
- التنسيق النموذجي لجدول البيانات هو استخدام الصفوف الأولى كرأس (عادةً اسم المتغيرات).
- تجنب استخدام المسافات الفارغة في اسم الملف أو العمود، لأنها قد تُقرأ كفاصل بين الأعمدة. استخدم الشرطة السفلية بدلاً من ذلك.
- يفضل الأسماء المختصرة
- لا تستخدم الرموز في الاسم. اكتب exchange_rate_dollar_euro بدلاً من exchange_rate_$_€.
- قم بترميز القيم المفقودة كـ NA بدلاً من الفراغات أو الشرطات أو الأرقام المرجعية مثل -99، والتي يجب تنظيفها بعد ذلك.
استيراد البيانات في لغة R: مرجع الدوال
يسرد الجدول أدناه دالة الاستيراد لكل نوع ملف، والمكتبة التي توفرها، ومعاملاتها الافتراضية:
| المكتبة | الهدف | الوظيفة | الوسيطات الافتراضية |
|---|---|---|---|
| تيلس | قراءة ملف CSV | قراءة.csv() | ملف، رأس = صحيح، فاصل = ""," |
| readxl | قراءة ملف EXCEL | read_excel() | المسار، النطاق = NULL، col_names = TRUE |
| ملاذ | قراءة ملف SAS | read_sas() | مسار |
| ملاذ | قراءة ملف ستاتا | read_dta() / read_stata() | مسار |
| ملاذ | قراءة ملف SPSS | read_sav() | مسار |
يوضح الجدول الثاني طرق استيراد التحديد باستخدام الدالة read_excel():
| الوظيفة | الهدف | الحجج |
|---|---|---|
| read_excel() | قراءة عدد ن من الصفوف | ن_ماكس = 10 |
| حدد الصفوف والأعمدة كما هو الحال في Excel | النطاق = "A1:D10" | |
| حدد الصفوف ذات الفهارس | النطاق = صفوف_الخلايا (1:3) | |
| حدد الأعمدة التي تحتوي على حروف | النطاق = cell_cols("A:C") |







