Introduction to Kaggle – เรียนรู้การงานด้าน Data Science

Kaggle เป็นแพลตฟอร์มสำหรับ Predictive Modelling และการแข่งขันด้าน Analytics เพื่อหา Model ที่ดีที่สุดสำหรับ Dataset จากบริษัทและบุคคลทั่วไป [อันนี้ คำอธิบายอย่างเป็นทางการ [1] ] กล่าวให้ง่ายกว่านั้น Kaggle เป็นสนามทดลองสำหรับคนที่อยากจะทำงานด้าน Data Science โดย ไม่ต้องนับ 0 จากการติดตั้ง OS, Software โน่นนี่นั่น, Library ต่างๆ แล้วต้อง Configuration ให้ทำงานร่วมกันได้ อีกทั้ง เพียงแค่ สมัคร หรือ Authentication ด้วย Facebook, Google, Yahoo แล้ว สร้าง Profile ของตัวเอง เป็นอันเรียบร้อย หลังจากนั้น เราจะได้ “Kernel” ซึ่งจริง ๆ ก็คือ Virtual Machine ที่พร้อมใช้งาน สเปคเครื่องคือ [2] 4 CPU 16 GB RAM 6 Hours Execution Time 1 GB of disk space เอาไว้เก็บ Output จากการทำงาน สามารถใช้ GPU ในการคำนวณได้ด้วย ติดตั้ง Jupyter Notebook – Interactive Web สำหรับเขียน Code ภาษา Python/R เพื่อวิเคราะห์ข้อมูลได้ สามารถเพิ่ม Collaborator เข้ามาร่วมงานกันได้ด้วย ทั้งในส่วนของ Kernel และ Dataset ส่วนต่อไปคือ Dataset ก็จะมีผู้คนทั่วโลกได้ Upload ที่เปิด “Public” ให้พวกเราได้ลองวิเคราะห์กัน รวมถึง เราสามารถนำข้อมูลของเราเอง ขึ้นไปวิเคราะห์ก็ได้ โดยกำหนดให้เป็น “Private” ก็ได้เช่นกัน ชนิดของ Dataset ประกอบด้วย CSV JSON SQLite Archives BigQuery นอกจากนั้น ยังมีส่วนของการเรียนรู้ จาก Learn [3] ให้ศึกษาได้ตั้งแต่ การเขียนโปรแกรมภาษา Python, Machine Learning, Pandas, Data Visualization, SQL, R, Deep Learning สรุปคือ จากที่ทดลองทำผิดทำถูกมานานเป็นเวลา 2 ปีกว่า เพื่อ “สร้าง” ระบบของตนเอง (โดยพยายามสร้าง Hadoop Cluster + Spark) และ การศึกษาการเรียนภาษา Python บนเครื่อง Notebook ของตนเอง ซึ่งพบว่า เมื่อมีการประมวลผลหนัก ๆ เครื่อง  Core i5 , 8 GB ก็ยังหน่วง ๆ ไม่ไปไหนมาไหนเลย หลังจากได้ลองใช้ Kaggle ในเวลาไม่นาน ก็เข้าใจ Concept ของ Data Science มากขึ้น   ในบทความต่อ ๆ ไป จะมาแสดงตัวอย่างการใช้งานครับ ตอนนี้ ดู Youtube ไปพลาง ๆ What’s Kaggle? Introduction to Kaggle Kernels How to Make a Data Science Project with Kaggle   Reference: [1] https://en.wikipedia.org/wiki/Kaggle

Read More »

การใช้งาน Google Datalab Notebook บน Dataproc เพื่อสร้าง Machine Learning Model เบื้องต้น

ต่อจาก สร้าง Hadoop และ Spark Cluster เพื่องานด้าน Data Science ด้วย Google Cloud Dataproc + Datalab จาก Google Cloud Datalab คลิก Notebookแล้ว ตั้งชื่อ Demo01 เลือได้ว่า จะใช้ Python2 หรือ Python3 ในที่นี้จะเลือก Python3 ตรวจสอบรุ่นของ Spark ที่ใช้งานด้วยคำสั่ง spark.version แล้วกดปุ่ม Shift+Enter เพื่อ Run สามารถใช้คำสั่งไปย้ง Shell ซึ่งเป็น Linux ได้ โดยใช้เครื่องหมาย ! นำหน้า ในที่นี้ จะ Download iris dataset จาก https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data มาไว้ในเครื่อง mycluster-m ด้วย คำสั่ง ! wget https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data แล้ว เอาไปใส่ใน HDFS ด้วยคำสั่ง ! hdfs dfs -put iris.data / จะได้ผลประมาณนี้ จาก Machine Learning #01 – Python with iris dataset ซึ่งเดิมใช้ sklearn จะเปลี่ยนเป็น Spark MLlib เพื่อใช้ความสามารถของ Spark Cluster ได้ เริ่มต้นจาก Import Library ที่จำเป็นดังนี้ # Import Libaries from pyspark.ml import Pipeline from pyspark.ml.evaluation import MulticlassClassificationEvaluator from pyspark.ml.classification import LogisticRegression from pyspark.ml.tuning import ParamGridBuilder, CrossValidator from pyspark.ml.feature import VectorAssembler from pyspark.sql.types import * จากนั้น สร้าง Spark Dataframe (Concept จะคล้ายกับ Pandas แต่มีรายละเอียดที่มากกว่า) # get into DataFrame csvFile = spark.read.csv(‘/iris.data’, inferSchema=True) diz = {“Iris-setosa”:”1″, “Iris-versicolor”:”2″, “Iris-virginica”:”3″ } df = csvFile.na.replace(diz,1,”_c4″) df2 = df.withColumn(“label”,df[“_c4”].cast(IntegerType())) \ .withColumnRenamed(“_c0″,”sepal_length”) \ .withColumnRenamed(“_c1″,”sepal_width”) \ .withColumnRenamed(“_c2″,”petal_length”) \ .withColumnRenamed(“_c3″,”petal_width”) train,test = df2.randomSplit([0.75,0.25]) เริ่มจาก ให้ spark session (spark) อ่านไฟล์ CSV จาก HDFS /iris.data โดยระบุว่า ให้กำหนด Data Type อัตโนมัติ (inforSchema=True) และไฟล์นี้ไม่มี Header Dataset นี้ ประกอบด้วย 5 columns เมื่อ Spark อ่านข้อมูลเข้ามา จะตั้งชื่อ column เป็น _c0, _c1, _c2, _c3, _c4 โดย _c4 จะเป็น label ของชนิดของดอก iris ซึ่งกำหนดเป็น String => Iris-setosa, Iris-vesicolor,

Read More »

ปัญหาการ Debug บางคำสั่งใน .NET Web Project (VS.NET 2013)

ในการพัฒนา web application ด้วย Visual Studio.NET 2013 ผู้พัฒนาบางท่าน อาจจะเคยเจอปัญหาเมื่อ debug ไปถึงบางคำสั่งแล้ว คำสั่งไม่ทำงานตามที่ควรจะเป็น หรือบางครั้งก็ไม่มีการ return ค่าออกมา ทั้ง ๆ ที่ค่าของข้อมูลถูกต้อง ซึ่งหากเจอปัญหานี้แล้ว ให้ลองสังเกตดังต่อไปนี้ เครื่องที่ใช้พัฒนาเป็น Windows 32 bit หรือ 64 bit ตรวจสอบแน่ใจแล้วว่าใช้งานคำสั่งได้ถูกต้อง และข้อมูลที่คำสั่งนี้นำไปประมวลผลมีความถูกต้องแล้ว ถ้าเครื่องที่ใช้เป็น Windows 64 bit ให้ทดลองทำตามดังนี้ คือ ไปที่เมนู TOOLS –> Options จะปรากฏหน้าต่าง Options เมนูด้านซ้ายมือของหน้าต่าง Options เลือกเมนูย่อย Projects and Solutions และภายใต้เมนูนี้ เลือกเมนูย่อย Web Projects จะเห็นตัวเลือกด้านขวามือสองตัวเลือก ให้เลือกเครื่องหมายถูกตัวเลือกแรก คือ Use the 64 version… คลิกปุ่ OK และทดลอง run project และ debug คำสั่งที่พบปัญหาอีกครั้ง   ตัวอย่างคำสั่งที่พบปัญหา สำหรับตัวอย่างคำสั่งที่เคยพบปัญหาเมื่อทำการ debug คือ คำสั่งที่ใช้ในการอ่านข้อมูลจาก registry Registry.LocalMachine.OpenSubKey โดยคำสั่งนี้จะอ่านข้อมูลจาก registry ตาม key ที่ระบุ  โดยรายละเอียดปัญหาที่พบคือ มีข้อมูลใน registry ตาม key ที่ระบุจริง แต่ตอน debug กลับ return ค่าว่างกลับมา  ซึ่งหากไปใช้ใน projects ที่เป็น Windows และทำการ debug คำสั่งนี้จะ return ข้อมูลออกมาได้ถูกต้อง

Read More »

การเรียกใช้งาน constructor จากอีก constructor ใน C#.NET

constructor คืออะไร constructor ก็คือ ฟังก์ชันที่ถูกเรียกใช้งาน เมื่อ object ถูกสร้างขึ้นมา ซึ่งใน C#.NET  ก็คือฟังก์ชันที่ตั้งชื่อเป็นชื่อเดียวกับชื่อ class นั่นเอง   constructor มีประโยชน์อย่างไร ในการสร้าง object ขึ้นมา บางครั้งต้องมีการระบุค่าเริ่มต้นบางอย่างให้กับ object นั้น ซึ่ง constructor ก็จะเป็นเครื่องมือหนึ่งที่เป็นตัวช่วยบังคับให้ต้องระบุค่าเริ่มต้นนี้ตอนสร้าง object นั่นเอง   ยกตัวอย่าง เช่น class Student { public Student(string studentID) { คำสั่งดึงข้อมูลนักศึกษาด้วย Student ID โดยใช้ข้อมูล Student ID จาก argument studentID } } จากตัวอย่างนี้ ต้องการสร้าง object Student โดยใช้ Student ID เพื่อไปดึงข้อมูลเบื้องต้นของนักศึกษามาแสดง ดังนั้น object ใหม่ที่สร้างจาก class Student ก็จะต้องระบุค่า Student ID ให้กับ argument studentID ก่อน ตัวอย่างการเรียกใช้งานคือ Student student = new Student(12345); student ก็คือ object ที่ถูกสร้าง 123456 คือ ข้อมูล Student ID ทีต้องระบุตอนที่ object นี้ถูกสร้างนั่นเอง   ทำไมต้องเรียกใช้ constructor จากอีก constructor หนึ่ง ในบางครั้งเมื่อเราใช้งาน class ไประยะเวลาหนึ่ง อาจะเจอกรณีที่ constructor เดิม ยังไม่รองรับความต้องการที่เปลี่ยนไปหรือเพิ่มขึ้น   แต่ความต้องการใหม่นั้นยังคงต้องใช้ชุดคำสั่งและขั้นตอนการทำงานเหมือนกับที่มีอยู่เดิมด้วย และมีการเพิ่มเติมชุดคำสั่งใหม่เข้าไปเล็กน้อยเพื่อให้รองรับกับความต้องการใหม่ด้วย ซึ่งทางเลือกที่เป็นไปได้คือ ปรับแก้ constructor เดิมที่มีอยู่ให้รองรับความต้องการใหม่ สร้าง constructor ใหม่ โดยทำการสำเนาชุดคำสั่งทั้งหมดใน constructor เดิมมา สร้าง constructor ใหม่ โดยเรียกใช้งาน constructor เดิม มาพิจารณาแต่ละทางเลือก ทางเลือกที่ 1 เป็นการปรับแก้ของเดิมที่มีอยู่แล้ว ซึ่งเป็นทางที่ควรเลี่ยงที่สุด เพราะอาจจะไปกระทบกับการทำงานเดิมที่ถูกต้องอยู่แล้ว และอาจจะกระทบเป็นลูกโซ่กับ object อื่นที่มาเรียกใช้ ทางเลือกที่ 2 สำเนาคำสั่งทั้งหมดจาก constructor เดิม มาใส่ใน constructor ใหม่ แล้วเขียนคำสั่งเพิ่มเพื่อให้รองรับความต้องการใหม่ ซึ่งทางเลือกนี้ถือว่าดีกว่าทางเลือกแรก เพราะไม่กระทบกับการทำงานเดิมแน่นอน แต่จะเห็นว่าเกิดความซ้ำซ้อนกันของชุดคำสั่งของ constructor เดิม และใหม่ และจะพบปัญหาในกรณีที่มีความจำเป็นต้องปรับปรุงคำสั่งที่ใช้อยู่ใน constructor ทั้งสอง ผู้พัฒนาก็จะต้องมาแก้ทั้งสองที่ให้เหมือนกันอีก ซึ่งจะเป็นการเสียเวลา ทางเลือกที่ 3 เรียกใช้งาน constructor เดิม ซึ่งจะเห็นว่าเป็นวิธีการที่สะดวกรวดเร็วที่สุด หากต้องการปรับปรุงคำสั่ง ก็เพียงไปจัดการที่ constructor เดิมเท่านั้น   วิธีการเรียกใช้งาน constructor เดิม จาก constructor ใหม่ syntax ที่ใช้ใน C#.NET คือ  หลังจากส่วนประกาศ constructor ให้ใช้  : this() เพิ่มเข้าไป ยกตัวอย่าง   class Student { public Student(string studentID) //constructor เดิม { คำสั่งดึงข้อมูลนักศึกษาด้วย Student ID โดยใช้ข้อมูล Student ID จาก argument studentID }   public Student(string studentID, string citizenID) : this(studentID)  //constructor ใหม่ { คำสั่งใหม่ที่เพิ่มเติม } }

Read More »

การยกเลิก SMS ไม่พึงประสงค์/ SMS กวนใจ

เชื่อว่าหลายท่านคงเคยประสบกับปัญหากวนใจเรื่อง SMS ไม่พึงประสงค์ ที่ส่งมาโดยที่เราไม่ต้องการ และบางครั้ง SMS เหล่านี้ก็ยังคิดค่าบริการ ทั้ง ๆ ที่เราไม่ได้สมัคร หรือบางครั้งอาจจะสมัครโดยไม่ตั้งใจหรือไม่รู้ตัว ดังนั้นในบทความนี้จะเสนอวิธีการหนึ่ง ที่จะช่วยให้เราสามารถยกเลิก SMS กวนใจเหล่านี้ออกไปบางส่วนได้ ถึงแม้จะไม่ทั้งหมด แต่ก็ช่วยบรรเทาความรำคาญลงไปได้บ้าง  โดยช่องทางที่จะแนะนำนี้เป็นการร่วมมือกันระหว่าง กสทช. และผู้ให้บริการเครือข่ายโทรศัพท์เคลื่อนที่ในการให้บริการยกเลิก SMS ดังกล่าว ซึ่งผู้ใช้บริการสามารถทำได้ด้วยตนเอง โดยไม่มีค่าใช้จ่าย ดังนี้ กด *137 แล้วโทรออก ทำตามคำแนะนำจากเสียงตอบรับอัตโนมัติของแต่ละผู้ให้บริการเครือข่ายฯ รอรับ SMS แจ้งยกเลิก   ตัวอย่าง SMS ไม่พึงประสงค์ และ SMS ตอบกลับ   จะเห็นว่าหลังจากที่ใช้บริการยกเลิก SMS ผ่าน *137 แล้ว บรรดา SMS ไม่พึงประสงค์ก็ลดน้อยลง เหลือเพียง SMS ข่าวสารจากผู้ให้บริการเครือข่ายฯ เท่านั้น   และก็เป็นวิธีการที่ง่ายและรวดเร็ว เพียงไม่กี่ขั้นตอน แค่นี้ก็สามารถยกเลิก SMS กวนใจออกไปได้บางส่วนแล้ว   สิ่งที่ควรรู้ ถึงแม้ว่าเราจะได้ทำการยกเลิก SMS ไม่พึงประสงค์ดังกล่าวไปแล้ว แต่ก็อาจจะมี SMS ไม่พึงประสงค์ใหม่ ๆ เข้ามาได้อีก ทั้งนี้เพราะการใช้วิธีนี้ คือการยกเลิก SMS ปัจจุบันหรือ SMS ที่ถูกสมัครไปแล้ว ไม่ได้เป็นการป้องกัน SMS ใหม่ ๆ ที่จะเกิดขึ้นในอนาคต (เช่น อาจจะเผลอไปสมัครรับ SMS โดยไม่รู้ตัวอีก)  อย่างไรก็ตาม ถ้าเกิดปัญหานี้ซ้ำอีก ก็สามารถใช้การโทรไปยัง *137 เพื่อยกเลิก SMS ได้เป็นระยะ ๆ   สำหรับรายละเอียดเพิ่มเติมว่า SMS เหล่านี้มาได้อย่างไร หรือมี SMS ประเภทไหนที่สามารถยกเลิกได้ด้วย *137 บ้าง และเราจะระมัดระวังอย่างไร ไม่ให้เผลอไปสมัครบริการ SMS เหล่านี้โดยไม่ตั้งใจ สามารถศึกษาเพิ่มเติมได้จาก   http://tcp.nbtc.go.th/website/home/detail/631/th   ขอขอบคุณที่มาของเนื้อหาจากสำนักรับเรื่องร้องเรียนและคุ้มครองผู้บริโภคในกิจการโทรคมนาคม สำนักงานคณะกรรมการกิจการกระจายเสียง กิจการโทรทัศน์ และกิจการโทรคมนาคมแห่งชาติ   แนะนำการยกเลิก SMS ไม่พึงประสงค์เพิ่มเติม สำหรับผู้ใช้งาน AIS นอกจากการยกเลิกบริการ SMS ไม่พึงประสงค์ผ่านทาง *137 แล้ว ผู้ให้บริการเครือข่ายฯ AIS ยังมีบริการให้ลูกค้าสามารถยกเลิก SMS เหล่านี้ได้ด้วยตนเองผ่านทางเว็บด้วย โดยทำตามขั้นตอนดังนี้ เข้าไปที่  URL https://myais.ais.co.th เมื่อเข้ามาแล้วจะมีหน้าจอให้ login เข้าใช้งานระบบโดยการกรอกเบอร์โทรศัพท์มือถือ และรอรับ OTP เพื่อใช้ในการเข้าใช้งานระบบแต่ละครั้ง หรือจะใช้วิธีการสร้างบัญชีผู้ใช้และรหัสผ่านใหม่สำหรับการเข้าใช้งานครั้งต่อ ๆ ไปก็ได้ เมื่อ login เข้าสู่ระบบแล้ว จะปรากฏเมนูด้านขวามือสำหรับการจัดการต่าง ๆ เลือกเมนู บริการ จะเห็นว่าว่ามีเมนู เลือกรับ / ยกเลิก SMS  ให้เลือกเมนูนี้เพื่อเข้าไปยกเลิกบริการ SMS ที่เราไม่ต้องการ เราสามารถเลือกว่าจะรับหรือไม่รับ SMS ทั้งที่มาจาก AIS และไม่ได้มาจาก SMS ได้ตามต้องการ

Read More »