تغییرات فروش در بازههای زمانی معمولا یکی از شاخصهایی است که همیشه توسط کسب و کارها دنبال میشود. فرمول محاسبه نرخ تغییرات فروش ساده است:
مشخص است که اگر عدد حاصل از فرمول بالا را در ۱۰۰ ضرب کنیم، درصد تغییرات فروش را محاسبه کردهایم. برای این کار میتوانیم از دستورات lead
و lag
در کتابخانه dplyr
استفاده کنیم.
نحوه عملکرد lead و lag
این دو تابع عملکردی ساده دارند. lead
مقدار بعدی و lag
مقدار قبلی را در یک بردار پیدا میکند. فرض کنید برداری دارید که اعداد ۱ تا ۵ را در آن ذخیره کردهاید. عملکرد توابع مورد نظر بصورت زیر خواهد بود:
library(dplyr)
v <- 1:5
lead(v)
[1] 2 3 4 5 NA
ملاحظه میکنید که پاسخ، یک بردار است که از مقدار ۲ آغاز شده و به NA
ختم شده است. مقدار آخر به این دلیل NA
شده است که پس از عدد ۵ در بردار v
مقدار دیگری نداریم. حتما میتوانید حدس بزنید که به همان دلیل پیشین اگر تابع lag
را روی بردار v
اعمال کنیم اولین مقدار آن NA
خواهد بود.
> lag(v)
[1] NA 1 2 3 4
پاسخ توابع lead
و lag
همیشه به اندازه بردار اصلی هستند. برای اینکه بهتر نحوه کارکرد این دو تابع را درک کنید به مثال زیر توجه کنید.
library(dplyr)
v = 1:5
data.frame(
before = lag(v),
actual = v,
after = lead(v)
)
. before actual after
1 NA 1 2
2 1 2 3
3 2 3 4
4 3 4 5
5 4 5 NA
محاسبه نرخ تغییر فروش ماهانه
فرض کنید میزان فروش ماهانه یک شرکت در ۶ ماه اول سال بصورت زیر است.
data <- data.frame(
monthID = 1:6,
month = month.abb[1:6],
sales = c(90e3,12.7e4,10e4,92e3,16e4,16.9e4)
)
data
. monthID month sales
1 1 Jan 90000
2 2 Feb 127000
3 3 Mar 100000
4 4 Apr 92000
5 5 May 160000
6 6 Jun 169000
برای محاسبه درصد میزان رشد (یا کاهش) فروش ماهانه کافی است ستونی جدید درست کنیم که حاصل تفریق ماه جاری از فروش ماه قبل، تقسیم بر میزان فروش ماه قبل باشد.
library(dplyr)
data %>%
mutate(
sales_change_percent = ((sales - lag(sales)) / lag(sales) * 100)
)
. monthID month sales sales_change_percent
1 1 Jan 90000 NA
2 2 Feb 127000 41.11111
3 3 Mar 100000 -21.25984
4 4 Apr 92000 -8.00000
5 5 May 160000 73.91304
6 6 Jun 169000 5.62500
میتوانید با استفاده از تابع round
مقدار درصد محاسبه شده را به عدد صحیح رند کنید.
data %>%
mutate(
sales_change_percent = round(((sales - lag(sales)) / lag(sales) * 100))
)
. monthID month sales sales_change_percent
1 1 Jan 90000 NA
2 2 Feb 127000 41
3 3 Mar 100000 -21
4 4 Apr 92000 -8
5 5 May 160000 74
6 6 Jun 169000 6
2 پاسخ
با سپاس، توضیحات کامل و بسیار روشن بود
چقدر ساده و روان. ممنونم واقعا. خیلی بدرد من خورد.