บันทึกการใช้งาน RStudio และ R Programming 103 สำหรับนักวิทยาศาสตร์ข้อมูล Data Science - sprint 03

Image placeholder
แวะมาทักทายกันได้


R เป็นภาษาที่ได้รับเลือก ที่เหมาะสำหรับ Data Analyst และเป็น หนึ่งในสามภาษาที่ Data Analyst จะต้องรู้จัก [Python, R, SQL]

เราสามารถใช้ R อ่านข้อมูลได้หลายประเภท

  • .txt
  • .csv
  • .xlsx
  • google sheets
  • .json
  • .db (sqlite database)
  • SQL databases ตัวหลักๆได้หมดเลย PostgreSQL, MySQL, MS SQL, BigQuery, AWS RedShift

ใน RStudio ให้ติดตั้ง Library เหล่านี้เพื่อเรียนในบทนี้

install.packages(c("readr", 
                   "readxl", 
                   "googlesheets4",
                   "jsonlite",
                   "dplyr",
                   "sqldf",
                   "RSQLite"))


EP01 - Text File


read_table() อ่านไฟล์ .txt ที่ใช้ whitespace เป็นตัวคั่นระหว่าง คอลัมน์ delimeter

การทำงานกับ txt file จะเป็นการนำข้อมูลที่อยู่ใน text มาอยู่ใน R โดยสมมติว่าเรามี file หนึ่งที่เราสร้างขึ้นมา โดยเปิด เมนูสร้างไฟล์ของ RStudio





เราก็จะเห็นว่ามีเมนูที่สามารถสร้างไฟล์ อื่นๆได้ด้วย แต่ในบทนี้เราจะทำงานกับ Text File กัน

สมมติว่าเราสร้างข้อมูลที่อยู่ใน text file ให้เหมือนมีตารางข้อมูลขึ้นมา เช่น ตารางนักเรียน ตามรูปภาพ






ตารางจะมีอยู่ 2 คอลัมน์ และมีรายชื่ออยู่ 5 รายการ โดยตั้งชื่อไฟล์ว่า student.txt

จากนั้นเราทำการ load library ชื่อว่า library(readr)

library(readr)

เวลาที่เปิด RStudio ขึ้นมาทุกครั้งเราจะต้อง load lib ใหม่ทุกครั้งด้วย ฟังก์ชันใน readr นี้จะมีอยู่มากมายให้ลองอ่าน document ของมันดูโดยการใช้คำสั่ง help





จากไฟล์ที่สร้างขึ้น ทุกสร้างขึ้นมาอยู่ในรูปแบบตาราง เราจะใช้ฟังก์ชันที่ชื่อว่า read_table ซึ่งมันจะอ่าน ข้อมูลที่มี white space แยกคอลัมน์เอาไว้ ลองใช้งาน read_table กันดู

read_table("student.txt")

เป็นการเช็คว่าเรียกไฟล์สำเร็จ

output ที่ได้นั้น มันเป็น Data Frame






จากนั้นเราก็นำมาเก็บเอาไว้ใน Object ชื่อ student แล้วเปิด Data Frame ขึ้นมา

student <- read_table("student.txt")
View(student)







EP02 - CSV


read_csv() ใช้อ่านไฟล์ csv หรือ comma separated values เป็น common data format ที่ data analyst เราใช้กัน

อีกไฟล์หนึ่งเรามักจะใช้งานอยู่บ่อยๆ ก็คือ ไฟล์ CSV ซึ่ง ไฟล์จากหัวข้อที่แล้วเราสามารถนำมาปรับเพิ่มได้โดย Save As เป็นอีกหนึ่งไฟล์ ให้ตั้งชื่อว่า student2.csv แล้วแก้จาก white space มาเป็น comma






ทำเหมือนเดิม

student2 <- read_csv("student2.csv")

จากนั้นเราก็จะได้ค่า data frame ขึ้นมาอีกหนึ่งไฟล์โดยชื่อ ไฟล์ว่า student2






EP03 - Excel File


read_excel() ใช้อ่านไฟล์ Excel .xlsx อ่านทีละ sheet ได้เลย

เราจะต้องโหลด readxl ก่อนทุกครั้งที่เปิด Rstudio

ให้เราเปิดไฟล์ Excel ขึ้นมา explore ก่อนเพื่อดูว่าข้อมูลมีอะไรบ้าง

เราจะเห็นว่าไฟล์ excel นี้จะมีอยู่ 3 sheet




read_excel สามารถที่จะอ่านทีละ sheet ได้เลยโดยเขียนตาม code ด้านล่าง

read_excel("students.xlsx", sheet=1)
# Economics

read_excel("students.xlsx", sheet=2)
# Business

read_excel("students.xlsx", sheet=3)
# Data

OR

read_excel("students.xlsx", sheet="Data")
# Data

read_excel("students.xlsx", sheet="Economics")
# Economics

read_excel("students.xlsx", sheet="Business")
# Business





เห็นแบบนี้อาจจะดูยุ่งยากที่ต้องมานั่งเขียนเพื่ออ่านทีละ sheet เรามาเขียน Script เพื่อ loop อ่านในไฟล์ excel เลยดีกว่า

โดยเราสร้าง list ขึ้นมาก่อน

result <- list()

จากนั้นเราก็สร้าง for ขึ้นมาโดยเรารู้ว่ามี อยู่ 3 หน้าเราสามารถเขียนได้ว่า

for(i in 1:3) {
	result[[i]] < read_excel(("students.xlsx", sheet=i)
}

แล้วนำตัวแปร result มาแสดงผลตาม array

result[[1]]
result[[2]]
result[[3]]

เขียนรวมกัน

result <- list()

for (i in 1:3) {
  result[[i]] <- read_excel("students.xlsx", sheet=i)
}

result[[1]]
result[[2]]
result[[3]]


EP04 - Google Sheets


read_sheet() ใช้อ่าน data จาก Google sheet ถ้าเป็น public link ก่อนใช้คำสั่ง read_sheet() ให้เรารันคำสั่ง gs4_deauth() ก่อน

ในกรณีถ้าไฟล์ตั้งค่าไว้เป็น public ไม่ต้องทำการ login

สร้างไฟล์ google sheet ขึ้นมา





แล้วทำการ share file google sheet ให้เรียบร้อยโดยการกดปุ่ม share แล้วเลือก Anyone with the link ให้เลือกว่า can view

หลังจากได้ link มาแล้วให้มาที่ RStudio แล้ว ใช้คำสั่ง googlesheets4 เพื่อเรียกใช้งาน

library(googlesheets4)

จากนั้นก็เก็บ link เอาไว้ที่ตัวแปร สักตัวหนึ่ง โดยตัด permission ออก

permission คือ หลัง /edit

ตัวอย่าง : xxxxPymIoEY/edit?usp=sharing

url <- "<https://docs.google.com/spreadsheets/d/1V8vE-mhA2yfghFoPc6hK02fJmKDU3YazE0abPymIoEY>"

อย่าลืมคำสั่ง จะต้อง run ไม่อย่างนั้น google จะไม่ยอมให้ดึงมูลไป

gs4_deauth()

จากนั้นให้ใช้คำสั่ง

read_sheet(url, sheet="Student") 

เท่านี้ก็จะได้ข้อมูลอยู่ในรูปของ Data Frame มาเก็บเอาไว้ที่โปรแกรม R เรียบร้อย







นำข้อมูลมาเก็บเอาไว้ที่ตัวแปร

df <- read_sheet(url, sheet="Student")

ลองเรียกข้อมูลจากตัวแปร โดยการกด click ที่ environment






EP05 - JSON


fromJSON() ใช้อ่านไฟล์ .json เข้ามาเป็น list ใน R แล้วค่อยใช้ฟังก์ชัน data.frame() เพื่อเปลี่ยน list มาเป็นdata frame

Key ใน JSON ต้องเขียนใน double quote เท่านั้น

ก่อนนำเข้าข้อมูลด้วย JSON อย่าลืม library(jsonlite)

อันดับแรก เราก็สร้างไฟล์ .json ขึ้นมาจากไฟล์ text แล้วเขียนโครงสร้างข้อมูลรูปแบบ json ตัวอย่างเช่น

{  
   "id":[1,2,3,4],  
   "name": ["skl", "john", "marry", "lisa"],  
   "love_programming": [true,true,false,false]
}

แล้วก็เรียกคำสั่งตามนี้ได้เลย

library(jsonlite)

bp <- data.frame(fromJSON("programmer.json"))

View(bp)

json จะต้อง wrap ด้วย data.frame ก่อนจึงจะเป็น Data Frame





EP06 - Bind Rows (UNION ALL)


bind_rows() เทียบเท่ากับ การเขียน UNION ALL ใน SQL

เรามาลองดูวิธีการ ต่อ Data Frame หรือการทำ Union กันบ้างเราเรียกวิธีนี้ว่า UNION ALL โดยใช้คำสั่ง bind_rows()

จาก EP03 เราเรียนวิธีการนำเข้าข้อมูลจาก Excel กันแล้วให้ลองนำข้อมูลจาก EP03 มาลองทำได้เลย โดยเราจะต้องเรียกการใช้งาน การนำเข้า excel ก่อน

library(dplyr)
library(readxl)

จากนั้นเราก็ read_excel จาก ทั้ง 3 sheet มาเก็บเอาไว้ในแต่ละตัวแปร

# read excel file
economy = read_excel("students.xlsx", sheet=1)
business = read_excel("students.xlsx", sheet=2)
data = read_excel("students.xlsx", sheet=3)





สังเกตได้ว่า ข้อมูลทั้ง 3 ชุดนี้ เป็น data frame และมีมิติที่เท่ากัน

คราวนี้เราจะผูกข้อมูลทั้ง 3 ชุดนี้เข้าด้วยกัน

bind_rows(economy, business, data)





จากเห็นว่า ข้อมูลทั้งหมดผูกเข้าด้วยกันแล้ว

เราสามารถที่จะเขียน code ให้สั้นกว่านี้ได้อีก คือ วิธีการใช้ list

เราจะสร้าง list ขึ้นมาก่อน

list_df <- list(economy, business, data)

จากนั้นเราก็เอา list ไปเข้าฟังก์ชัน bind_rows() ได้เลย

full_df <- bind_rows(list_df)


EP07 - Bind Cols (≠ JOIN)


bind_cols() ไม่เท่ากับการเขียน Join เพราะ bind columns. ไม่จำเป็นต้องใช้ key ใดๆ แค่เอา data frame สองตัวมาวางต่อกัน ซ้าย - ขวา

เราลองมา Bind แบบ column กันบ้าง โดยจะเอาข้อมูลเดิมจาก EP06 ที่ได้จาก excel มาทำ bind_cols()

bind_cols(economy, business)







EP08 - SQL


sqldf() ใช้เขียน SQL เพื่อจัดการกับ dataframe ที่อยู่ใน R

คราวนี้เรามาลองใช้ SQL statement ในการจัดการข้อมูลที่อยู่ใน R กันบ้าง

โดยเรามีข้อมูลจากไฟล์ csv หน้าตาแบบนี้ แล้วนำเข้ามาวางเอาไว้ใน R แล้วทำแบบเดิมคือ

นำเข้าข้อมูลด้วย read_csv






แต่ก่อนอื่น อย่าลืมโหลด library ที่เกี่ยวข้องกันก่อน แล้วก็ read_csv ได้เลย

# load library sqldf
library(sqldf)
library(readr)

school <- read_csv("school.csv")

คราวนี้ เราก็จะได้ Data frame ที่ชื่อ school มาแล้วเรียบร้อย เราสามารถที่จะจัดการข้อมูลด้วย SQL จาห sqldf ได้ เช่น

sqldf("select * from school;")

sqldf("select avg(student), sum(student) from school;")

sqldf("select school_id, school_name, country from school;")





เราสามารถที่จะเขียน statement ไปเก็บเอาไว้ที่ตัวแปร ให้เรียบร้อยก่อนก็ได้

sql_query <- "select * from school where country = 'USA';"

usa_school <- sqldf(sql_query)


EP09 - SQLite


How to read data from SQLite database

ใน R เราใช้ library RSQLite เพื่อจัดการข้อมูลใน sqlite .db file ขั้นตอนการทำงานกับ database จะแบ่งเป็น 3 ขั้นตอน

  1. connect ข้อมูลที่ database
  2. ดึงข้อมูลด้วย SQL
  3. disconnect from database

สมมติว่าเราได้ไฟล์ .db มาจากฐานข้อมูลที่ไหนสักแห่ง หรือจากหลายแห่ง เราสามารถที่จะใช้ R มาจัดการข้อมูลที่อยู่ใน ไฟล์ .db ได้เลย เพียงแค่ในขั้นตอนที่ 1 เราจะต้องรู้ว่าไฟล์ .db เป็น database ชนิดไหน ในที่นี้ เราใช้ SQLite

# load library
library(RSQLite)

# connect to SQLite database (.db file)
# 1. open connection
conn <- dbConnect(SQLite(), "chinook.db")

# 2. get data
dbListTables(conn)

จากการใช้ dbListTable จะเป็นการเรียกดู Table ที่อยู่ใน file





และถ้าเราอยากดู table customers ว่ามี กี่ column เราใช้ dbListFields

dbListFields(conn, "customers")





df <- dbGetQuery(conn, "select * from customers where country = 'USA'")
df2 <- dbGetQuery(conn, "select * from customers where country = 'United Kingdom'")

เราสามารถที่จะใช้ SQL จัดการข้อมูลแล้วนำมาเก็บเอาไว้ใน Data Frame ของ R ได้แล้ว







สุดท้ายอย่าลืม Disconnect ด้วย

# 3. close connection
dbDisconnect(conn)


EP10 - How to Save data in R


เราสามารถ Save data ใน R ได้สองแบบและสามารถโหลดข้อมูลกลับมาใช้ได้อีกครั้งในอนาคต

  • save_image() ใช้ save object ทั้งหมดที่อยู่ใน environment ของเราเข้าไปที่ไฟล์ .RData
  • saveRDS() ใช้ save single object แค่ไฟล์ที่ไฟล์ .rds

ถ้าต้องการโหลด ไฟล์ .RData ให้ใช้ฟังก์ชัน load() หรือถ้าอยากโหลด .rds ให้ใช้ฟังก์ชัน readRDS()

# จะเป็นการ save ทั้งหมดใน environment ที่ได้ทำมา
save_image(file = "data.Rdata")
load(file = "data.Rdata")

# เป็นการ save object เดียว
saveRDS(business, "business.rds")
readRDS("business.rds")


คอร์สนี้ดีมากกกก (ไก่ ล้านตัว)  ใครอ่านจบ แนะนำว่าให้ไปสมัครเรียน ติดตามได้ที่ link ด้านล่างนี้เลย 

Course Online DATA ROCKIE Bootcamp



แวะมาทักทายกันได้
donate

Categories: Tutorial Tags: #Data Science , 1771