# เรียกใช้ชุดคำสั่งด้วย
library(ggplot2)
# หรือtidyverse ก็ได้
library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.1 ──
## ✓ tibble 3.1.2 ✓ dplyr 1.0.7
## ✓ tidyr 1.1.3 ✓ stringr 1.4.0
## ✓ readr 1.4.0 ✓ forcats 0.5.1
## ✓ purrr 0.3.4
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
library(extrafont)
## Registering fonts with R
การแสดงข้อมูลด้วยกราฟมีประโยชน์อย่างมากในการช่วยทำให้มีความเข้าใจมากขึ้น และช่วยในเลือกใช้เครื่องมือตัวแบบที่เหมาะสมเพื่อนำไปใช้งานต่อไปได้
ลักษณะของกราฟที่เลือกใช้ขึ้นอยู่กับจำนวนมิติหรือจำของตัวแปรที่มี และยังต้องพิจารณาอีกว่าตัวแปรแต่ละตัวนั้นเป็นอย่างไร ดังนี้
ในส่วนของการแสดงข้อมูลด้วยกราฟก็จะขึ้นอยู่กับชนิดของตัวแปรและจำนวนของตัวแปรที่ต้องการนำเสนอ qplot เป็นชุดคำสั่งการแสดงผลของข้อมูลกราฟสำหรับโปรแกรมอาร์ โดยเป็นชุดคำสั่งที่สั้นกว่า การใช้คำสั่งในชุดคำสั่ง ggplot2 ถ้าเข้าใจว่าต้องการใช้กราฟและลักษณะข้อมูลที่ใช้เป็นไปเงื่อนไข ในบทนี้จะใช้ข้อมูล diamonds ที่อยู่ในชุดคำสั่ง ggplot2 มาใช้ในการแสดสร้างกราฟแบบต่างๆ ด้วย qplot
str(diamonds)
## tibble [53,940 × 10] (S3: tbl_df/tbl/data.frame)
## $ carat : num [1:53940] 0.23 0.21 0.23 0.29 0.31 0.24 0.24 0.26 0.22 0.23 ...
## $ cut : Ord.factor w/ 5 levels "Fair"<"Good"<..: 5 4 2 4 2 3 3 3 1 3 ...
## $ color : Ord.factor w/ 7 levels "D"<"E"<"F"<"G"<..: 2 2 2 6 7 7 6 5 2 5 ...
## $ clarity: Ord.factor w/ 8 levels "I1"<"SI2"<"SI1"<..: 2 3 5 4 2 6 7 3 4 5 ...
## $ depth : num [1:53940] 61.5 59.8 56.9 62.4 63.3 62.8 62.3 61.9 65.1 59.4 ...
## $ table : num [1:53940] 55 61 65 58 58 57 57 55 61 61 ...
## $ price : int [1:53940] 326 326 327 334 335 336 336 337 337 338 ...
## $ x : num [1:53940] 3.95 3.89 4.05 4.2 4.34 3.94 3.95 4.07 3.87 4 ...
## $ y : num [1:53940] 3.98 3.84 4.07 4.23 4.35 3.96 3.98 4.11 3.78 4.05 ...
## $ z : num [1:53940] 2.43 2.31 2.31 2.63 2.75 2.48 2.47 2.53 2.49 2.39 ...
ข้อมูล diamond มีตัวอย่างทั้งหมด 53,940 ตัวอย่าง แต่ละตัวอย่างมีจำนวนแปร 10 ตัวอยู่
จะถูกนำเสนอด้วยกราฟแท่ง(ฺBar graph) Histogram และ density graph
กราฟนี้ จะถูกใช้งานเมื่อต้องการนับจำนวนของค่าที่เหมือนกันสำหรับตัวแปรประเภท chr หรือ factor
# ตัวแปร cut ใน diamonds เป็น ตัวแปรชนิด factor
qplot(data=diamonds,x= cut)
# ตัวแปร clarity ใน diamonds เป็น ตัวแปรชนิด factor
qplot(data=diamonds,x= clarity)
จะเหมือนกับกราฟแท่ง แต่ตัวแปรจะต้องเป็นตัวเลขหรือ integer เท่านั้น
# ตัวแปร price ใน diamonds เป็น ตัวแปรชนิด integer
qplot(data=diamonds,x= price)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
สำหรับ กราฟแบบ density จะต้องใช้ตำสั่งภาย qplot เพิ่มอีก คือ geom = “density” ดังนี้
# ตัวแปร price ใน diamonds เป็น ตัวแปรชนิด integer
qplot(data=diamonds,x= price,geom ="density")
ถ้าต้องการให้เป็น กราฟ histogram หรือ density เป็นรูปแบบฟังก์ชันความน่าจะเป็นหนาแน่น (probaiblity density function) นั้นคือพื้นที่ใต้กราฟทั้งหมดจะมีค่าเท่ากับหนึ่ง ต้องเพิ่มชุดคำสั่งดังนี้
คำสั่ง y= ..density.. และ geom = “histogram” สำหรับกราฟแบบ histogram และ คำสั่ง y= ..density.. และ geom = “density” สำหรับกราฟแบบ density
# ตัวแปร price ใน diamonds เป็น ตัวแปรชนิด integer
qplot(data=diamonds,x = price, y = ..density.. ,geom ="histogram")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
qplot(data=diamonds,x = price, y = ..density.. ,geom ="density")
กราฟที่แสดงได้ boxplot จะเป็นสำเสนอข้อมูลค่าต่ำสุด ค่าสูงสุด ค่าควอไทร์ที่ 25 50 และ 75 รวมถึงค่า outlier ของตัวข้อมูลที่อยู่ในตัวแปรเชิงคุณภาพ ทั้งหมด เช่น กราฟแบบ boxplot ระหว่าง cut กับ price
# ต้องให้ x เป็นตังแปรเชิงคุณภาพ และ y เป็นตัวแปรเชืงปริมาณ
qplot(data=diamonds,x= cut, y = price,geom = "boxplot")
### กรณีที่ 2 เป็นตัวแปรเชิงปริมาณทั้ง 2 ตัว
กราฟที่ได้คือ กราฟแบบจุด scatter plot) ซึ่งน่าจะเป็นที่รู้จักกันเป็นอย่างดี เช่น
qplot(data=diamonds, x = carat, y = price)
ในกราฟที่ผ่านมาข้างต้น จะเห็นว่ากราฟทั้งหมดเป็นรูปขาวดำ ถ้าต้องการให้แสดงผลเป็นสี สามารถใช้คำสั่งเพิ่มเติมภายใน คำสั่ง qplot คือ fill = " " ภายในเครื่องหมายคำพูดจะเป็นตัวแปรตัวเชิงคุณภาพ และสามารถใช้ตัวแปรเชิงปริมาณได้ถ้าเป็นกราฟแบบจุด
# แสดงสีแต่ละช่องด้วย ตัวแปรเดิม
qplot(data=diamonds,x= cut,fill= cut)
ผลที่ได้ คือ ค่าต่างๆ ของตัวแปร cut จะมีแตกต่างกันไป
# แสดงสีแต่ละช่องด้วยตัวแปร color
qplot(data=diamonds,x= cut,fill= color)
ผลที่ได้ คือ ค่าต่างๆ ของตัวแปร cut จะประกอบไปด้วยจำนวนค่าต่างๆ ของตัวแปร color นั่นเอง จะเห็นได้ว่าข้อมูลได้ถูกแสดงออกมาเป็น 2 ตัวแปร
คำถาม ถ้าให้ fill = price ผลที่ได้จะเป็นอย่างไร การใส่สีหรับกราฟแบบ histogram และ density
# ใส่สีด้วยตัวแปร cut
qplot(data=diamonds,x= price,fill = cut)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
จะเห็นได้ว่าในแต่ละช่วงของราคาประกอบไปด้วย ตัวแปร cut จำนวนประมาณเท่าไหร่
# ใส่สีด้วยตัวแปร cut
qplot(data=diamonds,x= price,fill = cut, geom ="density")
การใช่สี ด้วยตัวแปร cut สำหรับกราฟแบบ density คำสั่ง qplot จะแสดงเป็นกราฟการประมาณค่าฟังก์ชันความน่าจะเป็นหนาแน่น แต่กราฟที่ได้ จะเห็นว่า สีเหลืองได้บดบังกราฟ สีอื่นๆ ไปมาก ดังนั้น ถ้าอยากเห็นกราฟสีือื่นๆ ที่สีเหลืองได้บังไว้ก็ต้องลดความเข้มของสีทั้งหมดลงด้วย คำสั่ง alpha ดังนี้
# alpha มีค่าอยู่ระหว่าง 0 ถึง 1
qplot(data=diamonds,x= price,fill = cut,alpha= 0.5, geom ="density")
จะเห็นกราฟ density ของตัวแปร cut แบบจางๆ ด้วย
สำหรับกราฟแบบ boxplot ก็จะได้คล้ายกับกราฟแท่ง
# ใส่สีโดยใช้ fill = cut
qplot(data=diamonds,x= cut, y = price,fill =cut, geom = "boxplot")
ถ้าให้ fill เท่ากับตัวแปรเชิงคุณภาพอื่นๆ ที่ไม่ใช้ตัวเองจะได้ผลลัพธ์ที่แตกต่างออกไปดังนี้
qplot(data=diamonds,x= cut, y = price,fill =clarity, geom = "boxplot")
นั่นก็คือ ในแต่ตัวแปร cut จะประกอบไปด้วย boxplot ของตัวแปร clarity กับ price นั่นเอง
สำหรับกราฟแบบจุดจะไม่ใช่คำสั่ง fill แต่ใช้คำสัั่ง color แทนดังนี้
# ให้ color เท่ากับตัวแปรเชิงคุณภาพ
qplot(data=diamonds, x = carat, y = price, color = clarity)
# ให้ color เท่ากับตัวแปรเชิงปริมาณ
qplot(data=diamonds, x = carat, y = price, color = depth)
กราฟที่ได้ จะไปใส่สีจากจางไปเข้าเพียงสีเดียว
กราฟแบบจุดนี้สามารถเพิ่มจำนวนแปรเข้าไปได้ จึงถูกเรียกว่า bubble plot
# ให้ size เป็นตัวแปรเชิงปริมาณ คือ table
qplot(data=diamonds, x = carat, y = price, color = clarity, size= table)
ตอนต่อไป จะพูดเรื่องการปรับแต่งกราฟ เช่นการตั้งชื่อโดยใช้ภาษาไทย การทำงานร่วมกับชุดคำสั่ง LaTeX การแบ่งเป็นกราฟย่อยๆ เป็นต้น