/ jupyter

หัดเขียนภาษา R ใน 5 ชั่วโมง

ช่วงนี้พอจะมีเวลาว่าง และเมื่อคืนเป็นคืนวันศุกร์ เหมาะที่สุดแล้ว ที่จะเขียนโค้ดภาษาที่ยังไม่เคยเขียน และมีแผนที่จะหัดเขียนภาษา R มาสักพักแล้วแต่ติดตรงงานด่วน หามรุ่ง หามค่ำ ย่ำรุ่ง ฟ้าสาง ฟ้าเหลือง แฮ่กๆๆๆ ไปราวๆสองเดือน ได้เวลาพัก เลยพักด้วยภาษา R


Photo by Sergey Zolkin / Unsplash

ผมเริ่มต้นที่ tryr.codeschool.com เพราะมีโจทย์ให้ลองทำตาม มีคำอธิบาย เข้าใจง่าย เขียนโค้ด กดรันผ่านแบบฝึกได้เลย โคตรดี

Screen-Shot-2560-09-16-at-12.19.04-PM

เล่าย้อนกลับไปนานหน่อย ผมรู้จักภาษา R เมื่อตอนราวๆปี 2553 - 2554 ประมาณนั้น ตอนนั้นเรียนอยู่ ในวิชา Engineering Statistic ซึ่งเป็นวิชาที่ผม Drop, ติด F และใช้เวลาเรียนใหม่มากที่สุด ก็ลงเรียนเกือบทุกๆเทอม มี 2 วิชาที่ผมเรียนเยอะสุด อันดับแรกก็วิชา Engineering Statistic และอันดับ 2 คือ Engineering Circuit Analysis อห เรียนเยอะขนาดไหนก็ ในปี 5 (ไม่จบ 4 ปีอยู่แล้วระดับผม) เทอมสุดท้าย ผมลงเรียน 4 วิชา คิดว่า จบแน่นอล ผลคือ ผ่าน 2 วิชา และติด F 2 วิชา คือ ไอ้ 2 ตัวนี่แหละที่ติด F วิชา Circuit ลงเรียนตอน Summer ได้ แต่ Stats ลงไม่ได้ ต้องรอเปิดเทอม...

thank-yo-stackoverflow-you-tube-google-free-com-source-co-18817480

เข้าเรื่อง ตัว Try R มีทั้งหมด 7 บท ผมเริ่มเปิดหน้าเว็บนี้ตอน 2 ทุ่มครึ่ง และนั่งทำตามแบบฝึกไปเรื่อยๆ ทำไป เล่น Facebook ดื่มของขม ชมนมเด็กสาว แต่ทั้งหมด ก็จบลงได้ในราวๆ 5 ชั่วโมง ทำให้เข้าใจชนิดของข้อมูล การปริ้นค่าออกมาทางหน้าจอ การกำหนดค่าตัวแปร การวาดกราฟ การอ่านไฟล์ การใช้ help การเรียกฟังก์ชั่นที่มีให้ การเล่นกับชนิดข้อมูล vector, matix, data frame

ใน R มีข้อมูลตัวอย่างชื่อ volcano ให้เอามาลองวาดรูปดูได้ ผมลองทำตามแล้วว้าวเลย ชอบมากๆ

persp(volcano, expand = 0.5)

ผลที่ได้คือรูปนี้
volcano-1

หรือจะวาดเป็น Heatmap ก็ได้ ด้วยฟังก์ชั่น image

image(volcano)

จะได้รูปนี้
volcano-image

หลังจากเจอรูป เจอกราฟไปแล้ว และพวกฟังก์ชั่นเกี่ยวกับทางสถิติผมยิ่งว้าว เกือบจะหยุดทำแบบฝึก แล้วไปเอาข้อมูลจริงที่มีอยู่ มาทำการวาดกราฟเลย สติแตกไปพักหนึ่ง แล้วก็เริ่มมาทำแบบฝึกให้จบก่อน 55555 คิดดูแล้ว ทำไมกูไม่เริ่มเขียน R ตั้งแต่ 5 ปีที่แล้วว่ะ แล้วก็นั่งทำแบบฝึกต่อ

แต่ด้วยความที่เคยใช้ Jupyter อย่างที่เขียนเล่าไปก่อนหน้านี้คือ ใช้ Jupyter ทำ REST API แบบง่าย และได้เห็นมาว่า ตัว Jupyter มันมี R ให้ใช้ ก็เลยลองรัน Jupyter R Notebook มาลองเล่น วิธีก็ง่ายๆ ใช้ Docker เหมือนเดิม ใช้ image นี้ jupyter/r-notebook

docker run -d --name r.notebook -p 8888:8888 jupyter/r-notebook

กดรันไปแล้ว รอนานมาก เพราะ Image มันใหญ่ ก่อนรันลืมดู ได้แต่นั่งรอ...

Screen-Shot-2560-09-16-at-5.10.21-PM

พอรันเสร็จแล้ว ก็ได้หน้าตา แบบ Jupyter แบบบล็อกก่อนหน้าเลย แต่เป็น R Kernel เขียนภาษา R แทน Python ผมเลยติดตั้ง Package ชื่อ mongolite แต่ติดตั้งไม่ผ่าน เพราะไม่มี openssl ติดตั้งอยู่ พอจะติดตั้งเพิ่ม ก็ติดปัญหาเรื่องสิทธิ์ root ที่ไม่ได้ใส่ให้มันตอนรัน ขี้เกียจ... ก็เลยเอาไฟล์ csv ไปอ่านเอาแทน ง่ายมาก แบบนี้

print('Reading file...')
contracts <- read.table('xx.csv', sep='|', header = TRUE)
print('done')

ใช้ read.table เพราะว่าไฟล์ csv ที่ export มันมีปัญหากับคนที่เอาไปใช้ต่อก่อนหน้านั้นคือ เอาเข้า MS Access แล้วบอกว่าใช้ comma separate แล้วเพี้ยน.. ขอเป็น | แทนน่ะ ได้! จัดไป

พออ่านไฟล์เสร็จแล้ว ก็วาดกราฟเลยครับ

print('ploting graph...')
principal_in_contract = contracts$principal_in_contract
p_mean = mean(principal_in_contract)
p_sd = sd(principal_in_contract)
plot(principal_in_contract, xlab = "Pricipal in contracts", ylab = 'THB', las = 1)
abline(h = p_mean)
abline(h = p_mean + p_sd)
print('done')

รูปที่ได้คืออันนี้ แจ่มเลย

principal-in-contract-graph

ไม่รู้จะเล่าอะไรต่อ เล่นไปแค่นี้ จบแล้ว 5555555

In []: