معالجة البيانات: مهارة مهمة لكل عالم بيانات
مقدمة
احد المهارات المهمة التي يجدر بعالم البيانات اتقانها هي معالجة وتحويل تنسيق البيانات بما يخدم اهداف التحليل. من ضمن المعالجات التي يقوم بها عالم البيانات عادة هي تحويل تنسيق البيانات من التنسيق العرضي إلى التنسيق الطولي. قد لا يبدو الامر واضحا لك الآن لكن اعدك بأنه ستكون الصورة واضحة تماما بعد المثال. لكن قبل المثال, دعنا نتعرف عن اهمية هذه العملية
أهمية تحويل البيانات العرضية إلى طولية
تكمن اهمية هذه العملية في طريقة استخدام كثير من دوال لغة آر للبيانات. هناك دوال كثيرة تتطلب أن يكون تنسيق البيانات تنسيق طولي. من تلك الدوال هي دالة aov() . هذه الدالة المهمة تقوم بتحليل التباين في مجموعة من البيانات لكشف إذا ما كان هناك دلالة احصائية عن تباين المتوسط الحسابي بين المجموعات, يطلق على هذا التحليل اسم شهير جدا وهو Anova Analysis هناك دوال اخرى في آر تتطلب هذا النوع من تنسيق البيانات لا يسع هذا المقال سردها. الآن دعنا ننتقل إلى المثال لتتضح الصورة تماما
مثال : تحليل كفاءة سوق البترول العالمي
نظرية ادارة الاموال تنص على أن السوق ذو كفاءة عالي إذا كانت السلع المتشابه في الجودة والخصائص يتم بيعها في السوق بسعر واحد. في هذا المثال تم جمع اسعار البترول العربي الخفيف من منصة سوق روتوردام الشهيرة لأربع دول وهي المملكة المتحدة , المكسيك , الامارات العربية المتحدة و عمان.
دعنا نرى تلك البيانات
library("here")
file_path <- here("static", "data", "oil_prices.csv")
oil.prices.w <- read.csv(file_path, header = TRUE)
oil.prices.w
## U.K. Mexico U.A.E. Oman
## 1 62.10 56.30 55.60 53.11
## 2 63.20 59.45 54.22 52.90
## 3 55.80 60.02 53.18 53.75
## 4 56.90 60.00 56.12 54.10
## 5 61.20 58.75 60.01 59.03
## 6 60.18 59.13 53.20 52.35
## 7 60.90 53.30 54.00 52.80
## 8 61.12 60.17 55.19 54.95
يطلق على هذا التنسيق من البيانات بالتنسيق العرضي لأن البيانات مدرجة تحت اكثر من عامود مما يسبب لنا بعض المشاكل خصوصا عندما نتعامل مع دوال آر التي تتطلب التنسيق الطولي كما سبق وذكرنا
دعنا الآن نرى ماذا نقصد بالتنسيق الطولي. هناك دوال كثيرة لتحويل هذه البيانات لكنني سأبدأ بدالة stack() وهي موجودة في حزمة آر الاساسية
oil.prices.t <- stack(oil.prices.w, select =c(U.K., Mexico, U.A.E., Oman))
colnames(oil.prices.t) <- c("prices", "countries")
oil.prices.t
## prices countries
## 1 62.10 U.K.
## 2 63.20 U.K.
## 3 55.80 U.K.
## 4 56.90 U.K.
## 5 61.20 U.K.
## 6 60.18 U.K.
## 7 60.90 U.K.
## 8 61.12 U.K.
## 9 56.30 Mexico
## 10 59.45 Mexico
## 11 60.02 Mexico
## 12 60.00 Mexico
## 13 58.75 Mexico
## 14 59.13 Mexico
## 15 53.30 Mexico
## 16 60.17 Mexico
## 17 55.60 U.A.E.
## 18 54.22 U.A.E.
## 19 53.18 U.A.E.
## 20 56.12 U.A.E.
## 21 60.01 U.A.E.
## 22 53.20 U.A.E.
## 23 54.00 U.A.E.
## 24 55.19 U.A.E.
## 25 53.11 Oman
## 26 52.90 Oman
## 27 53.75 Oman
## 28 54.10 Oman
## 29 59.03 Oman
## 30 52.35 Oman
## 31 52.80 Oman
## 32 54.95 Oman
كما ترى هنا, فقد قمنا بتحويل تنسيق البيانات من عرضي إلى طولي بكل سهولة. قد لا يبدو هذا إنجازا كبيرا لكنه كذلك عندما ندرك حجم الإمكانيات التي فتحناها لأنفسنا لنقوم بالعديد من المهام التحليلية. دعنا نرى مدى سهولة القيام بتحليل التباين لتلك البيانات بإستخدام دالة aov() التي سبق وذكرناها
res <-aov(prices~countries, data = oil.prices.t)
summary(res)
## Df Sum Sq Mean Sq F value Pr(>F)
## countries 3 188.5 62.82 11.53 4.27e-05 ***
## Residuals 28 152.6 5.45
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
لاحظ أنه لم يكن بالإمكان فعل ذلك إن لم نقم بتحويل تنسيق البيانات للتنسيق الطولي هنا يا صديقي تكمن قوة هذه المهارة المهمة. دعنا الآن نقوم بنفس هذه العملية بإستخدام دالة gather() المتوفرة في حزمة tidyr الشهيرة
library("tidyr")
gather(oil.prices.w, countries, prices, U.K.:Oman)
## countries prices
## 1 U.K. 62.10
## 2 U.K. 63.20
## 3 U.K. 55.80
## 4 U.K. 56.90
## 5 U.K. 61.20
## 6 U.K. 60.18
## 7 U.K. 60.90
## 8 U.K. 61.12
## 9 Mexico 56.30
## 10 Mexico 59.45
## 11 Mexico 60.02
## 12 Mexico 60.00
## 13 Mexico 58.75
## 14 Mexico 59.13
## 15 Mexico 53.30
## 16 Mexico 60.17
## 17 U.A.E. 55.60
## 18 U.A.E. 54.22
## 19 U.A.E. 53.18
## 20 U.A.E. 56.12
## 21 U.A.E. 60.01
## 22 U.A.E. 53.20
## 23 U.A.E. 54.00
## 24 U.A.E. 55.19
## 25 Oman 53.11
## 26 Oman 52.90
## 27 Oman 53.75
## 28 Oman 54.10
## 29 Oman 59.03
## 30 Oman 52.35
## 31 Oman 52.80
## 32 Oman 54.95
كما ترى, لقد حصلنا على نفس النتائج تقريبا. ما يميز دالة gather ان استخدامها مختصر وانيق. لذلك الكثير من علماء البيانات يفضلونها على دالة stack الموجودة في حزمة آر الاساسية
الخلاصة
كان هذا المقال قصيرا جدا لكنه يوضح مدى اهمية مهارة معالجة البيانات وتنسيقها بالشكل الذي يخدم اهداف عالم البيانات ويسهل مهامه بشكل كبير. اتمنى ان يكون هذا المقال قد حاز على رضاك وأن يكون لك مصدر ترجع له عندما تواجه اي مشاكل تتعلق بالتعامل مع دوال آر التي تتطلب بيانات بالتنسيق الطولي
جرب بنفسك
كامل الكود تجده هنا
comments powered by Disqus