Travailler avec des dates dans R (capacités de base, ainsi que les packages lubridate et timeperiodsR)

Obtenez la date actuelle dans n'importe quel langage de programmation, une opération équivalente à "Bonjour tout le monde !" Le langage R ne fait pas exception.

Dans cet article, nous verrons comment fonctionne l'utilisation des dates dans la syntaxe de base du langage R, et examinerons également plusieurs packages utiles qui étendent ses capacités lors de l'utilisation des dates :

  • lubridate — un package qui vous permet d'effectuer des calculs arithmétiques entre les dates ;
  • timeperiodsR — un package pour travailler avec les intervalles de temps et leurs composants.

Travailler avec des dates dans R (capacités de base, ainsi que les packages lubridate et timeperiodsR)

Teneur

Si vous êtes intéressé par l'analyse de données, et en particulier le langage R, vous pourriez être intéressé par mon télégramme и Youtube canaux. La plupart du contenu est dédié au langage R.

  1. Travailler avec des dates dans la syntaxe R de base
    1.1. Convertir le texte en date
    1.2. Extraction des composants de date dans R de base
  2. Travailler avec des dates à l'aide du package lubridate
    2.1. Convertir le texte en date à l'aide de Lubridate
    2.2. Extraction des composants de date à l'aide du package lubridate
    2.3. Opérations arithmétiques avec des dates
  3. Travail simplifié avec les périodes, package timeperiodsR
    3.1. Intervalles de temps en périodes de tempsR
    3.2. Filtrage d'un vecteur de dates à l'aide de timeperiodsR
  4. Conclusion

Travailler avec des dates dans la syntaxe R de base

Convertir le texte en date

Basic R dispose d'un ensemble de fonctions pour travailler avec des dates. L'inconvénient de la syntaxe de base est que la casse des noms de fonctions et des arguments est très dispersée et n'a pratiquement aucun lien logique. Cependant, vous devez connaître les fonctions de base du langage, nous allons donc commencer par elles.

Le plus souvent, lors du chargement de données dans R, à partir de fichiers CSV ou d'autres sources, vous recevez une date sous forme de texte. Pour convertir ce texte dans le type de données correct, utilisez la fonction 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"

Par défaut as.Date() accepte la date dans deux formats : AAAA-MM-JJ ou AAAA/MM/JJ.
Si votre ensemble de données contient des dates dans un autre format, vous pouvez utiliser l'argument format.

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

le format accepte les opérateurs sous forme de chaîne désignant n'importe quel intervalle de temps et son format ; les valeurs les plus couramment utilisées sont indiquées dans le tableau ci-dessous :

Format
description

%d
Numéro du jour dans le mois

%a
Abréviation du nom du jour de la semaine

%A
Nom complet du jour de la semaine

%w
Numéro du jour de la semaine (0-6, où 0 est dimanche)

%m
Désignation du mois à deux chiffres (01-12)

%b
Abréviation du nom du mois (avril, mars, …)

%B
Nom complet du mois

%y
Désignation de l'année à deux chiffres

%Y
Désignation de l'année à quatre chiffres

%j
Numéro du jour dans l'année (001 - 366)

%U
Numéro de semaine dans l'année (00 - 53), début de semaine dimanche

%W
Numéro de semaine dans l'année (00 - 53), début de semaine lundi

Ainsi, « 26 septembre 2019 » est le nom complet du mois, de la date et de l'année. Ce format de date peut être décrit à l'aide des opérateurs comme suit :"%B %d, %Y".

Où:

  • %B — Nom complet du mois
  • %d — Numéro du jour dans le mois
  • %Y — Désignation de l'année à quatre chiffres

Lorsque vous décrivez le format de date, il est important d'inclure tous les caractères supplémentaires de votre chaîne, tels que les tirets, les virgules, les points, les espaces, etc. Dans mon exemple, « 26 septembre 2019 », il y a une virgule après la date, et vous devez également mettre une virgule dans la description du format :"%B %d, %Y".

Il existe des situations où vous recevez une date qui non seulement ne correspond pas aux formats standards (AAAA-MM-JJ ou AAAA/MM/JJ), mais aussi dans une langue différente de celle par défaut installée sur votre système d'exploitation. Par exemple, vous avez téléchargé des données dont la date est indiquée comme ceci : « 15 décembre 2019 ». Avant de convertir cette chaîne en date, vous devez modifier les paramètres régionaux.

# Меняем локаль
Sys.setlocale("LC_TIME", "Russian")
# Конвертируем строку в дату
as.Date("Декабрь 15, 2019 г.", format = "%B %d, %Y")

Extraction des composants de date dans R de base

Il n'y a pas beaucoup de fonctions dans R de base qui vous permettent d'extraire n'importe quelle partie d'une date à partir d'un objet de classe Date.

current_date <- Sys.Date() # текущая дата
weekdays(current_date)     # получить номер дня недели
months(current_date)       # получить номер месяца в году
quarters(current_date)     # получить номер квартала в году

En plus de la classe d'objet principale Date dans le R de base, il existe 2 autres types de données qui stockent un horodatage : POSIX, POSIXct. La principale différence entre ces classes et Date est-ce en plus de la date à laquelle ils stockent l'heure.

# получить текущую дату и время
current_time <- Sys.time()

# узнать класс объекта current_time 
class(current_time)

# "POSIXct" "POSIXt"

Fonction Sys.time() renvoie la date et l'heure actuelles au format POSIXct. Ce format a une signification similaire à UNIXTIME, et stocke le nombre de secondes depuis le début de l'ère UNIX (minuit (UTC) du 31 décembre 1969 au 1er janvier 1970).

classe POSIX il stocke également l'heure et la date, ainsi que tous leurs composants. Il s’agit donc d’un objet avec une structure plus complexe, mais à partir duquel il est facile d’obtenir n’importe quel composant de date et d’heure car En fait POSIX это liste.

# Получаем текущую дату и время
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  # часовой пояс

Conversion de données numériques et textuelles en formats POIX* réalisé par les fonctions as.POSIXct() и as.POSIXlt(). Ces fonctions ont un petit ensemble d'arguments.

  • x — Nombre, chaîne ou objet de classe Date, qui doit être converti ;
  • tz — Fuseau horaire, « GMT » par défaut ;
  • format — Description du format de date dans lequel les données transmises à l'argument x sont représentées ;
  • origin — Utilisé uniquement lors de la conversion d'un nombre en POSIX ; vous devez transmettre à cet argument un objet date et une heure à partir desquels les secondes sont comptées. Généralement utilisé pour la traduction depuis UNIXTIME.

Si vos informations de date et d'heure sont dans UNIXTIME, puis pour les convertir en une date claire et lisible, utilisez l'exemple suivant :

# Конвертируем UNIXTIME в читаемую дату 
as.POSIXlt(1570084639,  origin = "1970-01-01")

Dans Origin, vous pouvez spécifier n'importe quel horodatage. Par exemple, si vos données contiennent la date et l'heure sous forme de nombre de secondes depuis le 15 septembre 2019 à 12h15, alors pour les convertir en date, utilisez :

# Конвертируем UNIXTIME в дату учитывая что начало отсчёта 15 сентября 2019 12:15
as.POSIXlt(1546123,  origin = "2019-09-15 12:15:00")

Travailler avec des dates à l'aide du package lubridate

lubridate Peut-être le package le plus populaire pour travailler avec des dates dans le langage R. Il vous offre trois classes supplémentaires.

  • durées - durée, c'est-à-dire nombre de secondes entre deux horodatages ;
  • périodes - les périodes vous permettent d'effectuer des calculs entre des dates dans des intervalles lisibles par l'homme : jours, mois, semaines, etc. ;
  • intervalles - objets qui fournissent le point de départ et de fin dans le temps.

L'installation de packages supplémentaires en langage R s'effectue à l'aide de la fonction standard install.packages().

Installation du paquet lubridate:

install.packages("lubridate")

Convertir le texte en date à l'aide de Lubridate

Caractéristiques du forfait lubridate simplifie considérablement le processus de conversion de texte en date et vous permet également d'effectuer des opérations arithmétiques avec des dates et des heures.

Les fonctions vous aideront à obtenir la date actuelle ou la date et l'heure today() и now().

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

Pour convertir une chaîne en date dans lubridate Il existe toute une famille de fonctions dont les noms sont toujours composés de trois lettres, et indiquent la séquence des composants de date :

  • y - année
  • m - mois
  • jour j

Liste des fonctions pour convertir du texte en date via lubridate

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

Quelques exemples de conversion de chaînes en dates :

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

Comme vous pouvez le voir lubridate Il est beaucoup plus efficace pour reconnaître les descriptions de date sous forme de texte et vous permet de convertir du texte en date sans utiliser d'opérateurs supplémentaires pour décrire le format.

Extraction des composants de date à l'aide du package lubridate

Utilisant également lubridate vous pouvez obtenir n'importe quel composant à partir d'une date :

dt <- ymd("2017 jan 21")

year(dt)  # год
month(dt) # месяц
mday(dt)  # день в месяце
yday(dt)  # день в году
wday(dt)  # день недели

Opérations arithmétiques avec des dates

Mais la fonctionnalité la plus importante et la plus basique lubridate est la capacité d'effectuer diverses opérations arithmétiques avec des dates.

L'arrondi des dates est effectué par trois fonctions :

  • floor_date — arrondir au passé le plus proche
  • ceiling_date — arrondi au futur proche
  • round_date - arrondi à l'heure la plus proche

Chacune de ces fonctions a un argument unitéqui permet de préciser l'unité d'arrondi : seconde, minute, heure, jour, semaine, mois, bimensuel, trimestre, saison, semestriel, année

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") # округлить до полугодия

Voyons donc comment obtenir une date postérieure de 8 jours à la date actuelle et effectuons divers autres calculs arithmétiques entre les deux dates.

today() + days(8)   # какая дата будет через 8 дней
today() - months(2) # какая дата была 2 месяца назад
today() + weeks(12) # какая дата будет через 12 недель
today() - years(2)  # какая дата была 2 года назад

Travail simplifié avec les périodes, package timeperiodsR.

timeperiodsR — un nouveau package pour travailler avec des dates qui a été publié sur CRAN en septembre 2019.

Installation du paquet timeperiodsR:

install.packages("timeperiodsR")

L'objectif principal est de déterminer rapidement un certain intervalle de temps par rapport à une date donnée. Par exemple, grâce à ses fonctions, vous pouvez facilement :

  • Obtenez la semaine, le mois, le trimestre ou l’année écoulés dans R.
  • Obtenez un nombre spécifié d'intervalles de temps par rapport à une date, par exemple les 4 dernières semaines.
  • Il est facile d'extraire ses composants de l'intervalle de temps résultant : la date de début et de fin, le nombre de jours inclus dans l'intervalle, la séquence complète des dates qui y sont incluses.

Nom de toutes les fonctions du package timeperiodsR sont intuitifs et se composent de deux parties : direction_intervalle, où:

  • direction dans lequel vous devez vous déplacer par rapport à une date donnée : last_n, previous, this, next, next_n.
  • temporaire intervalle pour calculer la période : jour, semaine, mois, trimestre, année.

Ensemble complet de fonctionnalités :

  • 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()

Intervalles de temps en périodes de tempsR

Ces fonctions sont utiles dans les cas où vous devez créer des rapports basés sur les données de la semaine ou du mois dernier. Pour obtenir le dernier mois, utilisez la fonction du même nom previous_month():

prmonth <- previous_month()

Après quoi vous aurez un objet mois pr Classe tpr, à partir duquel les composants suivants peuvent être facilement obtenus :

  • la date de début de la période, dans notre exemple il s'agit du dernier mois
  • date de fin de période
  • nombre de jours inclus dans la période
  • séquence de dates incluses dans la période

De plus, vous pouvez obtenir chacun des composants de différentes manières :

# первый день периода
prmonth$start
start(prmonth)

# последний день периода
prmonth$end
end(prmonth)

# последовательность дат
prmonth$sequence
seq(prmonth)

# количество дней входящих в период
prmonth$length
length(prmonth)

Vous pouvez également obtenir n'importe lequel des composants en utilisant l'argument partie, qui est présent dans chacune des fonctions du package. Valeurs possibles : début, fin, séquence, durée.

previous_month(part = "start")    # начало периода
previous_month(part = "end")      # конец периода
previous_month(part = "sequence") # последовательность дат
previous_month(part = "length")   # количество дней в периоде

Regardons donc tous les arguments disponibles dans les fonctions du package timeperiodsR:

  • x — La date de référence à partir de laquelle le délai sera calculé, la date du jour par défaut ;
  • n — Le nombre d'intervalles qui seront inclus dans la période, par exemple les 3 semaines précédentes ;
  • part — Quel composant de l'objet tpr vous devez obtenir, par défaut all;
  • week_start — L'argument n'est présent que dans les fonctions permettant de travailler avec les semaines et permet de définir le numéro du jour de la semaine qui sera considéré comme son début. Par défaut, le début de la semaine est lundi, mais vous pouvez en définir n'importe quel à partir de 1 - lundi à 7 - dimanche.

Ainsi, vous pouvez calculer n'importe quelle période par rapport à la date actuelle ou à toute autre date donnée ; voici quelques exemples supplémentaires :

# получить 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

Le 6 octobre est dimanche :
Travailler avec des dates dans R (capacités de base, ainsi que les packages lubridate et timeperiodsR)

Nous avons besoin d'une période qui, par rapport au 6 octobre, prendra les 3 semaines précédentes. Sans compter la semaine qui comprend le 6 octobre lui-même. Il s'agit donc de la période du 9 septembre au 29 septembre.

Travailler avec des dates dans R (capacités de base, ainsi que les packages lubridate et timeperiodsR)

# получить месяц отстающий на 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

Dans cet exemple, on s'intéresse au mois qui était il y a 4 mois, si on part du 16 septembre 2019, alors c'était mai 2019.

Filtrage d'un vecteur de dates à l'aide de timeperiodsR

Pour filtrer les dates dans timeperiodsR Il existe plusieurs opérateurs :

  • %left_out% - compare deux objets de classe tpr et renvoie la valeur de celui de gauche qui manque dans celui de droite.
  • %left_in% - compare deux objets de la classe tpr et renvoie les dates de l'objet de gauche qui sont incluses dans celui de droite.
  • %right_out% - compare deux objets de classe tpr et renvoie la valeur de celui de droite qui manque dans celui de gauche.
  • %right_in% - compare deux objets de la classe tpr et renvoie les dates de l'objet de droite qui sont présentes dans celui de gauche.

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

Au colis timeperiodsR il y en a un officiel en russe Liste de lecture YouTube.

Conclusion

Nous avons examiné en détail les classes d'objets conçues dans le langage R pour travailler avec des dates. Vous pouvez également désormais effectuer des opérations arithmétiques sur les dates et obtenir rapidement n'importe quelle période à l'aide du package. timeperiodsR.

Si le langage R vous intéresse, je vous invite à vous abonner à ma chaîne télégramme R4marketing, dans lequel je partage quotidiennement du matériel utile sur l'utilisation du langage R pour résoudre vos problèmes quotidiens.

Source: habr.com

Ajouter un commentaire