العمل مع التواريخ في لغة R (الميزات الأساسية ، وكذلك حزم lubridate و timeperiodsR)

احصل على التاريخ الحالي بأي لغة برمجة ، وهي عملية تعادل "Hello world!" اللغة R ليست استثناء.


في هذه المقالة ، سننظر في كيفية عمل التواريخ في بناء جملة R الأساسي ، وسننظر أيضًا في بعض الحزم المفيدة التي تعمل على توسيع إمكانياتها عند العمل مع التواريخ:


  • lubridate - حزمة تسمح بالحسابات الحسابية بين التواريخ ؛
  • timeperiodsR - حزمة للعمل مع الفواصل الزمنية ومكوناتها.




محتوى


  1. العمل مع التواريخ في بناء جملة R الأساسي
    1.1. تحويل النص إلى تاريخ
    1.2. استرداد مكونات التاريخ في Base R
  2. العمل مع التمور مع حزمة lubridate
    2.1. تحويل النص إلى تاريخ باستخدام تزييت
    2.2. استرداد مكونات التاريخ باستخدام حزمة lubridate
    2.3. العمليات الحسابية مع التواريخ
  3. العمل المبسط مع فترات ، حزمة timeperiodsR
    3.1. فترات زمنية في timeperiodsR
    3.2. تصفية متجه التاريخ مع timeperiodsR
  4. استنتاج



العمل مع التواريخ في بناء جملة R الأساسي


تحويل النص إلى تاريخ


في R الأساسية هناك مجموعة من الوظائف للعمل مع التواريخ. ناقص بناء الجملة الأساسي هو أن سجل أسماء وسيطات الوظائف مجزأ للغاية ، وليس له أي اتصال منطقي عمليًا. ومع ذلك ، يجب أن تكون الوظائف الأساسية للغة معروفة ، لذلك سنبدأ بها.


في معظم الأحيان ، عند تحميل البيانات إلى R ، من ملفات CSV ، أو مصادر أخرى ، تحصل على التاريخ في شكل نص. as.Date() هذا النص إلى نوع البيانات الصحيح ، استخدم الدالة as.Date() .


 #      my_dates <- c("2019-09-01", "2019-09-10", "2019-09-23") #    class(my_dates) 

 #> [1] "character" 

 #     my_dates <- as.Date(my_dates) #    class(my_dates) 

 #> [1] "Date" 

بشكل افتراضي ، يقبل as.Date() : YYYY-MM-DD أو YYYY / MM / DD .
إذا كانت التواريخ في مجموعة البيانات الخاصة بك بأي تنسيق آخر ، فيمكنك استخدام وسيطة format للتحويل.


 as.Date("September 26, 2019", format = "%B %d, %Y") 

يقبل التنسيق في معاملات نموذج سلسلة تدل على أي فاصل زمني وتنسيقه ، وتظهر القيم الأكثر استخدامًا في الجدول أدناه:


شكلوصف
٪ درقم اليوم في الشهر
٪ أاختصار لاسم يوم الأسبوع
٪ أالاسم الكامل ليوم الأسبوع
٪ ثرقم يوم الأسبوع (0-6 ، حيث 0 هو يوم الأحد)
٪ متعيين رقمين في الشهر (01-12)
٪ باختصار لاسم الشهر (أبريل ، مارس ، ...)
٪ باسم الشهر الكامل
٪ ذتعيين من رقمين العام
٪ Yتعيين من أربعة أرقام
٪ jرقم اليوم من السنة (001 - 366)
٪ يورقم الأسبوع من السنة (00 - 53) ، الأسبوع يبدأ الأحد
٪ ثرقم الأسبوع من السنة (00 - 53) ، الأسبوع يبدأ الاثنين

وفقًا لذلك ، "26 سبتمبر 2019" هو الاسم الكامل للشهر واليوم والسنة. يمكنك وصف تنسيق التاريخ هذا مع المشغلين كما يلي: "%B %d, %Y" .


حيث:


  • %B - اسم الشهر الكامل
  • %d - رقم اليوم في الشهر
  • %Y - تعيين مكون من أربعة أرقام

عند وصف تنسيق التاريخ ، من المهم تضمين جميع الأحرف الإضافية من السلسلة ، مثل الشرطات والفواصل والنقاط والمسافات وما إلى ذلك. في المثال الخاص بي ، "26 سبتمبر 2019" ، يتم وضع فاصلة بعد التاريخ ، ويجب أيضًا وضع فاصلة في وصف التنسيق: "%B %d, %Y" .


هناك مواقف عندما تحصل على تاريخ لا يناسب التنسيقات القياسية فقط (YYYY-MM-DD أو YYYY / MM / DD) ، ولكن أيضًا بلغة تختلف عن الإعداد الافتراضي في نظام التشغيل الخاص بك. على سبيل المثال ، قمت بتنزيل البيانات حيث يشار إلى التاريخ في النموذج التالي: "15 ديسمبر 2019". قبل تحويل هذه السلسلة إلى تاريخ ، تحتاج إلى تغيير الإعدادات المحلية.


 #   Sys.setlocale("LC_TIME", "Russian") #     as.Date(" 15, 2019 .", format = "%B %d, %Y") 

استرداد مكونات التاريخ في Base R


لا توجد وظائف كثيرة في R الأساسية تسمح لك باستخراج أي جزء من التاريخ من كائن من فئة Date .


 current_date <- Sys.Date() #   weekdays(current_date) #     months(current_date) #      quarters(current_date) #      

بالإضافة إلى الفئة الرئيسية لكائنات Date في القاعدة R ، يوجد نوعان آخران من البيانات يخزنان الطابع الزمني: POSIXlt ، POSIXct . الفرق الرئيسي بين هذه الفئات والتاريخ هو أنها تخزن الوقت بالإضافة إلى التاريخ.


 #      current_time <- Sys.time() #    current_time class(current_time) 

 # "POSIXct" "POSIXt" 

ترجع الدالة Sys.time() التاريخ والوقت الحاليين بتنسيق POSIXct . يشبه هذا التنسيق معنى UNIXTIME ، ويخزن عدد الثواني منذ بداية عصر UNIX (منتصف الليل (UTC) من 31 ديسمبر 1969 إلى 1 يناير 1970) .


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


 #      current_time_ct <- Sys.time() #    POSIXlt current_time_lt <- as.POSIXlt(current_time_ct) #      current_time_lt$sec #  current_time_lt$min #  current_time_lt$hour #  current_time_lt$mday #   current_time_lt$mon #  current_time_lt$year #  current_time_lt$wday #   current_time_lt$yday #   current_time_lt$zone #   

يتم تنفيذ تحويل البيانات الرقمية as.POSIXct() إلى تنسيقات POSIX * بواسطة الدالتين as.POSIXct() و as.POSIXlt() . هذه الوظائف لديها مجموعة صغيرة من الحجج.


  • x - رقم أو سلسلة أو كائن فئة التاريخ المراد تحويلها ؛
  • tz - المنطقة الزمنية ، الافتراضي هو "GMT" ؛
  • تنسيق - وصف تنسيق التاريخ الذي يتم فيه تقديم البيانات التي تم تمريرها في الوسيطة x ؛
  • الأصل - يستخدم فقط عند تحويل رقم إلى POSIX ، تحتاج إلى تمرير كائن تاريخ إلى هذه الوسيطة ، والوقت الذي يتم فيه حساب الثواني. عادة ما تستخدم للترجمة من UNIXTIME.

إذا تم تقديم بيانات التاريخ والوقت الخاصة بك في UNIXTIME ، فاستخدم المثال التالي لتحويلها إلى تاريخ مفهوم وقابل للقراءة:


 #  UNIXTIME    as.POSIXlt(1570084639, origin = "1970-01-01") 

في الأصل يمكنك تحديد أي الطابع الزمني. على سبيل المثال ، إذا تم الإشارة إلى التاريخ والوقت في بياناتك على أنه عدد الثواني التي تبدأ في 15 سبتمبر 2019 12:15 ، ثم لتحويلها إلى تاريخ ، استخدم:


 #  UNIXTIME       15  2019 12:15 as.POSIXlt(1546123, origin = "2019-09-15 12:15:00") 

العمل مع التمور مع حزمة lubridate


ربما lubridate الحزمة الأكثر شعبية للعمل مع التواريخ في R. وهي توفر لك ثلاثة فصول إضافية.


  • فترات - المدة ، أي عدد الثواني بين طوابع زمنية ؛
  • فترات - تسمح لك الفترات بإجراء عمليات حسابية بين تواريخ الفواصل الزمنية القابلة للقراءة البشرية: الأيام والشهور والأسابيع وما إلى ذلك ؛
  • الفواصل الزمنية - الكائنات التي توفر النقطة الأولية والنهائية في الوقت المناسب.

يتم إجراء تثبيت حزم إضافية في اللغة R بواسطة install.packages() الدالة القياسية.


تثبيت الحزمة lubridate :


 install.packages("lubridate") 

تحويل النص إلى تاريخ باستخدام تزييت


تعمل وظائف حزمة lubridate تبسيط عملية تحويل النص إلى تاريخ بشكل كبير ، كما تتيح لك تنفيذ أي عمليات حسابية بالتواريخ والأوقات.


ستساعدك الوظائف today() now() الحصول على التاريخ أو التاريخ والوقت الحاليين.


 today() #   now() #     

لتحويل سلسلة إلى تاريخ ، تحتوي مجموعة lubridate على مجموعة كاملة من الوظائف التي تتكون أسماؤها دائمًا من ثلاثة أحرف ، وتشير إلى سلسلة من مكونات التاريخ:


  • ذ - سنة
  • م - شهر
  • د - اليوم

قائمة وظائف لتحويل النص إلى تاريخ عبر lubridate
  • ymd()
  • ydm()
  • mdy()
  • myd()
  • dmy()
  • dym()
  • yq()

بعض الأمثلة لتحويل السلاسل إلى التواريخ:


 ymd("2017 jan 21") mdy("March 20th, 2019") dmy("1st april of 2018") 

كما ترى ، فإن lubridate أكثر فاعلية في التعرف على أوصاف التاريخ في شكل نص ، ويسمح لك بتحويل النص إلى تاريخ دون استخدام عوامل تشغيل إضافية لوصف التنسيق.


استرداد مكونات التاريخ باستخدام حزمة lubridate


باستخدام lubridate أيضًا ، يمكنك الحصول على أي مكون من تاريخ:


 dt <- ymd("2017 jan 21") year(dt) #  month(dt) #  mday(dt) #    yday(dt) #    wday(dt) #   

العمليات الحسابية مع التواريخ


لكن الوظيفة الأكثر أهمية والأساسية في lubridate هي القدرة على إجراء عمليات حسابية متعددة مع التواريخ.


يتم تقريب التاريخ بواسطة ثلاث وظائف:


  • floor_date - التقريب إلى أقرب وقت مضى
  • ceiling_date - التقريب إلى المستقبل القريب
  • round_date - التقريب إلى أقرب وقت

تحتوي كل من هذه الوظائف على وسيطة وحدة ، والتي تتيح لك تحديد وحدة التقريب: الثانية ، الدقيقة ، الساعة ، اليوم ، الأسبوع ، الشهر ، شهرين ، الربع ، الموسم ، نصف العام ، السنة


 dt <- ymd("2017 jan 21") round_date(dt, unit = "month") #    round_date(dt, unit = "3 month") #   3  round_date(dt, unit = "quarter") #    round_date(dt, unit = "season") #    round_date(dt, unit = "halfyear") #    

لذلك ، دعونا نتعرف على كيفية الحصول على تاريخ سيكون بعد 8 أيام من التاريخ الحالي وإجراء العديد من العمليات الحسابية الأخرى بين تاريخين.


 today() + days(8) #     8  today() - months(2) #    2   today() + weeks(12) #     12  today() - years(2) #    2   

العمل المبسط مع فترات ، حزمة timeperiodsR.


timeperiodsR هي حزمة جديدة للعمل مع التواريخ التي تم نشرها على CRAN في سبتمبر 2019.


تثبيت حزمة timeperiodsR :


 install.packages("timeperiodsR") 

الغرض الرئيسي هو تحديد فاصل زمني معين بسرعة بالنسبة إلى تاريخ معين. على سبيل المثال ، باستخدام وظائفها ، يمكنك بسهولة:


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

اسم جميع وظائف حزمة timeperiodsR بديهية ، وتتكون من جزأين: direction _ interval ، حيث:


  • الاتجاه الذي من الضروري التحرك فيه بالنسبة إلى تاريخ محدد: last_n ، السابق ، هذا ، التالي ، next_n.
  • الفاصل الزمني لحساب الفترة: اليوم ، الأسبوع ، الشهر ، الربع ، السنة.

مجموعة ميزات كاملة:
  • last_n_days()
  • last_n_weeks()
  • last_n_months()
  • last_n_quarters()
  • last_n_years()
  • previous_week()
  • previous_month()
  • previous_quarter()
  • previous_year()
  • this_week()
  • this_month()
  • this_quarter()
  • this_year()
  • next_week()
  • next_month()
  • next_quarter()
  • next_year()
  • next_n_days()
  • next_n_weeks()
  • next_n_months()
  • next_n_quarters()
  • next_n_years()
  • custom_period()

فترات زمنية في timeperiodsR


هذه الوظائف مفيدة عندما تحتاج إلى إنشاء تقارير تستند إلى بيانات من الأسبوع الماضي أو الشهر الماضي. للحصول على الشهر الماضي ، استخدم وظيفة بنفس الاسم previous_month() :


 prmonth <- previous_month() 

بعد ذلك سيكون لديك كائن prprth من فئة tpr ، حيث يمكنك بسهولة الحصول على المكونات التالية:


  • تاريخ بدء الفترة ، في مثالنا هذا هو الشهر الماضي
  • تاريخ انتهاء الفترة
  • عدد الأيام المدرجة في هذه الفترة
  • تسلسل التواريخ المدرجة في هذه الفترة

علاوة على ذلك ، يمكنك الحصول على كل مكون بطرق مختلفة:


 #    prmonth$start start(prmonth) #    prmonth$end end(prmonth) #   prmonth$sequence seq(prmonth) #      prmonth$length length(prmonth) 

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


 previous_month(part = "start") #   previous_month(part = "end") #   previous_month(part = "sequence") #   previous_month(part = "length") #     

لذلك ، دعونا ننظر في جميع الوسائط المتاحة في وظائف حزمة timeperiodsR :


  • x - التاريخ المرجعي الذي سيتم حساب الفترة الزمنية منه ؛ بشكل افتراضي ، التاريخ الحالي ؛
  • n - عدد الفواصل التي سيتم تضمينها في الفترة ، على سبيل المثال ، 3 أسابيع سابقة ؛
  • part - أي مكون من كائن tpr تحتاج إلى الحصول عليه ، بشكل افتراضي all ؛
  • week_start - الوسيطة موجودة فقط في وظائف العمل مع أسابيع ، وتتيح لك تحديد عدد يوم الأسبوع الذي سيتم اعتبار بدايته ، بشكل افتراضي ، بداية الأسبوع هي يوم الاثنين ، ولكن يمكنك تحديد أي من 1 - الاثنين إلى 7 - الأحد.

وبالتالي ، يمكنك حساب أي فترة زمنية بالنسبة للتاريخ الحالي أو أي تاريخ آخر ، سأقدم بعض الأمثلة الأخرى:




 #  3   #  6  2019  #   -  last_n_weeks(x = "2019-10-06", n = 3, week_start = 1) 

  Time period: from 9 September of 2019, Monday to 29 September of 2019, Sunday 

6 أكتوبر هو الأحد:
6 أكتوبر 2019


نحتاج إلى فترة ستستغرق 3 أسابيع بالنسبة إلى 6 أكتوبر. لا يشمل أسبوع 6 أكتوبر. وفقًا لذلك ، هذه هي الفترة من 9 إلى 29 سبتمبر.


3 أسابيع تبدأ من 6 أكتوبر 2019




 #     4  #  16  2019  previous_month(x = "2019-09-16", n = 4) 

  Time period: from 1 May of 2019, Wednesday to 31 May of 2019, Friday 

في هذا المثال ، نحن مهتمون بالشهر الذي كان قبل 4 أشهر ، إذا تابعنا من 16 سبتمبر 2019 ، وفقًا لذلك ، فقد كان مايو 2019.


تصفية متجه التاريخ مع timeperiodsR


هناك العديد من العوامل لتصفية التواريخ في timeperiodsR :


  • ٪ left_out٪ - يقارن بين كائنين من فئة tpr ، ويعيد القيمة من اليسار ، والتي ليست في اليمين.
  • ٪ left_in٪ - يقارن بين كائنين من فئة tpr ، ويعيد التواريخ من الكائن الأيسر المضمنة في الكائن الأيمن.
  • ٪ right_out٪ - يقارن بين كائنين من فئة tpr ، ويعيد القيمة من اليمين ، والتي تكون غائبة في اليسار.
  • ٪ right_in٪ - يقارن بين كائنين من فئة tpr ، ويعيد التواريخ من الكائن الأيمن الموجودة في اليسار.

 period1 <- this_month("2019-11-07") period2 <- previous_week("2019-11-07") period1 %left_in% period2 #    period1    period2 period1 %left_out% period2 #    period1     period2 period1 %right_in% period2 #    period2    period1 period1 %right_out% period2 #    period2     period1 

استنتاج


درسنا بالتفصيل فئات الكائنات التي تم تصميمها في لغة R للعمل مع التواريخ. يمكنك الآن أيضًا إجراء العمليات الحسابية في التواريخ ، والحصول بسرعة على أي فترات زمنية باستخدام حزمة timeperiodsR .


إذا كنت مهتمًا بلغة R ، فأنا أدعوك للاشتراك في قناة R4marketing الخاصة بي ، حيث أشارك يوميًا مواد مفيدة حول استخدام لغة R في حل المهام اليومية.

Source: https://habr.com/ru/post/ar469215/


All Articles