Load tweet with TwitterAPI with Python

ไลบรารี่ TwitterAPI เป็นไลบรารี่สำหรับติดต่อกับ Twitter Rest API และ Twitter Stream API ด้วยภาษา Python โจทย์ของเราวันนี้คือการโหลดทวีต โดยการระบุคีย์เวิร์ดและจำนวนที่ต้องการ และเซฟลงไฟล์ .txt เพื่อใช้วิเคราะห์ในลำดับต่อไป ติดตั้ง ไลบรารี่ TwitterAPI ผ่านทางคอมมานด์ไลน์ด้วยคำสั่ง  (แต่เนื่องจากต้องใช้ไลบรารี่ requests เลยพ่วงติดตั้งควบคู่กันไปด้วย)

กรณีที่ไม่สามารถดาวน์โหลดได้ให้ลองเปลี่ยน Mirror ดู เนื่องจากผมอยู่จีน ประสบปัญหา PyPI บางเว็บติดต่อไม่ได้ ทำให้ต้องหามิลเร่อร์อื่นที่ใช้งานได้แทน

จากนั้นเข้าไปที่เว็บ https://apps.twitter.com/ กด Create New APP ใส่รายละเอียด APP และกดสร้าง เราจะได้ คีย์อยู่สี่ชุดใช้ใส่ลงไปในโค้ด คือ consumer_key,consumer_secret,access_token_key,access_token_secret

เราจะเรียกฟังก์ชั่น TwitterRestPager โดยคิวรี่ข้อมูลผ่าน search/tweets มีรายละเอียดการเขียนคิวรี่ตามลิงค์นี้ ตามโค้ดด้านบน คิวรี่คือหาทวีตทั้งหมดที่มี #iphoneX ปรากฏอยู่โดยดึงมาทีละ 100 เรคคอร์ด…

Cross Validation with K-fold

ปรกติชุดข้อมูลจะถูกแบ่งเป็นสองส่วน คือส่วนที่ใช้สำหรับเทรนโมเดล และส่วนที่เทสโมเดล เช่นแบ่งข้อมูลเป็นส่วนเทรนโมเดลสัก 60% และสำหรับเทสโมเดลอีก 40% เมื่อเราสร้างโมเดลขึ้นมาเราก็จะปรับแต่งพารามิเตอร์ของโมเดล เพื่อให้ได้คะแนนความแม่นยำและประสิทธิภาพของโมเดลให้ได้มากที่สุด โดยใช้ข้อมูลในส่วนที่เป็นเทสในการปรับแต่งพารามิเตอร์ตรงนี้ ดังนั้นโมเดลที่เราเทรนขึ้นมาค่อนข้างจะมีความแม่นยำและประสิทธิภาพสูงเฉพาะชุดข้อมูลที่นำมาเทส เราเรียกกรณีนี้ว่า Overfitting แต่เมื่อเจอชุดข้อมูลที่ไม่เคยเห็นมาก่อนอาจจะทำงานด้อยประสิทธิภาพและความแม่นยำต่ำได้ การแก้ปัญหา Overfitting ที่มักเห็นได้บ่อยๆคือการทำ K-fold Cross Validation โดยเราจะนำส่วนข้อมูลที่เป็นเทสคงไว้ และจะสนใจเฉพาะส่วนข้อมูลที่ใช้เทรนมาแบ่งเป็นสองส่วน คือส่วนที่ใช้เทรน(Training Folds) และอีกส่วนคือส่วนที่ใช้ในการทำ Validate (Test folds) โดยทำแบบนี้เรื่อยๆจำนวน K รอบโดยมีการผลัดเปลี่ยนกันระหว่างส่วนที่ใช้เทรนนิ่ง(K-1 ชุด)และส่วนที่ใช้ในการ Validation(1 ชุด) ในแต่ละรอบให้วัดค่าความแม่นยำและประสิทธิภาพออกมา(หรือใช้ค่า error ก็ได้) เมื่อทำครบ K รอบให้หาค่าเฉลี่ยความแม่นยำและประสิทธิภาพ(หรือใช้ค่า error ก็ได้)ของทุกรอบเป็นคะแนนแทนการวัดแบบเดิม จะสังเกตได้ว่ากรณีนี้ ทุกๆส่วนของชุดข้อมูลจะถูกทำการเทส ทำให้การปรับจูนพารามิเตอร์ของโมเดลไม่โอนเอนไปที่ชุดข้อมูลเทสใดเทสหนึ่ง ปัญหา Overfitting ก็จะหมดไป โค้ดด้านล่างจะเป็นการทำ K-fold Cross Validation ด้วย python โดยใช้…

Precision and Recall

สมมติเราได้เทรนโมเดลหนึ่งๆให้สามารถแยกวิเคราะห์ใบหน้าหมาออกจากแมวได้ เราจะสามารถวัดความแม่นยำและความมีประสิทธิภาพของโมเดลนั้นๆได้อย่างไร จากโมเดลด้านบนจะเห็นได้ว่าเราจะแบ่งประเภทของการจำแนกได้สี่แบบ True Positives (TP) คือ ทำนายว่าเป็นหมา แล้วหน้าจริงๆก็เป็นหมา True Negatives(TN) คือ ทำนายว่าไม่เป็นหมา หน้าจริงๆก็ไม่ใช่หมา False Positives(FP) คือ ทำนายว่าเป็นหมา แต่หน้าจริงๆไม่ใช่หมา False Negatives(FN) คือ ทำนายว่าไม่เป็นหมา แต่หน้าจริงๆเป็นหมา การหาความแม่นยำ Precision = TP/(TP+FP) = จากโมเดลด้านบนจะได้ว่า 5/(5+3)=  0.625 ถ้าเต็ม 1 คือมีความแม่นยำสูง การหาความมีประสิทธิภาพ Recall(หรืออีกชื่อเรียก sensitivity) = TP/(TP+FN) = จากโมเดลด้านบนจะได้ว่า 5/(5+7) =0.4167 ตรงนี้ตีความง่ายๆว่ามีใบหน้าน้องหมามากมายที่ไม่ได้ถูกระบุ การรู้จำหน้าน้องหมาต่ำ ยังสามารถหาค่าอื่นๆได้อีกเช่น Accuracy, Misclassification Rate เป็นต้น คลิกที่นี่ครับ มีระบบการวัดการทำงานของโมเดลอันหนึ่งที่เรียกว่า F-score คือระบบการวัดที่ใช้ค่าเฉลี่ยฮาร์โมนิคระหว่าง…

K Means Clustering with Python

K Means เป็นอัลกอริทึม Machine Learning แบบ Unsupervised คือไม่ต้องมีการเทรนจากมนุษย์ก่อน ปรกติ Supervised Machine Learning จะต้องกำหนด Input และ Output เพื่อใช้เทรนโมเดล แต่ K Means นั้นกำหนดเพียง Input อย่างเดียวก็พอ ความสามารถของ K Means นั้นคือการแบ่งกลุ่มข้อมูลหรือที่เรียกว่า Clustering เพื่อแบ่งข้อมูลออกเป็น K กลุ่มตามชื่อของมัน โดนแต่ละกลุ่มจะมีจุดศูนย์กลางข้อมูลเรียก Centroid โดย Centroid นี้เกิดจากค่าเฉลี่ย(Means) ตำแหน่งของข้อมูลทุกตัวในกลุ่มข้อมูล โพสนี้จะเป็นการรีวิวแลปโน้ตและใช้โค้ด python ตัวเดียวกับในเว็บ pythonprogramming.net ในการอธิบาย สาเหตุที่เลือกเว็บนี้เพราะมีการสอนเขียนโปรแกรม python ที่เป็นขั้นเป็นตอนเข้าใจง่ายและไม่ใช้ library ในการเทรนโมเดล เหมือนที่เว็บอื่นทำ ซึ่งจะทำให้เข้าใจในตัว K Means ได้มากกว่า โดยอัลกอริทึม K Means มีขั้นตอนดังนี้ กำหนดก่อนว่าจะแบ่งกี่กลุ่มข้อมูล…

Convert Text into vectorial form using TF-IDF

ในการที่จะเอาข้อความไปคำนวนได้นั้นต้องแปลงข้อความให้อยู่ในรูปของเวคเตอร์(อาเรย์หนึ่งมิติ) ที่เป็นตัวเลขจึงจะสามารถเอาไปคำนวณทางคณิตศาสตร์ ได้เช่น หาความคล้ายคลึงกันของทั้งสองข้อความ การสืบค้นข้อความ การคัดแยกประเภทข้อความ เป็นต้น แรกเริ่มเลยเราจะทำดิกชันนารี่ตัวหนึ่งที่ชื่อ Bag of Words เป็นอาเรย์หนึ่งมิติเก็บคำทุกคำที่เกิดขึ้นในข้อความทั้งหมด ไม่เก็บคำซ้ำ

จากตัวอย่างข้างบน สี่ประโยค เราจะสแกนทีละประโยค สแกนทีละคำ ถ้าใน BoW ไม่มีคำนั้นก็จะแอดลงไปใน BoW และนี่คือหน้าตาของ BoW หลังจากสแกนเสร็จสิ้น

จากนั้นเราจะทำการแปลงแต่ละประโยคให้อยู่ในรูปของ Term Frequency (TF) เข้าไปนับว่าคำใน BoW ของแต่ละประโยคมีความถี่เท่าไรและนำมาหารด้วยจำนวนคำทั้งหมดในประโยคนั้นๆ โดยที่   คือความถี่ของคำ w ในประโยค N คือจำนวนคำทั้งหมดในประโยค

สังเกตว่าเราให้คำทุกคำมีค่าน้ำหนักเท่ากัน ถ้าเจอเท่าไรก็นับเท่านั้น สังเกตว่ามีคำบางคำที่พบบ่อยมากๆ และไม่มีนัยยะสำคัญเช่นพวก stop words อาทิเช่น a and the on in at this…

Review : Neural Network Demystified part 1

ซีรีย์ชุดนี้จะเป็นการรีวิวและเป็นการโน้ตแลบเป็นเวอร์ชั่นภาษาไทยจากคลิปวิดีโอจากช่อง Welch Labs เกี่ยวกับ Neural Network ในโพสนี้จะพูดเกี่ยวกับ Data และ Architecture สมมติให้ตารางค่า X กับ y โดยที่ X เป็น จำนวนชั่วโมงการนอน และจำนวนชั่วโมงการทบทวนก่อนวันสอบ ส่วน y เป็น คะแนนที่ทำได้   จากตารางด้านบนจะเห็นได้ว่าเราต้องการจะทำนายว่าถ้าเรานอน 8 ชั่วโมงและทบทวนหนังสือ 3 ชั่วโมง จะได้คะแนนสอบเท่าไร โดยเราจะทำนายโดยใช้ข้อมูลที่มีอยู่ก่อนหน้านี้แล้วก็คือในส่วนของเทรนนิ่ง ลักษณะแบบนี้เรียก machine learning แบบ supervised คือต้องมีการให้ input และ output มาล่วงหน้าเพื่อใช้ในการเทรน ปัญหานี้เราจะเรียก Regression problem คือค่าที่ทำนายออกมาเป็นค่าแบบ continuous หรือค่าทศนิยม ไม่ใช่ทำนายออกมาว่าเป็นกรุ๊ป A B หรือ C ถ้าแบบนั้นจะเรียก Classifying problem ทีนี้โมเดล Machine Learning…

To,CC and BCC when composing email

หลายคนอาจจะสงสัยเวลาเขียนอีเมลจะมีช่อง CC และ BCC ส่วนช่อง To นี่หลายคนคงเข้าใจอยู่แล้ว คือเวลาเขียนอีเมลจะส่งหาใครก็ใส่ในช่อง To ถ้ามีหลายคนก็ใช้คอมม่าคั่นเอา ทีนี้ สมมติเราจะส่งสำเนาอีเมลไปให้คนอื่นโดยที่คนอื่นเห็นด้วยว่าจดหมายส่ง To ไปหาใครบ้างและสำเนาไปหาใครบ้างก็ต้องใส่อีเมลในช่อง CC เช่น ส่ง To อีเมลหาลูกน้อง และ CC สำเนาอีเมลให้หัวหน้าของลูกน้องคนนั้นเพื่อให้รับทราบในเนื้องานด้วยเป็นต้น ลูกน้องและหัวหน้าต่างเห็นรายละเอียดหมดว่าส่งไปหาใครบ้างในช่อง To และ CC ช่อง To จึงเป็นคู่สนทนาโดยตรง และ CC จึงเป็นผู้ที่เกี่ยวข้อง รับสารทางอ้อม ทีนี้ มีอีกกรณีหนึ่งเป็นการส่งสำเนาอีเมลเหมือนกันแต่เป็นในทางลับคือ ไม่อยากให้ ผู้รับอีเมลด้วยช่อง To และ CC ทราบ ก็ต้องส่งด้วย BCC แม้กระทั่งผู้รับคนอื่นที่อยู่ใน BCC ต่างก็ไม่เห็นกันและกัน ในทางกลับกันผู้รับที่อยู่ในช่อง BCC จะเห็นว่าอีเมลนี้ส่งไปหาใครบ้าง(To และ CC)  และผู้ส่งเท่านั้นที่จะเห็นรายชื่อทั้งหมดในช่อง BCC กระทู้นี้แม้เป็นเรื่องเล็กน้อยแต่ก็มีประโยชน์มากในการใช้อีเมล ประเด็นอื่นๆที่ควรจะรู้ในการเขียนอีเมล…

Betweeness Centrality

ใช้หาว่าใครเป็นศูนย์กลางระหว่างสองกลุ่ม คำนวนได้จาก โดยที่ คือจำนวนของเส้นทางที่สั้นสุดระหว่างโหนด s ไปโหนด t ส่วน   คือจำนวนของเส้นทางที่สั้นสุดระหว่างโหนด s ไปโหนด t แต่ต้องผ่านโหนด  ตัวอย่าง

จะได้พาททั้งหมดดังนี้

เช่นจะหา  ทำได้โดย  สาเหตุที่คูณด้วยสองเพราะว่าเป็นกราฟแบบไม่มีทิศทางดังนั้นจึงมีพาทวิ่งกลับด้วย เช่น จาก 3 ไป 1 จาก 4 ไป 1 จาก 5 ไป 1 เป็นต้น ดังนั้นจะได้ ถ้าจะเอาไปเทียบกับเครือข่ายสังคมอื่นๆต้อง normalize ก่อน โดยเอาไปหารด้วยค่า max สังเกตจากสมการด้านบนพจน์ที่ 4 หายไปครึ่งหนึ่ง พจน์ที่ 5 กับพจน์ที่ 6 ไม่มี ถ้ามีหมดจะได้ 6 คูณ 2 จะได้ 12  ค่า 12 นี้ก็คือ…

Degree Centrality

เป็นการหาว่าโหนดที่เราสนใจมีความสำคัญเพียงใดใน Social Network โดยดูจากจำนวน degree หรือจำนวนเส้นที่เชื่อมต่อระหว่างโหนดที่เราสนใจกับโหนดอื่นๆ สำหรับกราฟไม่มีทิศทาง(undirected graph) ค่า degree centrality สำหรับโหนด  คือ โดยที่  คือ degree หรือจำนวน adjacent edge ของโหนด  ถ้าเป็นกราฟแบบมีทิศทาง(directed graph) สามารถเลือกใช้ in-degree หรือ out-degree หรือใช้ทั้งสองร่วมกันก็ได้ โดย   ใช้วัดว่าบุคคลนั้นเป็นคนที่ได้รับความนิยมเพียงใดใน Social Network  ใช้วัดว่าบุคคลนั้นเป็นคนที่ชอบเข้าสังคมเพียงใดใน Social Network แต่ถ้าไม่สนใจทิศทางก็จะได้ ซึ่งจะเท่ากันกับ degree centrality ของกราฟที่ไม่มีทิศทาง ถ้าจะเอาค่า degree centrality จากเครือข่ายสังคมหนึ่งไปเทียบกับเครือข่ายสังคมอีกอันหนึ่งจะยังเทียบไม่ได้ เช่นเทียบ twitter กับ facebook  ต้องทำการ normalization ก่อนซึ่งทำได้หลายวิธีดังนี้ หารด้วยจำนวน degree ที่เป็นไปได้มากสุด  โดยที่ n…

PageRank Algorithm

อัลกอริทึม PageRank ใช้จัดอันดับเว็บและช่วยให้ได้ผลลัพธ์ของ search engine ที่ดียิ่งขึ้น คิดค้นโดย Sergey Brin และ Larry Page ปี 1998 สมัยเป็นนักศึกษาอยู่ที่ Standford University หรือที่หลายๆท่านรู้จักในฐานะผู้ก่อตั้ง Google หลักการของมันคือ เว็บไซต์จะมีความสำคัญหรือลำดับที่ดีก็ตื่อเมือถูกชี้โดยเหล่าบรรดาเว็บไซต์ที่สำคัญหรือลำดับที่ดีเช่นกัน ตัวอย่างจากภาพด้านบนเป็น Directed Graph ที่ใช้แทนโครงสร้างของเว็บไซต์ เว็บไซต์เบอร์ 1 มีลิงค์เชื่อมไปยัง เว็บไซต์เบอร์ 2 และเว็บไซต์เบอร์ 3เว็บไซต์เบอร์ 2 ไม่มีลิงค์เชื่อมไปยังเว็บไซต์ใดๆเลย เว็บไซต์เบอร์ 3 มีลิงค์เชื่อมไปยัง เว็บไซต์เบอร์ 1 เว็บไซต์เบอร์ 2 และเว็บไซต์เบอร์ 5 เว็บไซต์เบอร์ 4 มีลิงค์เชื่อมไปยัง เว็บไซต์เบอร์ 5 และเว็บไซต์เบอร์ 6 เว็บไซต์เบอร์ 5 มีลิงค์เชื่อมไปยัง เว็บไซต์เบอร์ 4…