Download - 電腦不只會幫你選土豆,還會幫你選新聞
About Me
• Andy ([email protected])
• 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
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