My First Data Science Project with Python

“My First Data Science Project with R”

Sharing by Kan Ouivirach, Data Science Team

meetup_Python

ไฟล์โน้ตบุคนี้สร้างขึ้นมาเพื่อประกอบการเรียนรู้การทำ Tweet Bayes Classification อย่างง่าย โดยเราจะจำแนกประเภทของทวีตว่าเป็นทวีตที่เกี่ยวกับร้านกาแฟ Amazon (AMZ) หรือไม่ (OTH)

ก่อนอื่นเรามาดูข้อมูลว่ามีหน้าตาเป็นอย่างไรบ้าง

In [1]:
with open('tweet_data.csv', 'rb') as csv_file:
    for each in csv_file:
        print each
AMZ, @ Amazon Cafe @Sermthai Complex http://t.co/7WwAbgbt6w,OTH,"Forget the Everything StoreAmazons An Everything Business - Amazon is known as the ""everything store."" But now m... http://t.co/vaKUR3hsT7",

AMZ, @ Amazon Cafe https://t.co/BGWpW3Q2LC,OTH,Forget the Everything StoreAmazons An Everything Business http://t.co/NuaNuU4okJ Interesting #LiderConectado,

AMZ,#CafeAmazon #BlendedBeverage #GreenTea @ Cafe' Amazon Victoria Garden เพชรเกษม69 ,OTH,Forget the Everything StoreAmazons An Everything Business http://t.co/odS6jDsxLI #technology #tech,

AMZ,#cafeamazon @ on the way ,OTH,Go and buy my book on the Kindle store - The Mad Hatter's Cafe by Erin Leonard  http://t.co/eQqUAjxgnC,

AMZ,#sister #slowlife #cafeamazon @ Cafe Amazon @ PTT Sukhaphibarn3 ,OTH,http://t.co/eQqUAjxgnC http://t.co/YHql7hqjlA  GO BUY MY BOOK ON THE KINDLE STORE FOR 2.99 / OTHER PRICES IN OTHER COUNTRIES,

AMZ,#slowlife #cafeamazon #thehundredsishuge #thehundreds @ Cafe Amazon @ PTT Sukhaphibarn3 ,OTH,I love my new  #luxessentials French Press Maker. It makes #coffee taste so good!  http://t.co/obgLGeMDSO,

AMZ,"$20 to Spend at Mello Cafe, $12 - Save 40% http://t.co/fYnxvLR7HE http://t.co/br1pl34DGf",OTH,I'm earning #mPOINTS with #AskDaBall ! http://t.co/b8PG21JDy5 #app,

AMZ,@ Amazon Cofee @ Amazon Cafe@Ptt Seireethai https://t.co/DIgUpwR0xb,OTH,"Leo Coffee, Tea & Coffee Maker 50% off + Free Shipping from Rs. 85 @ Amazon http://t.co/LZUT9XwsiQ #fb",

AMZ,@PocketMath @kvpops @CafeAmazon It was awesome :),OTH,"Leo Coffee, Tea & Coffee Maker 50% off + Free Shipping from Rs. 85 @ Amazon http://t.co/v5Wjv8lmgj",

AMZ,@TerryTyler4 End of discussion - but #Cromer readers can check out Terry's own English usage at http://t.co/1t4KSV0A4a - great reads!,OTH,"QCY QY8 Mini Bluetooth 4.1 Sweatproof Headphones, Wireless Stereo Running Sports Gym Exercise Headsets with Mi... http://t.co/KSU1aXJNlr",

AMZ,afternoon greentea zzZz (@ Caf Amazon) https://t.co/4kKv0j4xpJ,OTH,"QCY QY8 Mini Bluetooth 4.1 Sweatproof Headphones, Wireless Stereo Running Sports Gym Exercise Headsets with Mi... http://t.co/qx5mVWetOE",

AMZ,Alone :) #cafeamazon #greentea #happy #fresh #vscocamthailand #vsco #vscocam,OTH,"QCY QY8 Mini Bluetooth 4.1 Sweatproof Headphones, Wireless Stereo Running Sports Gym Exercise Headsets with Mi... http://t.co/SNSs5xTyxd",

AMZ,Amazon Cofee @ Amazon Cafe@Ptt Seireethai instagram.com/p/8xavoJjNZ5/,OTH,Rough Guide to Arabic Caf 5 http://t.co/ihUXgiz3p5,

AMZ,Before Game #cafeamazon #tracksair ,OTH,RT @AuthorJude_O: #FREE Looking for a novella? A beach read while on vacations? Under the Sun by @JUDEOUVRARD #romance #love http://t.co/Sm,

AMZ,Black #Coffee #cafeamazon instagram.com/p/1ch0TWQgCt/,OTH,RT @AuthorJude_O: #FREE Looking for a novella? A beach read while on vacations? Under the Sun by @JUDEOUVRARD #romance #love http://t.co/Sm,

AMZ,Cafe amazon in valentine's day. #coffee #coffeofday #coffeshop #cafeamazon #valentine #valentinesday ,OTH,"RT @blunted215: today I learned that you can order Plan B on Amazon... which is cool, but Prime shipping takes two days.",

AMZ,chill with friends  @ Cafe Amazon Au Mall https://t.co/NtPlNTQSxG,OTH,"RT @CalumetEditions: RT @AmznFavorites Deliciously outrageous. MAGEL's DAUGHTER. Sex, murder and #ghosts  http://t.co/Z2i1RSDMbK #Kindle #",

AMZ,Chocolate @ Cafe' Amazon Future Park Rungsit https://t.co/yZgO0RGDa8,OTH,RT @Carmen_Books: From #Draculas country comes#paranormal #thriller by Carmen Stefanescu#WildChildBooks http://t.co/PydF0Ct1Rf,

AMZ,coffe o'clock ?? #cafeAmazon @ cafe'Amazon ,OTH,RT @gary_lindberg: RT @AMZ0NE  #Ebook - A dialogue between Israelis & Palestinians. Please Retweet. http://t.co/KpIXyTXdT4 #Kindle #amreadi,

AMZ,coffee time by cafeamazon pic.twitter.com/bnH8BZAdlz,OTH,RT @henrywalton77: RT @AmznFavorites FREE six chapters of CHANGE OF ADDRESS #mystery. http://t.co/EnisEdUnip #kindle #ebook,

AMZ,Evo Cafe on #Yelp: Love this cafe after I do my workout at elliptifit! They have this Amazon acai bowl that's made o http://t.co/2ISR6ElnuW,OTH,RT @HikeOurPlanet: #Space #Cosmos Violet Spiral #Galaxy #Coffee #Gift Basket #Mugs #Coasters #Amazon http://t.co/w7U12mWYai http://t.co/Rfb<U+2026>,

AMZ,Friday with ice Americano #CafeAmazon (@ Cafe Amazon ,OTH,"RT @HistFicteBooks: 4.5 out of 5 stars by 396 reviewers for ""Forsaken Dreams"" by MaryLu Tyndall http://t.co/WmLrYXp0r1 #kindle http://t.co/",

AMZ,green tea time ❤?? @ #cafeAmazon pic.twitter.com/28jzc4ojOy,OTH,"RT @lelaniblack: No shirt, no shoes, no Kindle, no problem~in paperback, too #romance on a #coffee farm #Maui http://t.co/d4864ONRI2 http:/<U+2026>",

AMZ,Hello Sunday ????#HappyTime #CafeAmazon #ThaiTeaFrappe #RainbowCrepeCake #pixlr #Samsung #Grand2… ,OTH,RT @markbarnes19: Number 1 in #education leadership today. http://t.co/4eBBrJamZO #edchat http://t.co/27piXTyipa,

AMZ,Hi i'm here (@ Cafe' Amazon PTT Lamchee 226 Rd.) ,OTH,RT @maxwestart: More fun with Rusty &amp; Sam in Sunnyville Vol. 2 - GET IT!! http://t.co/ZDg5MmQ03z #comics,

AMZ,Hi i'm here (@ Cafe' Amazon PTT Lamchee 226 Rd.) https://t.co/cKB7nSRQ1L,OTH,RT @mckbirdbks: #LoveStory Emerald Wells Caf &amp; Pear Blossom Lane Together for the first time http://t.co/0T3MYyqVkb    http://t.co/r8m9swK,

AMZ,Hot Cocoa in the morning ☀️ #PattyEnjoyEating#CafeAmazon#HotCocoa @ Are you ready for SAT ❓ ,OTH,RT @myteripolo_: http://t.co/eQqUAjxgnC http://t.co/YHql7hqjlA  GO BUY MY BOOK ON THE KINDLE STORE FOR 2.99 / OTHER PRICES IN OTHER COUNTR,

AMZ,I just bought: 'CAFE PARADISE: Suzy's last chance at fulfilling a lifelong dream' by Carol... via @amazonkindle http://t.co/qQDA2hGwIt,OTH,RT @PandoraSpocksWP: Treat yourself to a little kink! Luke &amp; Bella:Two Streets Over http://t.co/RFW7EXsAJU #ASMSG #romance #erotica http://,

AMZ,Ice Americano : Cafe Amazon by PTT #CafeAmazon #PTT #Thailand @ Cafe Amazon Nongprachak ,OTH,RT @qikipedia: The Romans split France into Trousered Gaul in the south and Hairy Gaul in the north. (Via: http://t.co/nVGXu0dnhW),

AMZ,I'm at Amazon Cafe  @TAWADA Pakchong https://t.co/KNENhaBjFW,OTH,RT @reesspace: Get 35% Off Gravydeals Samsung Galaxy S6 Ultra Thin Case USE DISCOUNT CODE JXEOQTOC http://t.co/tTaaR8ghjY #discount #deal #,

AMZ,I'm at Amazon Cafe' Coffee Adventure ,OTH,RT @Tammysdragonfly: Nervous Bride Wrong Groom Telepathic Rescue Dog @RaineEnglish #MagicalWeddings #TW4RW #ASMSG http://t.co/yDeAYxSAba ht,

AMZ,I'm at Amazon Cafe' Coffee Adventure https://t.co/0OgnZFbJa7,OTH,Slow motion video   FAIR TRADE BIO COFFEE  <U+27A1>  http://t.co/e5RpIg5vdk  My last Latte Art video <U+27A1><U+FE0F>... http://t.co/V3ReNBfS2D,

AMZ,I'm at Amazon Cafe' PTT  https://t.co/qZORivtrot,OTH,Solar plane prepares for Amazon mission http://t.co/dRlu8TxXWg,

AMZ,"I'm at Caf Amazon ( ) in Khlong Luang, Pathum Thani https://t.co/XTJqgkSqt9",OTH,"Starts out slow, then grows on you. No not like mold.RETWEET Emerald Wells Caf  http://t.co/0T3MYyIwbJ #mckbirdbks",

AMZ,"I'm at Caf Amazon ( ) in Mueang Pathum Thani, Pathum Thani https://t.co/kHDSMaWycI",OTH,"""Emerald Wells Cafe"" - an engrossing read by Mike Friedman @mckbirdbks on Amazon! ",

AMZ,"I'm at Caf Amazon ( ) in Mueang Phatthalung, Phatthalung https://t.co/EqgSZWiYOl",OTH,#Amazon #Coffee Store<U+00A9><U+2615>http://t.co/uGL7TiG1iy<U+2615>#coffee #Coffeemaker #grinder<U+2615> http://t.co/d8iTAU6w8e,

AMZ,"I'm at Caf Amazon ( ) in Mueang Surat Thani, Surat Thani https://t.co/xvOmCHctzM",OTH,#Amazon #Coffee Store<U+00A9><U+2615>http://t.co/uGL7TiG1iy<U+2615>#coffee #Coffeemaker #grinder<U+2615> http://t.co/vs60Ne08jk,

AMZ,"I'm at Caf Amazon ( ) in Rayong, Thailand https://t.co/TVEr3vpTr9",OTH,#Amazon #Coffee Store<U+00A9>http://t.co/uGL7TiG1iy<U+2615>Everything you need to make a great cup #coffee #Coffeemaker #grinder<U+2615> http://t.co/eotG2G0edb,

AMZ,I'm at Caf Amazon | PTT Fah Thai https://t.co/m8Rm5MLTeN,OTH,"#APITConnect - Leo Coffee, Tea &amp; Coffee Maker 50% off + Free Shipping from Rs. 85 @ Amazon http://t.co/3qnhi9NkP4",

AMZ,I'm at Caf Amazon https://t.co/0LSnDGSm5d,OTH,#Discover  Emerald Wells Caf &amp; Pear Blossom Lane  Together for the first time  http://t.co/0T3MYyIwbJ   http://t.co/r8m9swKNJs,

AMZ,I'm at Caf Amazon https://t.co/imPmZ1TI9W,OTH,#HarryPotter and the art of spying.  How cool is that? http://t.co/VBziRst7l7 #book,

AMZ,"I'm at Cafe' Amazon ( ) in Din Daeng, Bangkok https://t.co/93We3ZzbbQ",OTH,#quote Forget the Everything StoreAmazons An Everything Business http://t.co/7re1MJUmf1,

AMZ,"I'm at Cafe' Amazon ( ) in Prawet, Bangkok https://t.co/BJ8Hq7vQkS",OTH,#WIN a $25 Amazon gift card thanks to Crave by @bjharveyauthor http://t.co/StZvOoe01M http://t.co/vmEwZWZNNG,

AMZ,"I'm at Cafe Amazon ( ) in Udon Thani, Changwat Udon Thani https://t.co/cZPU4ZX3QF",OTH,35% off! Aerobie AeroPress Coffee Maker http://t.co/FWHG9m7D6E http://t.co/geZXE4CePm,

AMZ,"I'm at Cafe Amazon ( ) in Udon Thani, Changwat Udon Thani https://t.co/Lsen22DlDo",OTH,Aerobie Aeropress Coffee Maker With Tote and Able Standard Filter Disk http://t.co/aUaQyJTa5U http://t.co/3gqKn6mut0,

AMZ,"I'm at Café Amazon (คาเฟ่ อเมซอน) in Mueang Pathum Thani, Pathum Thani swarma",OTH,"Amazon is hiring! #Senior #Manager, Performance Display Advertising Product Management in #Seattle, apply now! #jobs http://t.co/fq5BmSwaTL",

AMZ,I'm at Cafe Amazon @ PTT Tha Kratoam https://t.co/o5ldLBovnW,OTH,Blue Moon Cafe Series: Where Shifters Meet for Drinks http://t.co/vwtkuu0RTO  #shapeshifters #paranormal #kindle #99cents,

AMZ,I'm at Cafe Amazon https://t.co/cJI5nT0llJ,OTH,Carter\'s Little Tiger Halloween Costume-18 Months http://t.co/MAovOGlQQX http://t.co/UVjdJtNlxJ,

AMZ,I'm at Cafe' Amazon https://t.co/CP3vOihmAd,OTH,"Don't miss 25% special discount!  Mr. Coffee BVMC-SJX33GT 12-Cup Programmable Coffeemaker,... http://t.co/wljIO9NCRY http://t.co/bNc4tHrwrm",

AMZ,I'm at Cafe Amazon https://t.co/PSvF2U6RIs,OTH,Down Home please #RT Emerald Wells Caf  http://t.co/0T3MYyIwbJ #mckbirdbks,

AMZ,I'm at Cafe Amazon https://t.co/uB8vj6SVw9,,,

AMZ,I'm at Cafe Amazon in Bangkok https://t.co/ZqmOXYLKpy,,,

AMZ,"I'm at Cafe Amazon in Chum Porn, Thailand https://t.co/QBSuk4brGM",,,

AMZ,"I'm at Cafe' Amazon PTT Ubon Ratchathani University in Warin Chamrap, Changwat Ubon Ratchathani https://t.co/MQiFyhfuqt",,,

AMZ,I'm at Café Amazon swarmapp.com/c/fEXWYWfX,,,

AMZ,Innovative @CafeAmazon 'Drive Awake' campaign thinking #mobilefirst and saving lives at the same time! #DMLDN ,,,

AMZ,Let's have some #coffee.@ #CaféAmazon #PTT #Tak #Thailand ,,,

AMZ,Morning #milktea after lab visit...only for 40bahts… #cafeamazon @ Amazon Café ,,,

AMZ,Only iPhone owners get an eye opening cup of coffee #CafeAmazon #BODGM,,,

AMZ,Relax #CafeAmazon ,,,

AMZ,Road Trip fuel #8milesfromhome #roadtrip #cafeamazon #thailand #theadventurecontinues ,,,

AMZ,The amazon water #CafeAmazon #PTT #Thailand flic.kr/p/szDc41,,,

AMZ,Tropical setting at #CafeAmazon #Thailand #icedcappuccino ,,,

AMZ,Waiting.......?❤️? #amazon #cafeamazon  #รอเธอ @ Cafe' Amazon Central Festival Chiangmai instagram.com/p/4L-OiFSrGp/,,,

AMZ,"what do you mean? @ Cafe' Amazon, PTT Banpong https://t.co/QpxCpOIK35",,,

AMZ,White Choc Macchi..for lunch. Q(^_^Q) #toonarmies #WhiteChocMacchiato #CafeAmazon ,,,

AMZ,Why I feel cool ? ??? #LAQXFLUK #addidas #htcdesire816 #GalaxyNote3 #CafeAmazon ,,,

AMZ,ในที่สุด.... ???  #ฟิน #GreenTeawithMilk #CafeAmazon @ Cafe' Amazon Ptt Minburi ,,,

เนื่องจากไฟล์นี้เป็นไฟล์ CSV เราสามารถใช้ไลบรารี่ของไพธอน csv เพื่อดึงข้อมูลข้างในได้ โดยค่าในแต่ละคอลัมภ์เป็นดังนี้

  • คอลัมภ์ที่ 1 เป็นคลาสที่เรากำหนดขึ้น AMZ
  • คอลัมภ์ที่ 2 เป็นทวีตที่เรากำหนดให้เป็นประเภท AMZ
  • คอลัมภ์ที่ 3 เป็นคลาสที่เรากำหนดขึ้น OTH
  • คอลัมภ์ที่ 4 เป็นทวีตที่เรากำหนดให้เป็นประเภท OTH

เราสามารถเขียนอ่านไฟล์ CSV แล้วเก็บทวีตแยกเป็นแต่ละประเภทได้ดังนี้

In [2]:
import csv

labels = {
    'AMZ': [],
    'OTH': []
}

with open('tweet_data.csv', 'rb') as csv_file:
    reader = csv.reader(csv_file)
    for each in reader:
        if each[1]:
            labels['AMZ'].append(each[1])
        if each[3]:
            labels['OTH'].append(each[3])

หน้าตาข้อมูลที่เราดึงมาแต่ละประเภทจะเป็นแบบนี้ (ดู 3 ทวีตแรก)

In [3]:
for index, each in enumerate(labels['AMZ']):
    print index, each
    if index == 2:
        break
0  @ Amazon Cafe @Sermthai Complex http://t.co/7WwAbgbt6w
1  @ Amazon Cafe https://t.co/BGWpW3Q2LC
2 #CafeAmazon #BlendedBeverage #GreenTea @ Cafe' Amazon Victoria Garden เพชรเกษม69 
In [4]:
for index, each in enumerate(labels['OTH']):
    print index, each
    if index == 2:
        break
0 Forget the Everything StoreAmazons An Everything Business - Amazon is known as the "everything store." But now m... http://t.co/vaKUR3hsT7
1 Forget the Everything StoreAmazons An Everything Business http://t.co/NuaNuU4okJ Interesting #LiderConectado
2 Forget the Everything StoreAmazons An Everything Business http://t.co/odS6jDsxLI #technology #tech

เราสามารถเก็บข้อมูลที่เราจัดรูปแบบไว้แล้วลงไฟล์ไว้เผื่อนำไปใช้ในโอกาสต่อไปได้ดังนี้

In [5]:
with open('processed_tweet_data.csv', 'wb') as csv_file:
    writer = csv.writer(csv_file)
    for each in labels['AMZ']:
        writer.writerow([each, 'AMZ'])
    for each in labels['OTH']:
        writer.writerow([each, 'OTH'])

เราก็จะได้ไฟล์ชื่อ process_tweet_data.csv เก็บไว้

เวลาเราจะนำมาประมวลผลขั้นต่อไป เราก็อ่านไฟล์ขึ้นมาแล้วเก็บลงตัวแปร

  • ตัวแปร text เก็บทวีต
  • ตัวแปร labels เก็บประเภทของทวีตนั้นๆ
In [6]:
with open('processed_tweet_data.csv', 'rb') as csv_file:
    reader = csv.reader(csv_file)
    text = []
    labels = []
    for each in reader:
        text.append(each[0])
        labels.append(each[1])

มาถึงจุดนี้ เราสามารถเก็บข้อมูลให้อยู่ในรูปแบบของ Data Frame ได้ ซึ่ง Data Frame จะมีฟังก์ชั่นการทำงานเสริมต่างๆ ทำให้เราวิเคราะห์ข้อมูลได้สะดวกขึ้น

In [7]:
from pandas import DataFrame

data = DataFrame({'text': text, 'label': labels})

เช่น เราสามารถดูข้อมูล 5 แถวแรกได้

In [8]:
print data.head()
  label                                               text
0   AMZ   @ Amazon Cafe @Sermthai Complex http://t.co/7...
1   AMZ              @ Amazon Cafe https://t.co/BGWpW3Q2LC
2   AMZ  #CafeAmazon #BlendedBeverage #GreenTea @ Cafe'...
3   AMZ                          #cafeamazon @ on the way 
4   AMZ  #sister #slowlife #cafeamazon @ Cafe Amazon @ ...

หรือดูข้อมูล 5 แถวสุดท้ายก็ได้เช่นกัน

In [9]:
print data.tail()
    label                                               text
113   OTH  Amazon is hiring! #Senior #Manager, Performanc...
114   OTH  Blue Moon Cafe Series: Where Shifters Meet for...
115   OTH  Carter\'s Little Tiger Halloween Costume-18 Mo...
116   OTH  Don't miss 25% special discount!  Mr. Coffee B...
117   OTH  Down Home please #RT Emerald Wells Caf  http:/...

จากที่เราจะลองสร้างโมเดล Naive Bayes สำหรับทำ Text Classification นั้น เราจำเป็นต้องนับจำนวนคำในข้อมูลของเรา ในที่นี้เราสามารถใช้ตัวช่วยที่มีชื่อว่า CountVEctorizer ที่อยู่ในไลบรารี่ sklearn ได้ ตัวช่วยนี้สามารถช่วยเรานำจำนวนคำในข้อมูลของเราได้อย่างง่ายๆ

In [10]:
from sklearn.feature_extraction.text import CountVectorizer

count_vectorizer = CountVectorizer()
counts = count_vectorizer.fit_transform(data['text'].values)

เราสามารถนำตัวแปร counts นี้ไปใช้สร้างโมเดล Naive Bayes ต่อได้เลย สะดวกมาก

เราสามารถดูจำนวนคำที่เราดึงออกมาได้จากข้อมูลว่ามีกี่คำตามนี้

In [11]:
print len(count_vectorizer.get_feature_names())
645

หรือถ้าเราอยากดูว่าเรามีคำอะไรบ้าง สามารถดูได้ตามนี้

In [12]:
for index, each in enumerate(count_vectorizer.get_feature_names()):
    print index, each
0 00a9
1 0lsndgsm5d
2 0ognzfbja7
3 0t3myyiwbj
4 0t3myyqvkb
5 12
6 18
7 1ch0twqgct
8 1t4ksv0a4a
9 20
10 2026
11 226
12 25
13 2615
14 27a1
15 27pixtyipa
16 28jzc4ojoy
17 2isr6elnuw
18 35
19 396
20 3gqkn6mut0
21 3qnhi9nkp4
22 40
23 40bahts
24 4ebbrjamzo
25 4kkv0j4xpj
26 4l
27 50
28 7re1mjumf1
29 7wwabgbt6w
30 85
31 8milesfromhome
32 8xavojjnz5
33 93we3zzbbq
34 99
35 99cents
36 able
37 acai
38 addidas
39 address
40 adventure
41 advertising
42 aerobie
43 aeropress
44 after
45 afternoon
46 alone
47 amazon
48 amazonkindle
49 americano
50 amp
51 amreadi
52 amz0ne
53 amznfavorites
54 an
55 and
56 apitconnect
57 app
58 apply
59 arabic
60 are
61 art
62 as
63 askdaball
64 asmsg
65 at
66 au
67 auaqyjta5u
68 authorjude_o
69 awake
70 awesome
71 b8pg21jdy5
72 bangkok
73 banpong
74 basket
75 beach
76 before
77 bella
78 between
79 bgwpw3q2lc
80 bio
81 bj8hq7vqks
82 bjharveyauthor
83 black
84 blendedbeverage
85 blossom
86 blue
87 bluetooth
88 blunted215
89 bnc4thrwrm
90 bnh8bzadlz
91 bodgm
92 book
93 bought
94 bowl
95 br1pl34dgf
96 bride
97 business
98 but
99 buy
100 bvmc
101 by
102 caf
103 cafe
104 cafeamazon
105 café
106 caféamazon
107 calumeteditions
108 campaign
109 can
110 card
111 carmen
112 carmen_books
113 carol
114 carter
115 case
116 central
117 chamrap
118 chance
119 change
120 changwat
121 chapters
122 check
123 chiangmai
124 chill
125 choc
126 chocolate
127 chum
128 cji5nt0llj
129 ckb7nsrq1l
130 clock
131 co
132 coasters
133 cocoa
134 code
135 cofee
136 coffe
137 coffee
138 coffeemaker
139 coffeofday
140 coffeshop
141 com
142 comes
143 comics
144 complex
145 cool
146 cosmos
147 costume
148 countr
149 countries
150 country
151 cp3voihmad
152 crave
153 cromer
154 cup
155 czpu4zx3qf
156 d4864onri2
157 d8itau6w8e
158 daeng
159 daughter
160 day
161 days
162 deal
163 deliciously
164 dialogue
165 digupwr0xb
166 din
167 discount
168 discover
169 discussion
170 disk
171 display
172 dmldn
173 do
174 dog
175 don
176 down
177 draculas
178 dream
179 dreams
180 drinks
181 drive
182 drlu8txxwg
183 e5rpig5vdk
184 earning
185 ebook
186 edchat
187 education
188 elliptifit
189 emerald
190 end
191 english
192 engrossing
193 enisedunip
194 eotg2g0edb
195 eqgszwiyol
196 eqquajxgnc
197 erin
198 erotica
199 everything
200 evo
201 exercise
202 eye
203 fah
204 fair
205 farm
206 fb
207 fe0f
208 feel
209 festival
210 fexwywfx
211 filter
212 first
213 flic
214 for
215 forget
216 forsaken
217 fq5bmswatl
218 france
219 free
220 french
221 fresh
222 friday
223 friedman
224 friends
225 from
226 fuel
227 fulfilling
228 fun
229 future
230 fwhg9m7d6e
231 fynxvlr7he
232 galaxy
233 galaxynote3
234 game
235 garden
236 gary_lindberg
237 gaul
238 get
239 gezxe4cepm
240 ghosts
241 gift
242 go
243 good
244 grand2
245 gravydeals
246 great
247 green
248 greentea
249 greenteawithmilk
250 grinder
251 groom
252 grows
253 guide
254 gym
255 hairy
256 halloween
257 happy
258 happytime
259 harrypotter
260 hatter
261 have
262 headphones
263 headsets
264 hello
265 henrywalton77
266 here
267 hi
268 hikeourplanet
269 hiring
270 histfictebooks
271 home
272 hot
273 hotcocoa
274 how
275 ht
276 htcdesire816
277 http
278 https
279 ice
280 icedcappuccino
281 ihuxgiz3p5
282 impmz1ti9w
283 in
284 innovative
285 instagram
286 interesting
287 into
288 iphone
289 is
290 israelis
291 it
292 jobs
293 judeouvrard
294 just
295 jxeoqtoc
296 khdsmawyci
297 khlong
298 kindle
299 kink
300 knenhabjfw
301 known
302 kpixytxdt4
303 kr
304 kratoam
305 ksu1axjnlr
306 kvpops
307 lab
308 lamchee
309 lane
310 laqxfluk
311 last
312 latte
313 leadership
314 learned
315 lelaniblack
316 leo
317 leonard
318 let
319 liderconectado
320 lifelong
321 like
322 little
323 lives
324 looking
325 love
326 lovestory
327 lsen22dldo
328 luang
329 luke
330 lunch
331 luxessentials
332 lzut9xwsiq
333 m8rm5mlten
334 macchi
335 mad
336 made
337 magel
338 magicalweddings
339 make
340 maker
341 makes
342 mall
343 management
344 manager
345 maovoglqqx
346 markbarnes19
347 marylu
348 maui
349 maxwestart
350 mckbirdbks
351 mean
352 meet
353 mello
354 mi
355 mike
356 milktea
357 minburi
358 mini
359 miss
360 mission
361 mobilefirst
362 mold
363 months
364 moon
365 more
366 morning
367 motion
368 mpoints
369 mqifyhfuqt
370 mr
371 mueang
372 mugs
373 murder
374 my
375 mystery
376 myteripolo_
377 need
378 nervous
379 new
380 no
381 nongprachak
382 north
383 not
384 novella
385 now
386 ntplntqsxg
387 nuanuu4okj
388 number
389 nvgxu0dnhw
390 o5ldlbovnw
391 obglgemdso
392 ods6jdsxli
393 of
394 off
395 oifsrgp
396 on
397 only
398 opening
399 order
400 other
401 out
402 outrageous
403 over
404 own
405 owners
406 pakchong
407 palestinians
408 pandoraspockswp
409 paperback
410 paradise
411 paranormal
412 park
413 pathum
414 pattyenjoyeating
415 pear
416 performance
417 phatthalung
418 pic
419 pixlr
420 plan
421 plane
422 please
423 pocketmath
424 porn
425 prawet
426 prepares
427 press
428 prices
429 prime
430 problem
431 product
432 programmable
433 psvf2u6ris
434 ptt
435 pydf0ct1rf
436 qbsuk4brgm
437 qcy
438 qikipedia
439 qpxcpoik35
440 qqda2hgwit
441 quote
442 qx5mvwetoe
443 qy8
444 qzorivtrot
445 r8m9swk
446 r8m9swknjs
447 rainbowcrepecake
448 raineenglish
449 ratchathani
450 rayong
451 rd
452 read
453 readers
454 reads
455 ready
456 reesspace
457 relax
458 rescue
459 retweet
460 reviewers
461 rfb
462 rfw7exsaju
463 road
464 roadtrip
465 romance
466 romans
467 rough
468 rs
469 rt
470 rungsit
471 running
472 rusty
473 s6
474 sam
475 same
476 samsung
477 sat
478 save
479 saving
480 seattle
481 seireethai
482 senior
483 series
484 sermthai
485 setting
486 sex
487 shapeshifters
488 shifters
489 shipping
490 shirt
491 shoes
492 sister
493 six
494 sjx33gt
495 slow
496 slowlife
497 sm
498 snss5xtyxd
499 so
500 solar
501 some
502 south
503 space
504 special
505 spend
506 spiral
507 split
508 sports
509 spying
510 standard
511 stars
512 starts
513 stefanescu
514 stereo
515 store
516 storeamazons
517 streets
518 stzvooe01m
519 sukhaphibarn3
520 sun
521 sunday
522 sunnyville
523 surat
524 suzy
525 swarma
526 swarmapp
527 sweatproof
528 szdc41
529 tak
530 takes
531 tammysdragonfly
532 taste
533 tawada
534 tea
535 tech
536 technology
537 telepathic
538 terry
539 terrytyler4
540 tha
541 thai
542 thailand
543 thaiteafrappe
544 thani
545 thanks
546 that
547 the
548 theadventurecontinues
549 thehundreds
550 thehundredsishuge
551 then
552 they
553 thin
554 thinking
555 this
556 thriller
557 tiger
558 time
559 to
560 today
561 together
562 too
563 toonarmies
564 tote
565 tracksair
566 trade
567 treat
568 trip
569 tropical
570 trousered
571 ttaar8ghjy
572 tver3vptr9
573 tw4rw
574 twitter
575 two
576 tyndall
577 ub8vj6svw9
578 ubon
579 udon
580 ugl7tig1iy
581 ultra
582 under
583 university
584 usage
585 use
586 uvjdjtnlxj
587 v3renbfs2d
588 v5wjv8lmgj
589 vacations
590 vakur3hst7
591 valentine
592 valentinesday
593 vbzirst7l7
594 via
595 victoria
596 video
597 violet
598 visit
599 vmewzwznng
600 vol
601 vs60ne08jk
602 vsco
603 vscocam
604 vscocamthailand
605 vwtkuu0rto
606 w7u12mwyai
607 waiting
608 warin
609 was
610 water
611 way
612 wells
613 what
614 where
615 which
616 while
617 white
618 whitechocmacchiato
619 why
620 wildchildbooks
621 win
622 wireless
623 with
624 wljio9ncry
625 wmlryxp0r1
626 workout
627 wrong
628 xtjqgksqt9
629 xvomchctzm
630 ydeayxsaba
631 yelp
632 yhql7hqjla
633 you
634 yourself
635 yzgo0rgda8
636 z2i1rsdmbk
637 zdg5mmq03z
638 zqmoxylkpy
639 zzzz
640 คาเฟ
641 รอเธอ
642 อเมซอน
643 เพชรเกษม69
644 ในท

ทีนี้เรามาดูก่อนว่าตัวแปรนี้หน้าตาเป็นอย่างไร และเก็บค่าอย่างไรบ้าง

In [13]:
print counts.shape
(118, 645)

ค่าด้านบนแสดงให้เห็นว่าเรามีจำนวนทวีต 118 ทวีต และมีจำนวนคำ 645 คำ

เราสามารถดูได้ว่าหน้าตาของ feature vector หลังจากที่เรา transform ทวีตของเราแล้ว หน้าตาเป็นอย่างไร ดูได้ตามนี้

In [14]:
print counts.toarray()
[[0 0 0 ..., 0 0 0]
 [0 0 0 ..., 0 0 0]
 [0 0 0 ..., 0 1 0]
 ..., 
 [0 0 0 ..., 0 0 0]
 [0 0 0 ..., 0 0 0]
 [0 0 0 ..., 0 0 0]]

เราอาจจะตรวจสอบว่าเรามีคำว่า cafe อยู่กี่คำ

In [15]:
print count_vectorizer.vocabulary_.get('cafe')
103

ขั้นตอนต่อไปเราจะเริ่มสร้างโมเดล Naive Bayes ขึ้นมา โดยจะใช้ Naive Bayes แบบ Multinomial ซึ่งเหมาะสำหรับการทำ Text Classification

In [16]:
from sklearn.naive_bayes import MultinomialNB

classifier = MultinomialNB()

แล้วเราก็เก็บข้อมูลประเภทเอาไว้ในตัวแปรชื่อ targets

In [17]:
targets = data['label'].values

จากนั้นเราก็สั่งคำสั่ง fit ซึ่งจะเป็นการทำให้โมเดลของเราเรียนรู้จากข้อมูลที่ส่งเข้าไป

In [18]:
classifier.fit(counts, targets)
Out[18]:
MultinomialNB(alpha=1.0, class_prior=None, fit_prior=True)

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

ในที่นี้เราจะลองจำแนกประเภทของ 3 ทวีตดังนี้

In [19]:
examples = [
    'Free cafe call today!',
    "I'm going to attend the Linux users group tomorrow.",
    'I love cafe cloud'
]

ก่อนที่เราจะส่งข้อมูลเราเข้าโมเดลเพื่อไปทำนายผล เราจำเป็นต้อง transform ตัวทวีตของเราให้อยู่ในรูปแบบของ feature vector ก่อน

In [20]:
example_counts = count_vectorizer.transform(examples)

print example_counts
  (0, 103)	1
  (0, 219)	1
  (0, 560)	1
  (1, 547)	1
  (1, 559)	1
  (2, 103)	1
  (2, 325)	1

เสร็จแล้วเราจึงเราเข้าโมเดลเพื่อไปทำนายผล

In [21]:
predictions = classifier.predict(example_counts)

print predictions
['AMZ' 'OTH' 'AMZ']

ผลลัพธ์ที่ได้คือ

  • ทวีตที่ 1 จำแนกได้อยู่ประเภท AMZ
  • ทวีตที่ 2 จำแนกได้อยู่ประเภท OTH
  • ทวีตที่ 3 จำแนกได้อยู่ประเภท AMZ

หมายเหตุ: ไฟล์โน้ตบุคนี้สร้างขึ้นเพื่อสำหรับการเรียนรู้การสร้างโมเดล Naive Bayes กับภาษา Python และเรียนรู้ส่วนหนึ่งของ Machine Learning เท่านั้น ไม่ได้มีจุดประสงค์เพื่อให้นำไปใช้ในงานบน Production จริงๆ ไฟล์นี้จะไม่กล่าวถึงส่วนสำคัญบางส่วนเช่น Data Munging หรือ Evaluation

Leave Comment

Your email address will not be published. Required fields are marked *