電腦不只會幫你選⼟土⾖豆
還會幫你選新聞
Andy (andy@dorm7.com)
1
About Me
• Andy (andy@dorm7.com)
• Taipei.py、PyCon TW、PyCon APAC ⼯工作⼈人員
• Backend Developer @ Dorm7 Software
• 平常都在寫 Python、Django
2
今天會講些什麼?
3
我們會⽤用 Python 當中的套件來做新
聞的抓取以及簡單的
Machine Learning
來完成⼀一個電腦幫你篩選新聞的系統
4
重點當然是
Machine Learning
5
重點當然是
Machine Learning
Python
6
先讓我們從問
問題開始
7
If I had an hour to solve a
problem I'd spend 55 minutes
thinking about the problem and 5
minutes thinking about solutions.
!
— Albert Einstein
8
問題:我想要知道怎麼
樣的新聞會得到⽐比較多
的 Facebook Like
9
讓我們開始吧!
10
11
GARBAGE IN
GARBAGE OUT
12
讓我們來抓新聞吧!
13
打開瀏覽器
14
15
15
16
16
Python Time
17
打開瀏覽器
• requests - 模擬瀏覽器發查詢
• selenium - 真正操控瀏覽器
18
Requests: HTTP for Humans
import requests!
!
def get_content(url):!
response = requests.get(url)!
return response.content!
19
Selenium - Web Browser
Automation
20
from selenium import webdriver!
!
browser = webdriver.Firefox()!
browser.get('http://www.google.com')!
Beautiful Soup: Navigating,
searching your html
from bs4 import BeautifulSoup!
!
soup = BeautifulSoup(html_content)!
soup.title!
soup.findAll('a')!
soup.find('div', {'id': 'summary'})!
21
22
22
22
readability - Pulls out main
body
from readability.readability
import Document!
!
doc = Document(content)!
print doc.summary()!
23
或是有些更帥的服務
24
https://www.kimonolabs.com/
!
https://import.io/
25
PyMongo
from pymongo import MongoClient!
!
client = MongoClient()!
db = client['news_database']!
news = db.news!
news.insert(data)!
news.find_one({'url': a['href']})!
26
從 ETtoday 抓這些資料
• 標題
• ⽇日期
• 內⽂文
• 有幾張圖
• URL
• 類別
• Facebook likes 數量
27
所以要開始 Machine
Learning 了對吧?
28
所以要開始 Machine
Learning 了對吧?
29
整理資料
30
⼀一些數據
• 4/20~7/15 ETtoday 的新聞
• 總共 28615 篇
• 6441 篇的 Facebook Like > 1000
(22.5%)
31
先來看看你的直覺
32
政治
財經
國際
⼤大陸
社會
地⽅方
新奇
⽣生活
寵物動物
影劇
體育
消費
3C
健康
男⼥女
33
最不受歡迎的類別
34
最不受歡迎的類別
• 財經 (3.11%)
34
最不受歡迎的類別
• 財經 (3.11%)
• 消費 (2.57%)
34
最不受歡迎的類別
• 財經 (3.11%)
• 消費 (2.57%)
• 健康 (1.06%)
34
台灣⼈人沒錢、沒辦法消
費、也不重視健康
35
最受歡迎的類別
36
最受歡迎的類別
• ⽣生活 (38.08%)
36
最受歡迎的類別
• ⽣生活 (38.08%)
• 新奇 (47.74%)
36
最受歡迎的類別
• ⽣生活 (38.08%)
• 新奇 (47.74%)
•寵物動物 (89.24%)
36
37
所以要開始 Machine
Learning 了對吧?
38
Machine Learning 第⼀一步:
把你的資料轉成電腦看得懂的
東⻄西
39
屏東科技⼤大學裴家騏⽼老師團隊
在苗栗的研究顯⽰示,近幾年來,
無論地⽅方政府或私⼈人的開發,
都使得⽯石⻁虎的棲地不斷地減少
和破碎化。
電腦看不懂這個...
40
[1, 0, 1, 0, 1…, 0, 1]
電腦看得懂這個...
41
中間缺了什麼?
42
屏東/ 科技/ ⼤大學/ 裴家騏/ ⽼老師/ 團隊
/ 在/ 苗栗/ 的/ 研究/ 顯⽰示/ ,/ 近幾年
/ 來/ ,/ 無論/ 地⽅方/ 政府/ 或/ 私⼈人/
的/ 開發/ ,/ 都/ 使得/ ⽯石⻁虎/ 的/ 棲地
/ 不斷/ 地/ 減少/ 和/ 破碎/ 化/ 。/
斷詞
43
import jieba!
segs = jieba.cut(!
u”屏東科技⼤大學裴家騏⽼老師團隊在苗栗的研究顯⽰示"!
)!
print '/'.join(segs)!
jieba - 斷詞
屏東/ 科技/ ⼤大學/ 裴家騏/ ⽼老師/ 團隊/
在/ 苗栗/ 的/ 研究/ 顯⽰示/
44
import jieba.analyse!
!
content = """..."""!
tags = jieba.analyse.extract_tags(!
! content, topK=10!
)
jieba - 找關鍵詞
45
import jieba!
!
jieba.load_userdict(!
“userdict.txt"!
)!
jieba - 加⾃自定詞庫
46
"结巴"中⽂文分词:做最好
的Python中⽂文分词组件
47
所以要開始 Machine
Learning 了對吧?
48
49
scikit-learn 可以做啥?
50
Classification
這篇新聞會超過 1000 個 !
Likes 嗎?
51
Regression
這篇新聞會有幾個 Likes?
52
Clustering
給⼀一堆新聞,能不能幫我找
出哪些新聞⽐比較像?
53
Machine Learning is Simple
54
from sklearn import svm!
X, y = get_training_set()!
clf = svm.SVC()!
clf.fit(X, y)!
clf.predict(unknown)!
55
最後成果
• 細節不多說,總之就是 call API 跟調參數
• ⽤用 SVM 做 Classification
• 使⽤用的特徵: 標題、內⽂文、類別、有幾張圖、星期
幾
56
今天沒提到但是可能有⽤用的
Packages
• Scrapy - 抓網⾴頁
• NLTK - ⾃自然語⾔言處理
• Pandas - Python Data Analysis Library
• Orange - Open source data visualization and
analysis
• Matplotlib - 畫圖
57
結論
58
結論
• 沒有什麼神奇的⽅方法可以幫你搞定資料科學!請
不要抗拒把⼿手弄髒
58
結論
• 沒有什麼神奇的⽅方法可以幫你搞定資料科學!請
不要抗拒把⼿手弄髒
• 想玩玩資料嗎?⽤用 Python 吧!
58
結論
• 沒有什麼神奇的⽅方法可以幫你搞定資料科學!請
不要抗拒把⼿手弄髒
• 想玩玩資料嗎?⽤用 Python 吧!
• 不⼀一定要靠 Machine Learning,資料整理得好就
有價值
58
⼯工商服務
59
⼯工商服務
• Taipei.py
• http://www.meetup.com/Taipei-py/
59
⼯工商服務
• Taipei.py
• http://www.meetup.com/Taipei-py/
• Django Girls Taiwan 籌備中
• http://bit.ly/djangogirls
59
Q&A
60

電腦不只會幫你選土豆,還會幫你選新聞