په R کې د نیټو سره کار کول (اساسي وړتیاوې، په بیله بیا د لبریډیټ او وخت دورې آر کڅوړې)

اوسنۍ نیټه په هره پروګرامینګ ژبه کې ترلاسه کړئ، یو عملیات چې د "سلام نړۍ!" سره برابر دی. د R ژبه استثنا نه ده.

په دې مقاله کې، موږ به وګورو چې څنګه د نیټو سره کار کول د R ژبې په اساسي ترکیب کې کار کوي، او همدارنګه یو څو ګټور کڅوړې وګورو چې د نیټې سره کار کولو پر مهال د هغې وړتیاوې پراخوي:

  • lubridate - یوه بسته چې تاسو ته اجازه درکوي د نیټو تر مینځ د ریاضي محاسبې ترسره کړئ؛
  • timeperiodsR - د وخت وقفو او د دوی برخو سره د کار کولو لپاره کڅوړه.

په R کې د نیټو سره کار کول (اساسي وړتیاوې، په بیله بیا د لبریډیټ او وخت دورې آر کڅوړې)

منځپانګې

که تاسو د ډیټا تحلیلونو سره علاقه لرئ ، او په ځانګړي توګه د R ژبه ، تاسو ممکن زما سره علاقه ولرئ telegram и یوتیوب چینلونه ډیری مینځپانګه د R ژبې ته وقف شوې ده.

  1. په لومړني R ترکیب کې د نیټو سره کار کول
    1.1. متن تاریخ ته بدل کړئ
    1.2. په بنسټیز R کې د نیټې برخې استخراج
  2. د لبریډیټ کڅوړې په کارولو سره د نیټو سره کار کول
    2.1. د لبریډیټ په کارولو سره متن نیټې ته بدل کړئ
    2.2. د لبریډیټ کڅوړې په کارولو سره د نیټې برخې استخراج کول
    2.3. د نیټو سره ریاضي عملیات
  3. د دورې، د وخت دورې آر پیکج سره ساده کار
    3.1. د وخت وقفې په وخت کې R
    3.2. د وخت دورې په کارولو سره د نیټو ویکتور فلټر کول
  4. پایلې

په لومړني R ترکیب کې د نیټو سره کار کول

متن تاریخ ته بدل کړئ

بنسټیز R د نیټو سره د کار کولو لپاره د دندو مجموعه لري. د اساسي ترکیب نیمګړتیا دا ده چې د فنکشن نومونو او دلیلونو قضیه خورا پراخه ده او په عملي توګه هیڅ منطقي اړیکه نلري. په هرصورت، تاسو اړتیا لرئ چې د ژبې بنسټیز کارونه وپیژنئ، نو موږ به یې پیل کړو.

ډیری وختونه کله چې د csv فایلونو، یا نورو سرچینو څخه R ته ډیټا پورته کول، تاسو د متن په توګه نیټه ترلاسه کوئ. د دې متن سم ډیټا ډول ته د بدلولو لپاره ، فنکشن وکاروئ 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")

شکل د سټرینګ په شکل کې آپریټرونه مني چې هر وخت وقفه او د هغې بڼه په ګوته کوي؛ ترټولو عام کارول شوي ارزښتونه په لاندې جدول کې ښودل شوي:

بڼه
شرح

%d
په میاشت کې د ورځې شمیر

%a
د اونۍ د ورځې نوم لپاره لنډیز

%A
د اونۍ د ورځې بشپړ نوم

%w
د اونۍ د ورځې شمیر (0-6، چیرته چې 0 یکشنبه ده)

%m
دوه عددي میاشت نومول (01-12)

%b
د میاشتې نوم لنډیز (اپریل، مارچ، ...)

%B
د بشپړ میاشتې نوم

%y
د کال دوه عددي نومول

%Y
د څلور عددي کال نومول

%j
په کال کې د ورځې شمیر (001 - 366)

%U
په کال کې د اونۍ شمیره (00 - 53)، د اونۍ پیل یکشنبه

%W
په کال کې د اونۍ شمیره (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")

په بنسټیز R کې د نیټې برخې استخراج

په لومړني R کې ډیری دندې شتون نلري چې تاسو ته اجازه درکوي د ټولګي څیز څخه د نیټې کومه برخه راوباسي نېټه.

current_date <- Sys.Date() # текущая дата
weekdays(current_date)     # получить номер дня недели
months(current_date)       # получить номер месяца в году
quarters(current_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() и 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 شاید په R ژبه کې د نیټو سره کار کولو لپاره خورا مشهور کڅوړه. دا تاسو ته درې اضافي ټولګي چمتو کوي.

  • موده - موده، د بیلګې په توګه د دوو وختونو تر منځ د ثانیو شمیر؛
  • دوره - دورې تاسو ته اجازه درکوي چې د نیټو تر مینځ د انسان د لوستلو وړ وقفو کې محاسبه وکړئ: ورځې، میاشتې، اونۍ، او داسې نور؛
  • وقفې - هغه شیان چې په وخت کې د پیل او پای ټکی چمتو کوي.

په R ژبه کې د اضافي کڅوړو نصب کول د معیاري فنکشن په کارولو سره ترسره کیږي install.packages().

د کڅوړې نصب کول lubridate:

install.packages("lubridate")

د لبریډیټ په کارولو سره متن نیټې ته بدل کړئ

د بسته بندۍ ځانګړتیاوې lubridate د متن په تاریخ کې د بدلولو پروسه د پام وړ ساده کړئ، او تاسو ته اجازه درکوي چې د نیټې او وختونو سره هر ډول ریاضي عملیات ترسره کړئ.

دندې به تاسو سره د اوسني نیټه یا نیټه او وخت ترلاسه کولو کې مرسته وکړي today() и now().

today() # текущая дата
now()   # текущая дата и время

په تاریخ کې تار بدلولو لپاره lubridate د دندو ټوله کورنۍ شتون لري چې نومونه یې تل له دریو حروفو څخه جوړ شوي، او د نیټې اجزاو ترتیب په ګوته کوي:

  • y - کال
  • m - میاشت
  • d - ورځ

د لبریډیټ له لارې نیټې ته متن بدلولو لپاره د دندو لیست

  • ymd()
  • ydm()
  • mdy()
  • myd()
  • dmy()
  • dym()
  • yq()

تاریخ ته د تارونو بدلولو لپاره ځینې مثالونه:

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

څنګه چی ته ګوری 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 - د نیټو سره د کار کولو لپاره یو نوی کڅوړه چې په سپتمبر 2019 کې په CRAN کې خپره شوې.

د کڅوړې نصب کول timeperiodsR:

install.packages("timeperiodsR")

اصلي موخه دا ده چې ژر تر ژره د یوې ټاکلې نیټې سره سم یو ټاکلی وخت وقفه وټاکي. د مثال په توګه، د دې دندو په کارولو سره تاسو کولی شئ په اسانۍ سره:

  • په R کې تیره اونۍ، میاشت، ربع یا کال ترلاسه کړئ.
  • د نیټې په پرتله د وخت وقفې مشخص شمیر ترلاسه کړئ، د بیلګې په توګه تیرې 4 اونۍ.
  • دا اسانه ده چې د پایلې د وخت وقفې څخه د هغې برخې راوباسئ: د پیل او پای نیټه، د ورځو شمیر چې په وقفه کې شامل دي، د نیټې ټول ترتیب چې پدې کې شامل دي.

د بسته بندۍ د ټولو دندو نوم timeperiodsR هوښيار دي او دوه برخې لري: لور_وقفهچیرته:

  • لور په کوم کې چې تاسو اړتیا لرئ د یوې ټاکلې نیټې پورې اړوند حرکت وکړئ: وروستی_n، پخوانی، دا، راتلونکی، راتلونکی_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()

د وخت وقفې په وخت کې R

دا دندې په هغو قضیو کې ګټورې دي چیرې چې تاسو اړتیا لرئ د تیرې اونۍ یا میاشتې معلوماتو پراساس راپورونه جوړ کړئ. د تیرې میاشتې ترلاسه کولو لپاره، د ورته نوم فعالیت وکاروئ previous_month():

prmonth <- previous_month()

له هغې وروسته به تاسو یو اعتراض ولرئ میاشت کلونه 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

د اکتوبر شپږمه یکشنبه ده:
په R کې د نیټو سره کار کول (اساسي وړتیاوې، په بیله بیا د لبریډیټ او وخت دورې آر کڅوړې)

موږ یوې دورې ته اړتیا لرو چې د اکتوبر 6 پورې اړوند به تیرې 3 اونۍ وخت ونیسي. د اونۍ په شمول نه چې د اکتوبر 6 پخپله پکې شامل وي. په دې اساس، دا د سپتمبر له 9 څخه تر سپتمبر 29 پورې موده ده.

په R کې د نیټو سره کار کول (اساسي وړتیاوې، په بیله بیا د لبریډیټ او وخت دورې آر کڅوړې)

# получить месяц отстающий на 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 ډیری چلونکي شتون لري:

  • %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

په کڅوړه کې timeperiodsR دلته رسمي، روسي ژبه ده د یوټیوب پلی لیست.

پایلې

موږ د شیانو ټولګي په تفصیل سره معاینه کړل چې د نیټې سره کار کولو لپاره په R ژبه کې ډیزاین شوي. همدا اوس تاسو کولی شئ په نیټو کې ریاضي عملیات ترسره کړئ، او د بسته بندۍ په کارولو سره هر وخت وخت په چټکۍ سره ترلاسه کړئ timeperiodsR.

که تاسو د R ژبې سره علاقه لرئ، زه تاسو ته بلنه درکوم چې زما د ټیلیګرام چینل کې ګډون وکړئ R4 بازارموندنهپه کوم کې چې زه ستاسو د ورځني ستونزو په حل کې د R ژبې کارولو په اړه هره ورځ ګټور توکي شریکوم.

سرچینه: www.habr.com

Add a comment