Visualize Diamond dataset ด้วยภาษา R

Naphat Sae.
2 min readNov 7, 2023

--

ดูโค้ดเต็มๆได้ที่ : https://github.com/neennera/Works/blob/main/Diamond_visuallization_by_R.Rmd

เรามาเตรียมพร้อมโดยการนำเข้า ggplot2 library ซึ่งเป็น library ที่ช่วยในการสร้างกราฟแสดงผล data ที่เราสนใจ

pattern ของการใช้งาน ggplots ประกอบไปด้วย

  1. data : ข้อมูลที่ต้องการพล็อต

2. mapping : เอา data มา map ไปที่ แกน x, แกน y ตั้งค่าสี ขนาด ฯลฯ

3. Geometry : กำหนดว่าพล็อตยังไง กราฟแท่ง, กราฟเส้น, ฯลฯ

แต่ก่อนอื่น มาลองดูคร่างๆว่า diamonds มีตัวแปรอะไรบ้าง

library(ggplot2)

summary(diamonds)
features ต่างๆของ diamons

## ราคาของ diamonds

กราฟที่เราได้ใช้ตลอดคือ histogram ซึ่งเป็นกราฟที่เราตรวจดูว่า data มีความถี่ของแต่ละช่วง bin เท่าไหร่ ช่วงดูได้ว่าข้อมูลมีการกระจุกตัวที่ช่วง range ไหน

ggplot(data=diamonds, aes(x=price)) +
geom_histogram(fill="gray", color="black") +
ggtitle("Price of Diamonds")

จากกราฟ จะเห็นได้ว่ากราฟมีความเบ้ซ้าย คือเพรชมักจะมีราคาในช่วง 0–50000 มาก
ยิ่งราคาแพงขึ้น จำนวนเพรชที่ขายในช่วงนั้นก็ยิ่งน้อยลง ในแนวโน้มแบบ exponential

## Carat and Price but in cut group

เนื่องจากข้อมูลมีขนาดใหญ่มากๆ เราใช้ sample_frac ในการเลือก sampling ออกมาแค่ 20% ให้พอเห็นเส้นแนวโน้ม

ใช้ geom_point มาพล็อตจุด scatter และ geom_smooth มาวาดเส้นแนวโน้ม

รวมทั้งใช้ facet_wrap มาแยกกราฟตามตัวแปร cut และจัดคอลัมน์แค่แถวละ 2 คอลัมน์

library("dplyr")
ggplot(sample_frac(diamonds, 0.20), aes(x=carat, y=price, col=price)) +
geom_point(alpha = 0.4) +
scale_color_gradient(low = "lightblue", high = "blue") +
geom_smooth(method = lm, color = "red") +
facet_wrap(~cut, ncol = 2)

จากกราฟ พบว่า หากเรามี caratมาก ราคาของเพชรก็จะมากไปด้วย ในทุกๆ

## Cut and Price

box plot เป็นกราฟที่มีประโยชน์มาก ในการหาการกระจายตัวของข้อมูล ดู mean, max, min,Q1,Q3 รวมทั้งหา outliers ของข้อมูลได้

ggplot(data=diamonds, aes(x=cut, y=price)) + 
geom_boxplot()

จากกราฟรูปกล่อง เห็นได้ว่าdiamond ที่มีการตัดแบบ Fair มีความกว้าง range ของ price น้อยสุด แต่ Premium มีความกว้างมากที่สุด หากดูที่ค่าเฉลี่ย จะพบว่าเพรชที่ตัดแบบ Premium มีราคาสูงสุด

## Clarity

ลองมาพล็อต histogram แบบมีการตั้งค่าสีด้วย เพื่อให้การนำเสนอของข้อมูลดูมีอะไรๆมากกขึ้น

ggplot(data = diamonds, aes(x=clarity)) + 
geom_bar(fill='red')

จากกราฟเพชรมี clarity แบบ SI1 มากที่สุด และมีแบบ I1 น้อยที่

## Depth of Diamond

นอกจากนี้ เรายังใช้ geom_density ซึ่งจะมีการพล็อตเป็นเส้นของความถี่ในช่วงต่างๆ ควบคู่ไปกับ histogram

ggplot(data=diamonds, aes(x=depth, y =..density..)) + 
geom_histogram(fill = "steelblue") +
geom_density(color = "red", linewidth = 1)

จากกราฟ diamond มีการตัด depth ที่ราวๆ 63 มาก

--

--

No responses yet