Tag: R language

  • สร้าง Visualization ใน R ด้วย ggplot2

    สร้าง Visualization ใน R ด้วย ggplot2

    1. ggplot2
      1. ตัวอย่างกราฟที่สร้างด้วย library(ggplot2)
    2. การสร้างกราฟใน R ด้วย ggplot2
      1. 1. ตัวแปร Discrete
        1. ตัวอย่างเช่น
      2. 2.ตัวแปร Continuous
        1. ตัวอย่างเช่น
    3. Mapping and Setting
      1. Mapping vs. Setting ใช้ต่างกันยังไง
        1. “Mapping”
        2. “Setting”
    4. ตัวอย่างการเขียนโค้ดเบื้องต้น
      1. Histogram
      2. Scatterplot

    ggplot2

    ggplot2 cheat sheet

    ggplot2 เป็น หนึ่งใน library(tidy verse) ที่สามาร plot กราฟออกมาได้หลากหลายรูปแบบมากไม่ว่าจะเป็น

    • Histogram
    • Bar plot
    • Scatter plot
    • Box plot
    • Violin plot
    • etc.

    ตัวอย่างกราฟที่สร้างด้วย library(ggplot2)

    การสร้างกราฟใน R ด้วย ggplot2

    การสร้างกราฟด้วย ggplot2 นั้น ตัวโค้ดจริงนั้นไม่ยากครับ เพียงแต่ว่าเราต้องเลือกกราฟให้ถูกกับตัวแปรที่เราจะนำไป plot ซึ่งแบ่งหลักๆออกเป็น 2 ประเภทอิงจาก ggplot2 cheat sheet เลย

    1. ตัวแปร Discrete

    ตัวแปร Discrete แปรตรงตัว ก็คือ ตัวแปรไม่ต่อเนื่อง แล้ว…? ไม่ต่อเนื่องแบบไหนล่ะ

    คือ การที่มันนับแบบ 1 2 3 4 ได้ จะไม่มีค่าระหว่างเลขสองตัวแบบ 1 และ 2 ก็จะไม่มี 1.23 หรือ 1.86 แบบนี้ ซึ่งการที่มันไม่มีค่าระหว่างเลขสองตัวแบบนี้เนี่ย ทำให้การนับ เป็นไปอย่างจำกัด เช่น จะไม่มีค่ามาทำนอง 1.3333… ซ้ำไปแบบไม่รู้จบ

    ตัวอย่างเช่น

    • จำนวนสินค้าที่ขายได้ในแต่ละวัน
    • จำนวนนักเรียนในห้องเรียน(คือจะไม่มีมาแบบ 3.5 คน แบบนี้ไม่มี)
    • จำนวนหน้าลูกเต๋า
    • จำนวนประเทศในโลก
    • จำนวนต้นไม่ในป่า

    2.ตัวแปร Continuous

    ตัวแปร Continuos ก็คือแบบต่อเนื่อง ตรงข้ามกับแบบ Discrete เลย

    คือ จะมีช่วงของค่าที่ไม่จำกัด เช่น 1.33333333….. ได้แบบนี้เรียก Continous ยกตัวอย่างจะเข้าใจง่ายขึ้น

    ตัวอย่างเช่น

    • น้ำหนัก 10.23425…. กิโลกรัม แบบนี้ Continuos เลย
    • ระยะทาง 3.1234444… กิโลเมตร
    • ความสูงของคน 170.455 cm
    • อุณหภมิ 18.23 องศาเซลเซียส

    พอเข้าใจ Discrete และ Continuous เราก็มาเทียบกับ ggplot2 cheat sheet ได้ไม่ยากแล้ว

    Mapping and Setting

    Mapping กับ Setting เป็นอีกเรื่องนึงที่สำคัญหากจะเริ่มต้นลงมือเขียนโค้ด

    Mapping vs. Setting ใช้ต่างกันยังไง

    “Mapping”

    เป็นเหมือน base ที่ยังไม่มีรูปร่างหรือกราฟ ซึ่ง mapping จะผูกติดอยู่กับข้อมูล เช่น

    ggplot(data = mtcars, aes(x = wt, y = mpg, color = factor(cyl))) และจะอยู่ใน aes(...) เสมอ

    “Setting”

    คือ การซ้อนหน้าตาของกราฟลงไป ซึ่งไม่ผูกติดกับข้อมูล เช่น

    ggplot(data = mtcars, aes(x = wt, y = mpg)) + geom_point(color = "blue") คือ ซ้อน กราฟ scatter plot ลงที่ชุดข้อมูล และ ให้จุดแต่ละจุดเป็นสีฟ้าโดยไม่สนใจว่าเป็นข้อมูลชนิดหรือประเภทอะไร

    ตัวอย่างการเขียนโค้ดเบื้องต้น

    อันดับแรกติดตั้ง library(ggplot2) แต่ส่วนตัวผมถนัดติดตั้ง library(tidyverse) เลย และแน่นอน ตัวอย่าง dataset เริ่มต้นของเรา “mtcars”

    Histogram

    ggplot(mtcars, aes(x = mpg)) +
      geom_histogram(binwidth = 2, fill = "skyblue", color = "black") +
      theme_minimal()

    Scatterplot

    mtcars %>%
      select(mpg, hp) %>%
      ggplot(mapping = aes(x = hp,
                           y = mpg)) +
      geom_point(col = "salmon") +
      theme_minimal()
  • Data Transformation in R

    Data Transformation in R

    1. 5 functions หลักของ dplyr ประกอบด้วย
    2. Example Core Function in dplyr

    Data Analyst prefer “LONG format”

    Typical workflow ของ data analyst ที่เขียน R คือ

    • ดึงข้อมูลจาก SQL databases หรือ data format ต่างๆเข้าสู่ R
    • เขียน dplyr เพื่อจัดการ data frame จะ merge, join, union, transform
    • ส่ง transformed data ให้ users ของเรา (e.g. csvexceljson) หรือส่งไปให้ software อื่นๆใช้งานต่อ เช่น Power BI, Tableau, Google Sheets, Data Studio

    Cr.แอดทอย

    5 functions หลักของ dplyr ประกอบด้วย

    • select() ใช้เลือกคอลัมน์
    • filter() Large dataset “filter()” first**
    • mutate() create new column
    • arrange() ใช้sort data
    • summarise() อันนี้เขียนได้สองแบบ summarize()

    Example Core Function in dplyr

    select() ใช้เลือกคอลัมน์
    select(imdb, MOVIE_NAME, RATING)
    select(imdb, 1, 5)
    
    select(imdb, movie_name = MOVIE_NAME, 
           released_year = YEAR)
    imdb %>%
      select(movie_name = MOVIE_NAME, 
             released_year = YEAR)
    filter() ใช้ filter data หรือสร้างเงื่อนไขในการเลือกdata ในSQL ใช้ quary WHERE
    mtcars %>%
      filter(disp %in% c(160, 108,225))
    
    imdb %>% 
      select(2, 3, 7) %>%
      filter(score >= 9 & year > 2000)
      
      imdb %>%
      select(movie_name, genre, rating) %>%
      filter(genre == "Drama")#ส่งค่ากลับมาแค่"Drama"อย่างเดียว
      
      imdb %>%
      select(movie_name, genre, rating) %>%
      filter(grepl("Drama", imdb$genre))#ส่งค่าที่มี"Drama"อยู่ร่วมกับคำอื่นด้วย
    mutate() create new column
    imdb %>%
      mutate(score_group = if_else(score >= 9, "High Rating", "Low Rating"),
             langth_group = if_else(length >= 120, "Long Movie", "Short Movie")) %>%
    	select(movie_name, score_group, langth_group)
    	
    imdb %>%
      select(movie_name, score) %>%
      mutate(score = score + 0.1)#เขียนทับคอลลัมน์เดิมได้
      
     mtcars %>%
      select(hp, wt) %>%
      mutate(hp_double = hp*2,
             hp_halve = hp/2,
             hp_add_five = hp+5,
             new = hp/wt,
             newna = hp+wt)
    arrange() ใช้sort data
    m%>%
      select(model, am, hp) %>%
      arrange(desc(model))
    
    m %>%
      select(model, am, hp) %>%
      ## "(-)" as descending order(only nummeric)
      arrange(am, -hp)
    summarise()
    imdb %>%
      summarise(mean_length = mean(length),
                sum_length = sum(length),
                sd_length = sd(length),
                min_length = min(length),
                max_length = max(length),
                n = n())
    
    m %>%
      select(am, hp) %>%
      summarise(avg_hp = mean(hp),
                sum_hp = sum(hp),
                med_hp = median(hp),
                sd_hp = sd(hp),
                var_hp = var(hp),
                n = n())