purrr และฮิสโตแกรม
ถึงเวลานำทุกสิ่งที่เรียนรู้มาประยุกต์ใช้แล้ว โดยจะเริ่มจากลิสต์สองชุดแล้วแปลงเป็นฮิสโตแกรมแบบ faceted จะทำงานกับข้อมูล Star Wars จากชุดข้อมูล sw_films และ sw_people อีกครั้ง เพื่อตอบคำถามต่อไปนี้:
- การกระจายตัวของความสูงของตัวละครในแต่ละภาพยนตร์ Star Wars เป็นอย่างไร?
ภาพยนตร์แต่ละเรื่องเกิดขึ้นบนดาวเคราะห์ที่ต่างกัน จึงอาจเห็นการกระจายตัวของความสูงที่แตกต่างกันในแต่ละเรื่อง ขั้นแรกให้แปลงชุดข้อมูลทั้งสองให้เป็น data frame เนื่องจาก ggplot() ต้องการข้อมูลในรูปแบบนั้น จากนั้น join ทั้งสองเข้าด้วยกัน แล้ว plot ผลลัพธ์เป็นฮิสโตแกรมที่มี facet หรือกราฟย่อยแยกสำหรับแต่ละภาพยนตร์
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Foundations of Functional Programming with purrr
คำแนะนำการฝึกหัด
- สร้าง data frame ที่มีข้อมูล
"title"ของแต่ละภาพยนตร์ และ"characters"จากแต่ละภาพยนตร์ในชุดข้อมูลsw_films - สร้าง data frame ที่มีข้อมูล
"height","mass","name"และ"url"จากsw_people - Join data frame ทั้งสองเข้าด้วยกันโดยใช้คีย์
"characters"และ"url" - สร้างฮิสโตแกรมด้วย
ggplot()โดยกำหนดx = heightและแบ่ง facet ตามfilmtitle
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# Turn data into correct data frame format
film_by_character <- tibble(filmtitle = map____(___, ___)) %>%
mutate(filmtitle, characters = map(___, ___)) %>%
unnest(cols = c(characters))
# Pull out elements from sw_people
sw_characters <- map____(___, `[`, c(___, ___, ___, ___))
# Join the two new objects
character_data <- inner_join(___, ___, by = c(___ = ___)) %>%
# Make sure the columns are numbers
mutate(height = as.numeric(height), mass = as.numeric(mass))
# Plot the heights, faceted by film title
ggplot(character_data, aes(x = ___)) +
geom_histogram(stat = "count") +
facet_wrap(~ ___)