ggplot2 を使用した R の散布図 (例あり)
グラフはデータ分析プロセスの XNUMX 番目の部分です。 最初の部分は次のとおりです データ抽出、第 XNUMX 部では次のことを扱います。 データのクリーニングと操作。 最後に、データ サイエンティストは次のことを行う必要があるかもしれません。 結果をグラフィックで伝える.
データサイエンティストの仕事は次の図で確認できます。
- データ サイエンティストの最初のタスクは、研究課題を定義することです。 この研究課題は、プロジェクトの目的と目標によって異なります。
- その後、最も重要なタスクの XNUMX つは特徴量エンジニアリングです。 データ サイエンティストはデータを収集、操作、クリーンアップする必要があります
- このステップが完了すると、データセットの探索を開始できます。 場合によっては、新しい発見により、元の仮説を改良したり、変更したりする必要があります。
- 時 説明 分析が完了したら、データ サイエンティストは読者の能力を考慮する必要があります。 基礎となる概念とモデルを理解する.
- 彼の結果は、すべての利害関係者が理解できる形式で提示される必要があります。 最良の方法の XNUMX つは、 伝える 結果は グラフ.
- グラフは複雑な分析を簡素化する素晴らしいツールです。
ggplot2 パッケージ
チュートリアルのこの部分では、R を使用してグラフ/チャートを作成する方法に焦点を当てます。
このチュートリアルでは、ggplot2 パッケージを使用します。 このパッケージは、Wilkinson 著の書籍 Grammar of graphics (2005 年) の一貫した基礎に基づいて構築されています。ggplot2 は非常に柔軟で、多くのテーマと高い抽象レベルでのプロット仕様が組み込まれています。 ggplot2 では、3 次元グラフィックスをプロットしたり、インタラクティブなグラフィックスを作成したりすることはできません。
ggplot2 では、グラフは次の引数で構成されます。
- データ
- 美的マッピング
- 幾何学的なオブジェクト
- 統計的変換
- 秤
- 座標系
- 位置調整
- ファセット
チュートリアルでは、これらの引数を制御する方法を学びます。
ggplot2 の基本構文は次のとおりです。
ggplot(data, mapping=aes()) + geometric object arguments: data: Dataset used to plot the graph mapping: Control the x and y-axis geometric object: The type of plot you want to show. The most common object are: - Point: `geom_point()` - Bar: `geom_bar()` - Line: `geom_line()` - Histogram: `geom_histogram()`
散布図
ggplot が mtcars データセットでどのように動作するかを見てみましょう。 まず、mpg 変数と drat 変数の散布図をプロットします。
基本的な散布図
library(ggplot2) ggplot(mtcars, aes(x = drat, y = mpg)) + geom_point()
コードの説明
- まず、データセット mtcars を ggplot に渡します。
- aes() 引数内に、x 軸と y 軸を追加します。
- + 記号は、R にコードの読み取りを継続させることを意味します。コードを分割することで、コードが読みやすくなります。
- 幾何学オブジェクトには geom_point() を使用します。
出力:
グループによる散布図
場合によっては、データのグループ (つまり、因子レベルのデータ) によって値を区別すると興味深い場合があります。
ggplot(mtcars, aes(x = mpg, y = drat)) + geom_point(aes(color = factor(gear)))
コードの説明
- geom_point() 内の aes() はグループの色を制御します。 グループは因子変数である必要があります。 したがって、可変ギアを係数で変換します。
- これで、ドットの色を変更するコード aes(color =要因(gear)) が完成しました。
出力:
軸を変更する
データの再スケールは、データ サイエンティストの仕事の大きな部分を占めます。 まれに、データがきれいな釣鐘型になることがあります。 データの異常値に対する感度を下げるための XNUMX つの解決策は、データを再スケーリングすることです。
ggplot(mtcars, aes(x = log(mpg), y = log(drat))) + geom_point(aes(color = factor(gear)))
コードの説明
- log() の x 変数と y 変数を aes() マッピング内で直接変換します。
標準化や正規化など、他の変換も適用できることに注意してください。
出力:
近似値を含む散布図
別のレベルの情報をグラフに追加できます。 線形回帰の近似値をプロットできます。
my_graph <- ggplot(mtcars, aes(x = log(mpg), y = log(drat))) + geom_point(aes(color = factor(gear))) + stat_smooth(method = "lm", col = "#C42126", se = FALSE, size = 1) my_graph
コードの説明
- graph: グラフを変数graphに格納します。これは、後で使用する場合や、コードが複雑になりすぎるのを防ぐのに役立ちます。
- 引数 stat_smooth() は平滑化メソッドを制御します
- Method = “lm”: 線形回帰
- Col = “#C42126”: 線の赤色のコード
- se = FALSE: 標準エラーを表示しません。
- size = 1: 線のサイズは 1 です。
出力:
他の平滑化方法も利用できることに注意してください
- グルム
- 交歓
- 黄土: デフォルト値
- リム
グラフに情報を追加する
これまで、グラフに情報を追加していませんでした。グラフは有益な情報を提供する必要があります。読者は追加のドキュメントを参照することなく、グラフを見るだけでデータ分析の背景にあるストーリーを理解できる必要があります。したがって、グラフには適切なラベルが必要です。labs() 関数を使用してラベルを追加できます。
lab() の基本構文は次のとおりです。
lab(title = "Hello Guru99") argument: - title: Control the title. It is possible to change or add title with: - subtitle: Add subtitle below title - caption: Add caption below the graph - x: rename x-axis - y: rename y-axis Example:lab(title = "Hello Guru99", subtitle = "My first plot")
タイトルを追加
追加する必須の情報の XNUMX つは、明らかにタイトルです。
my_graph + labs( title = "Plot Mile per hours and drat, in log" )
コードの説明
- my_graph: 保存したグラフを使用します。 これにより、グラフに新しい情報を追加するたびにすべてのコードを書き直す必要がなくなります。
- タイトルを lab() 内にラップします。
- 線の赤色のコード
- se = FALSE: 標準エラーを表示しません。
- size = 1: 線のサイズは 1 です。
出力:
動的な名前を付けてタイトルを追加する
動的なタイトルは、タイトルにより正確な情報を追加するのに役立ちます。
Past() 関数を使用すると、静的テキストと動的テキストを印刷できます。 past() の基本構文は次のとおりです。
paste("This is a text", A) arguments - " ": Text inside the quotation marks are the static text - A: Display the variable stored in A - Note you can add as much static text and variable as you want. You need to separate them with a comma
例:
A <-2010 paste("The first year is", A)
出力:
## [1] "The first year is 2010"
B <-2018 paste("The first year is", A, "and the last year is", B)
出力:
## [1] "The first year is 2010 and the last year is 2018"
グラフに動的な名前、つまり mpg の平均を追加できます。
mean_mpg <- mean(mtcars$mpg) my_graph + labs( title = paste("Plot Mile per hours and drat, in log. Average mpg is", mean_mpg) )
コードの説明
- mpgの平均を作成するには、mean(mtcars$mpg)をmean_mpg変数に保存します。
- mpg の平均値を返す動的なタイトルを作成するには、mean_mpg で past() を使用します。
出力:
サブタイトルを追加する
XNUMX つの追加の詳細により、グラフをより明確にすることができます。 字幕とキャプションについて話しています。 サブタイトルはタイトルのすぐ下にあります。 キャプションは、計算を行った人物とデータのソースを知らせることができます。
my_graph + labs( title = "Relation between Mile per hours and drat", subtitle = "Relationship break down by gear class", caption = "Authors own computation" )
コードの説明
- lab() 内に以下を追加しました。
- title = “マイル/時間とdratの関係”: タイトルを追加
- サブタイトル = 「ギアクラス別の関係性の内訳」: サブタイトルを追加
- caption = “著者自身の計算: キャプションを追加
- 新しい情報はそれぞれカンマ、, で区切ります。
- コード行を分割していることに注意してください。 これは強制ではなく、コードを読みやすくするためにのみ役立ちます。
出力:
x 軸と y 軸の名前を変更する
データセット内の変数自体は必ずしも明示的ではない場合があり、慣例により、複数の単語がある場合は _ が使用されます (例: GDP_CAP)。このような名前をグラフに表示することは望ましくありません。名前を変更するか、単位などの詳細を追加することが重要です。
my_graph + labs( x = "Drat definition", y = "Mile per hours", color = "Gear", title = "Relation between Mile per hours and drat", subtitle = "Relationship break down by gear class", caption = "Authors own computation" )
コードの説明
- lab() 内に以下を追加しました。
- x = 「ドラット定義」: x 軸の名前を変更します。
- y = “マイル/時間”: y軸の名前を変更する
出力:
スケールを制御する
軸のスケールを制御できます。
関数 seq() は、一連の数値を作成する必要がある場合に便利です。 基本的な構文は次のとおりです。
seq(begin, last, by = x) arguments: - begin: First number of the sequence - last: Last number of the sequence - by= x: The step. For instance, if x is 2, the code adds 2 to `begin-1` until it reaches `last`
例えば、0から12までの範囲を3刻みで作成したい場合、0 4 8 12のXNUMXつの数字が必要になります。
seq(0, 12,4)
出力:
## [1] 0 4 8 12
以下のように、x 軸と y 軸のスケールを制御できます。
my_graph + scale_x_continuous(breaks = seq(1, 3.6, by = 0.2)) + scale_y_continuous(breaks = seq(1, 1.6, by = 0.1)) + labs( x = "Drat definition", y = "Mile per hours", color = "Gear", title = "Relation between Mile per hours and drat", subtitle = "Relationship break down by gear class", caption = "Authors own computation" )
コードの説明
- 関数scale_y_continuous()は、 Y軸
- 関数scale_x_continuous() は、 X軸.
- パラメータ Breaks は軸の分割を制御します。 一連の数値を手動で追加することも、seq() 関数を使用することもできます。
- seq(1, 3.6, by = 0.2): 2.4から3.4までの3ずつのXNUMXつの数字を作成します。
- seq(1, 1.6, by = 0.1): 1から1.6まで1ずつXNUMXつの数字を作成します。
出力:
テーマ
最後に、R を使用すると、さまざまなテーマでプロットをカスタマイズできます。 ライブラリ ggplot2 には、eights テーマが含まれています。
- テーマbw()
- テーマライト()
- テーマクラス()
- テーマラインドロー()
- テーマ_ダーク()
- テーマミニマル()
- テーマグレー()
- テーマ_void()
my_graph + theme_dark() + labs( x = "Drat definition, in log", y = "Mile per hours, in log", color = "Gear", title = "Relation between Mile per hours and drat", subtitle = "Relationship break down by gear class", caption = "Authors own computation" )
出力:
プロットの保存
これらすべての手順を完了したら、グラフを保存して共有します。 グラフをプロットした直後に ggsave('ファイル名) を追加すると、グラフはハード ドライブに保存されます。
グラフは作業ディレクトリに保存されます。 作業ディレクトリを確認するには、次のコードを実行します。
directory <-getwd() directory
素晴らしいグラフをプロットして保存し、位置を確認しましょう
my_graph + theme_dark() + labs( x = "Drat definition, in log", y = "Mile per hours, in log", color = "Gear", title = "Relation between Mile per hours and drat", subtitle = "Relationship break down by gear class", caption = "Authors own computation" )
出力:
ggsave("my_fantastic_plot.png")
出力:
## Saving 5 x 4 in image
注意注: 教育目的のみで、ディレクトリ フォルダーを開くための open_folder() という関数を作成しました。 以下のコードを実行して、画像がどこに保存されているかを確認するだけです。 my_fantastic_plot.png という名前のファイルが表示されるはずです。
# Run this code to create the function open_folder <- function(dir) { if (.Platform['OS.type'] == "windows") { shell.exec(dir) } else { system(paste(Sys.getenv("R_BROWSER"), dir)) } } # Call the function to open the folder open_folder(directory)
製品概要
議論をまとめると、次の表のような散布図を作成できます。
DevOps Tools Engineer試験のObjective | CPコード |
---|---|
基本的な散布図 |
ggplot(df, aes(x = x1, y = y)) + geom_point() |
カラーグループを含む散布図 |
ggplot(df, aes(x = x1, y = y)) + geom_point(aes(color = factor(x1)) + stat_smooth(method = "lm") |
近似値を追加 |
ggplot(df, aes(x = x1, y = y)) + geom_point(aes(color = factor(x1)) |
表題を加える |
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(title = paste("Hello Guru99")) |
字幕を追加 |
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(subtitle = paste("Hello Guru99")) |
x の名前を変更する |
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(x = "X1") |
y の名前を変更します |
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(y = "y1") |
スケールを制御する |
ggplot(df, aes(x = x1, y = y)) + geom_point() + scale_y_continuous(breaks = seq(10, 35, by = 10)) + scale_x_continuous(breaks = seq(2, 5, by = 1) |
ログの作成 |
ggplot(df, aes(x =log(x1), y = log(y))) + geom_point() |
テーマ |
ggplot(df, aes(x = x1, y = y)) + geom_point() + theme_classic() |
Save |
ggsave("my_fantastic_plot.png") |