挿入と R ビジュアライゼーションを選択することで、R のスクリプトを使用してさまざまなチャートを作成できます。
このレッスンでは、SAP Analytics Cloud で作成された R ビジュアライゼーションの 9 つの例と、スクリプトエディタから関連する R コードについて学習します。
この章で使用するさまざまな R ビジュアライゼーションを試すために、コードをコピーして SAP 実践システムで使用することができます。
Objective
挿入と R ビジュアライゼーションを選択することで、R のスクリプトを使用してさまざまなチャートを作成できます。
このレッスンでは、SAP Analytics Cloud で作成された R ビジュアライゼーションの 9 つの例と、スクリプトエディタから関連する R コードについて学習します。
この章で使用するさまざまな R ビジュアライゼーションを試すために、コードをコピーして SAP 実践システムで使用することができます。
この例では、地域別の経時的な売上を示す折れ線グラフが作成されています。

上記の例は、R ビジュアライゼーションスクリプトエディタで次の R コードを使用して作成されています。
1234567891011library(ggplot2)
BestRunCorpRetail$`Sales Revenue` <- BestRunCorpRetail$`Sales Revenue` / 1000
# Line Graph for Sales Over Time
ggplot(BestRunCorpRetail, aes(x = Date, y = `Sales Revenue` , group=Region, color=Region )) +
geom_line() +
labs(title = "Sales Revenue (in k) by Region Over Time",
x = "Date",
y = "Sales Revenue") + theme(legend.position="bottom")
theme_minimal()この例では、地域別および折れ線別の販売数量を示す積み上げ水平棒グラフが作成されています。

R ビジュアライゼーションの中には、インタラクティブチャートとして作成できるものがあります。この例は、以下の図に示すように、ユーザが操作して特定のデータを分離してフォーカスできるチャートです。

上記の例は、R ビジュアライゼーションスクリプトエディタで次の R コードを使用して作成されています。
1234567library(ggplot2)
library(plotly)
# Bar Chart for Sales by Product Category
p1 <- ggplot(BestRunCorpRetail, aes(x = Lines, y = `Quantity sold`/1000 , fill = Region )) +
geom_bar(stat = "identity") + coord_flip()
ggplotly(p1, tooltip = c("x", "y", "fill"))この例では、営業マネージャごとの売上と販売数量の比較を示すために、インタラクティブな散布図チャートが作成されています。

これは、インタラクティブチャートのもう 1 つの例です。ユーザは、インタラクションを再生することができます。また、以下の図に示すように、インタラクションの要素にマウスポインタを合わせると、追加情報が表示されます。
![インタラクティブチャートの例。左上の画像では、[再生] ボタンが強調表示されています。右下のイメージには、追加情報を提供するツールチップがあります。 インタラクティブチャートの例。左上の画像では、[再生] ボタンが強調表示されています。右下のイメージには、追加情報を提供するツールチップがあります。](https://learning.sap.com/service/media/topic/fdd3f8f3-d529-4881-a06b-52829f57ec2a_ja-JP/SACR31_2605_ja-JP_media/SACR31_2605_ja-JP_images/R_Visualization_Example_03a.png)
上記の例は、R ビジュアライゼーションスクリプトエディタで次の R コードを使用して作成されています。
12345678910111213141516# import packages ggplot2 and plotly
library(ggplot2)
library(plotly, warn.conflicts = FALSE)
# create a ggplot frame through function ggplot() and add data points, labels and scale settings
BestRunCorpRetail$`Sales Revenue` <- BestRunCorpRetail$`Sales Revenue` / 1000
BestRunCorpRetail$`Quantity sold` <- BestRunCorpRetail$`Quantity sold` / 1000
gg <- ggplot(BestRunCorpRetail, aes(`Quantity sold`, `Sales Revenue`, color = Manager)) +
geom_point(aes(size = Discount , frame = Year, ids = Manager)) +
labs(title = "Comparison Sales Revenue (in k) and Quantity Sold (in k) versus Discount" ,
y = "Sales Revenue",
x = "Quantity Sold") +
scale_x_log10()
# convert the ggplot frame to a plotly frame through function ggplotly()
ggplotly(gg)この例では、各地域の製品ラインの密度を示す密度チャートが作成されていることを確認できます。

上記の例は、R ビジュアライゼーションスクリプトエディタで次の R コードを使用して作成されています。
123456# import packages ggplot2 and plotly
library(ggplot2)
library(plotly, warn.conflicts = FALSE)
ggplot(BestRunCorpRetail, aes( Region , Lines )) +
labs(title = "Density of the Product Lines in the Different Region" ) +
geom_jitter(aes(color = Lines ), size = 1) + theme(legend.position="none")この例では、都市と関連する粗利益の関係を示すためにクラウドが作成されています。

上記の例は、R ビジュアライゼーションスクリプトエディタで次の R コードを使用して作成されています。
12345678# load package
library(wordcloud)
# get words
words <- BestRunCorpRetail$`City`
# get frequency
frequency <- BestRunCorpRetail$`Gross Margin`
# generate word cloud
wordcloud(words, frequency, scale = c(4, 1.5), rot.per=0.2, colors=brewer.pal(8, "Blues"))この例では、地域、国、および市区町村別のクレームを示すためにサンキーネットワークダイアグラムが作成されています。

これは、以下の図に示すように、ユーザが要素にカーソルを合わせて関連情報を表示できるチャートの例です。

上記の例は、R ビジュアライゼーションスクリプトエディタで次の R コードを使用して作成されています。
12345678910111213141516171819202122232425262728293031323334353637# import package dplyr and networkD3
suppressPackageStartupMessages(library(dplyr))
library(networkD3)
# de-factorize three level columns in SankeyData2 to strings
BestRunCorpRetail$Region <- as.character(BestRunCorpRetail$Region)
BestRunCorpRetail$Country <- as.character(BestRunCorpRetail$Country)
BestRunCorpRetail$City <- as.character(BestRunCorpRetail$City)
# create the first- and second-level decomposition dataset as list of (source, target, amount)
level_1 <- aggregate(BestRunCorpRetail[,4], by=list(BestRunCorpRetail$Region, BestRunCorpRetail$Country), FUN=sum)
level_2 <- aggregate(BestRunCorpRetail[,4], by=list(BestRunCorpRetail$Country, BestRunCorpRetail$City), FUN=sum)
# rename the headers in the two level data frames
names(level_1) <- c("Source","Target","Complains")
names(level_2) <- c("Source","Target","Complains")
# stack the two level data frames together
sankeyData <- suppressWarnings(bind_rows(level_1, level_2))
# create a list of nodes in all levels and index them from 0
sankeyNodes <- data.frame(Name = unique(c(sankeyData$Source, sankeyData$Target)))
sankeyNodes$index <- 0:(nrow(sankeyNodes)-1)
# create a sankeyLinks data frame by masking node names in sankeyData with their indexes in sankeyNodes
sankeyLinks <- merge(sankeyData, sankeyNodes, by.x="Source", by.y="Name")
sankeyLinks <- merge(sankeyLinks, sankeyNodes, by.x="Target", by.y="Name")
# select the masked columns and rename the headers
sankeyLinks <- sankeyLinks[, c(4,5,3)]
names(sankeyLinks) <- c("Source","Target","Complains")
# call the sankeyNetwork() function to generate the sankey diagram
sankeyNetwork(Links = sankeyLinks, Nodes = sankeyNodes,
Source = "Source", Target = "Target",
Value = "Complains", NodeID = "Name",
fontSize = 10, nodeWidth = 5, nodePadding = 5 , unit="Complains")この例では、地域別の粗利益と売上を示す極線チャートが作成されています。

上記の例は、R ビジュアライゼーションスクリプトエディタで次の R コードを使用して作成されています。
123456789101112131415161718192021222324252627library(ggplot2)
library(reshape2)
SalesRevenue <- as.numeric(BestRunCorpRetail$`Sales Revenue`) / 1000
total_GrossMargin <- sum(BestRunCorpRetail$`Gross Margin`)
Region <- as.character(BestRunCorpRetail$Region)
percentage <- BestRunCorpRetail$`Gross Margin` * 100/ total_GrossMargin
percentage_char <- as.character(formatC(percentage, digits = 2, format = "f"))
width <- percentage * 3.6
GrossMargin <- c(width[1]/2)
label <- paste(percentage_char, seq = "%", sep = "")
for (i in 2:length(width)) {
GrossMargin <- c(GrossMargin, sum(width[1:i-1]) + width[i]/2)
}
angle <- GrossMargin
for (i in 1:length(angle)) {
if (angle[i] >= 180) {
angle[i] <- angle[i] - 180
}
}
rose <- data.frame(SalesRevenue, Region, GrossMargin)
p <- ggplot(rose, aes(x=GrossMargin, y=SalesRevenue, fill=Region))+
geom_bar(width=width, stat="identity")+
geom_text(aes(x=GrossMargin, y=SalesRevenue+40, label=label, angle=angle-90), size=5)+
labs(x="Gross Margin %", y="Sales Revenue
")
p + coord_polar(theta="x", start=0, direction=-1)この例では、各四半期に報告された問題の数を示すためにラグプロットが作成されていることがわかります。

上記の例は、R ビジュアライゼーションスクリプトエディタで次の R コードを使用して作成されています。
1234567891011121314151617181920212223242526272829303132333435363738394041library(lubridate)
library(dplyr)
library(ggplot2)
library(forecast)
## Prepare data
BestRunCorpRetail$`Number of Issues reported` <- BestRunCorpRetail$`Number of Issues reported` / 1000
df <- BestRunCorpRetail %>%
mutate(Year = as.integer(as.character(Year))) %>%
mutate(quarter_num = as.numeric(substr(Quarter, 2, 2))) %>%
mutate(first_month_of_quarter = (quarter_num * 3) -2) %>%
mutate(first_day_of_quarter = make_date(
Year,
first_month_of_quarter,
1)) %>%
select(first_day_of_quarter, `Number of Issues reported`) %>%
arrange(first_day_of_quarter)
## Convert to ts object
first_period = min(df$first_day_of_quarter)
last_period = max(df$first_day_of_quarter)
tso <- ts(df$`Number of Issues reported`,
start = c(year(first_period), quarter(first_period)),
end = c(year(last_period), quarter(last_period)),
frequency = 4)
## Plot
ts <- window(tso,start=2021)
p <- gglagplot(ts, do.lines = TRUE, seasonal=TRUE, colour=TRUE, diag=FALSE , lags = 9) +
labs(title = "Lag plot - Quarterly Number of Issues reported (in k)")
## Layout
p +
theme(
plot.title = element_text(color="red", size=15, face="bold", hjust=0.5 ,margin = margin(t = 0, r = 0, b = 16, l = 0)) ,
panel.border = element_rect(colour = "blue", fill=NA) ,
axis.ticks = element_line( size = 1, linetype = 'solid') ,
axis.ticks.length = unit(8, "pt"),
axis.text.x = element_text(color="black", size = 8, face = "bold" , margin = margin(t = 6, r = 0, b = 0, l = 0)) ,
axis.title.x = element_text(color="blue", size = 12, face = "bold", margin = margin(t = 10, r = 0, b = 0, l = 0)) ,
axis.text.y = element_text(color="red", size = 8, face = "bold" , margin = margin(t = 0, r = 6, b = 0, l = 0)) ,
axis.title.y = element_text(color="yellow", size =12, face = "bold", margin = margin(t = 0, r = 10, b = 0, l = 0)) ,
axis.line = element_line(colour = "black") ,
strip.text = element_text(color="blue", size = 12, face = "bold")
)この例では、地域別の売上を示すパレートチャートが作成されています。

上記の例は、R ビジュアライゼーションスクリプトエディタで次の R コードを使用して作成されています。
123456789library(ggplot2)
library(qcc)
Sales = BestRunCorpRetail$`Sales Revenue` / 1000
names(Sales) = BestRunCorpRetail$`Country`
pareto.chart(Sales, ylab = "Sales",main='Pareto Chart For Sales Revenue',col=heat.colors(length(Sales)))