มาวิเคราะห์ข้อมูลด้วย R.NET กันเถอะ… Actions!

เกริ่นนำ

R เป็นหนึ่งในเครื่องมือที่นิยมมากที่สุดชนิดหนึ่ง สำหรับงานด้านวิเคราะห์ข้อมูล และการนำเสนองานวิเคราะห์ข้อมูลในแบบแผนภาพ ชนิดต่างๆ
R เป็นทั้งภาษา และ สภาวะแวดล้อมสำหรับงานคำนวณค่าทางสถิติ และการนำเสนอกราฟต่างๆ คล้ายๆกับเครื่องมืออื่นๆเช่น SPSS, SAS, Matlab, Mathematica
R เป็น open-source software ของฟรี(ของฟรีและดี ก็มีในโลกแล้วนี่ไง) ที่ติดตั้ง ทำงานบน  Windows, Mac OS X, และ Linux ได้
ส่วน R.NET นั้นถูกพัฒนามาช่วยให้ R กับ .NET Framework สามารถทำงานร่วมกันได้
R.NET ต้องการ .NET Framework 4 และ dll หรือ module การคำนวณจาก R แบบเดิมๆ แค่นั้นเอง R.NET ไม่ได้เขียน logic การคำนวณทางสถิติใดๆเลย เพราะหน้าที่นี้ R ทำได้ยอดเยี่ยมอยู่แล้ว
บทความนี้ผมจะพาคุณไปรู้จักกับ R เพื่องานการคำนวนทางสถิติเท่านั้น ส่วน .NET Framework  ผมจะละไว้ในฐานที่เข้าใจดีแล้ว โดยผมจะใช้ภาษา C# ทำงานร่วมกับ function การคำนวณที่อยู่ใน R และนำเอา script ภาษา R มาใช้พัฒนาใน .NET Framework โดยใช้ R.NET library

เริ่มต้นติดตั้ง R

1. download software R จาก http://www.r-project.org/ เลือกที่ติดตั้งบน Windows ครับเพราะต้องใช้งานร่วมกับ .NET
2. ทำการติดตั้งง่ายโดยกด Nextๆๆ ไปตามขั้นตอนต่างๆตามหน้าจอติดตั้งของ R จนเสร็จครับไม่ยาก

คำนวณสถิติเบื้องต้น กับภาษา R… Actions!

ภาษา R เป็น case-sensitive นั่นหมายความว่า X กับ x เป็นคนละตัวแปรกัน คุณสามารถ run 1 คำสั่งจาก command prompt (>) หรือ กำหนดให้อ่านจาก script ของ R จาก source file (*.R) ก็ได้ โครงสร้างข้อมูลใน R ประกอบไปด้วย vectors, matrice, data frames(เหมือน datasets) และ list(คือ collection ของ object)

เครื่องหมาย วิธีกำหนดค่า ใน R สามารถใช้ = ได้ แต่มันไม่มาตรฐานนะ ดังนั้นใช้สัญลักษ <- เพื่อกำหนดค่าดีกว่า เช่น

  • <- 2*2 # x เท่ากับ 4 ซึ่งก็มีความหมายเหมือนกับ x = 2*2

แต่เมื่อเราสามารถกำหนดค่าแบบนี้ก็ได้ 2*2 -> x ซึ่งเมื่อเราใช้ 2*2 = x ก็ผิดทันที สรุปใช้เครื่องหมาย -> หรือ <- ระบุค่าดีกว่า

เครื่องหมาย # คือ commend ตัวแปรภาษา R จะไม่สนใจข้อความใดๆหลังเครื่องหมาย #

ผมได้เก็บข้อมูล อายุ(age) มีหน่วยเป็นเดือน(mo) และ นำหนัก(weight) มีหน่วยเป็นกิโลกรัม(km) จาก ตัวอย่างเด็กทารก(infant) จำนวน 10 คนได้ข้อมูลดังนี้

Infants = { (1,  4.4),  (3, 5.3), (5, 7.2), (2, 5.2), (11, 8.5), (9, 7.3), (3, 6.0), (9, 10.4), (12, 10.2), (3, 6.1) } โดย (age, weight)

ผมจะใช้ R เพื่อวิเคราะห์ข้อมูลเชิงสถิติ พื้นฐานครับ เปิด programe R ขึ้นมาครับ (run R จาก Start>All Programs>R>R 2.13.1 หรือ C:\Program Files\R\R-2.13.1\bin\i386\Rgui.exe หรือ R.exe ก็ได้เหมือนกันครับ )
แล้วพิมพ์คำสั่ง ตามข้างล่างนี้ลงไป
> age <- c(1, 3, 5, 2, 11, 9, 3, 9, 12, 3) #กด enter สร้างข้อมูลอายุแบบ vectors โดยใช้ function c(…) แล้วกำหนดใส่ตัวแปร age
> weight <- c(4.4, 5.3, 7.2, 5.2, 8.5, 7.3, 6.0, 10.4, 10.2, 6.1) #กด enter ทำเหมือนคำสั่งแรก แต่เป็น นำหนัก
> mean(age) #กด enter จะแสดง [1] 5.8 ที่หน้าจอ  mean คือ function มาตรฐานของ R เพื่อคำนวณค่าเฉลี่ยของอายุ
> mean(weight) #กด enter จะแสดง  [1] 7.06 คำนวณค่าเฉลี่ยของนำหนัก
> sd(age) # function sd คำนวนค่าเบี่ยงเบนมารตฐาน(standard deviation) ของอายุ
> cor(age, weight) #แสดงค่า [1] 0.9075655 ซึ่ง function cor คือค่า correlation ของ 2 ตัวแปร ระหว่าง age และ weight
ลองใช้คำสั่ง plot ครับ
> plot(age, weight) # R จะแสดงกราฟเส้นตรง 2 มิติโดยแกนนอน(x) แสดง age และแกนตั้ง(y) แสดง weight
และเมื่อต้องการออกจาก programe R ให้ใช้คำสั่ง q
> q() # จะออกจาก programe R

สรุปผลการวิเคราะห์ข้อมูลของเด็กทารก 10 คนนี้ มีอายุเฉลี่ย 5.8 เดือน และนำหนักเฉลี่ย 7.06 กิโลกรัม และเมื่อวิเคราะห์ความสัมพันธ์ระหว่างอายุ และน้ำหนัก พบว่ามีความสัมพันธ์กันถึงร้อยละ 90.76 เลยทิเดียว
เอาละทำความเข้าใจภาษา R และคำนวณค่าทางสถิติวิเคราะห์ เล็กน้อยนี้เป็นที่เรียนร้อยแล้ว เรามาใช้ R ทำงานร่วมกับ .NET ด้วย library R.NET กันเลยดีกว่า

R.NET… Actions!

1. ขั้นแรกให้ไป download R.NTE จาก http://rdotnet.codeplex.com/ จะได้ R.NET.dll มา
2. เปิด Visual Studio.NET 2010 ครับโดยเลือก Template projects เป้นแบบ test ตั้งชื่อว่า RNetTest ครับ
3. Add Reference R.NET.dll ที่ได้ download มาแล้วเข้ามาใน projects RNetTest ของเราครับ
4. เขียน code คำสั่งต่างๆตามข้างล่างนี้ลงไปใน class UnitTest1 ที่ TestMethod1

    using RDotNet;
    [TestClass]
    public class UnitTest1
    {
        [TestMethod]
        public void TestMethod1()
        {
            REngine.SetDllDirectory(@"C:\Program Files\R\R-2.13.1\bin\i386");// กำหนด path ของ R dll  ที่เราได้ install R ไว้แล้ว
            using (REngine engine = REngine.CreateInstance("RDotNet", new[] { "-q" }))  // quiet mode
            {
                NumericVector age = engine.EagerEvaluate("age <- c(1, 3, 5, 2, 11, 9, 3, 9, 12, 3)").AsNumeric();
                NumericVector weight = engine.EagerEvaluate("weight <- c(4.4, 5.3, 7.2, 5.2, 8.5, 7.3, 6.0, 10.4, 10.2, 6.1)").AsNumeric();

                NumericVector meanAge = engine.EagerEvaluate("mean(age)").AsNumeric();
                NumericVector meanWeight = engine.EagerEvaluate("mean(weight)").AsNumeric();
                NumericVector sdAge = engine.EagerEvaluate("sd(age)").AsNumeric();
                NumericVector sdWeight = engine.EagerEvaluate("sd(weight)").AsNumeric();
                NumericVector cor = engine.EagerEvaluate("cor(age, weight)").AsNumeric();
                string report = string.Format(
                    "สรุปผลการวิเคราะห์ข้อมูลของเด็กทารก 10 คนนี้ มีอายุเฉลี่ย {0} เดือน และนำหนักเฉลี่ย {1} กิโลกรัม และเมื่อวิเคราะห์ความสัมพันธ์ระหว่างอายุ และน้ำหนัก พบว่า มีความสัมพันธ์กันถึงร้อยละ {2:N} เลยทิเดียว",
                    meanAge.FirstOrDefault(), meanWeight.FirstOrDefault(), cor.FirstOrDefault() * 100);

                Console.WriteLine(report);
            }
        }
    }

เมื่อ run unit test นี้แล้วก็จะได้ผลลัพย์เป็น report สรุปผลการวิเคราะห์ข้อมูล print ออกมาเหมือนกับ R Program ครับ
หวังว่าคงจะเป็นจุดเริ่มต้นที่ดีสำหรับนักพัฒนา Software ประยุกต์ใดๆ ที่ต้องการวิเคราะห์ข้อมูลทางสถิติจาก module ของ R บน .NET Framework

และ link ข้างล่างนี่เป็นรายการทั้งหมดของ R package ที่ใช้คำนวณข้อมูลเพื่อการวิเคราะห์ข้อมูลในงานประยุกต์(domains)ต่างๆ คุณสามารถ download แล้วนำมาใช้งานได้เลย

http://cran.r-project.org/web/packages/available_packages_by_date.html

ขอบคุณครับ 🙂

Advertisements

#data-analysis, #statistic