Skip to content

Instantly share code, notes, and snippets.

@kentatogashi
Last active June 15, 2018 09:54
Show Gist options
  • Save kentatogashi/127e7e50ca2c08a8ec13a6ae6299d1f8 to your computer and use it in GitHub Desktop.
Save kentatogashi/127e7e50ca2c08a8ec13a6ae6299d1f8 to your computer and use it in GitHub Desktop.
K-Meansを使いreutersの記事を分類
#!/root/miniconda3/bin/python
# -*- coding: utf-8 -*-
import os
import time
import requests
import re
import pandas as pd
import numpy as np
from os.path import abspath, dirname, isfile
from datetime import datetime, timedelta
from bs4 import BeautifulSoup
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.cluster import KMeans
from sklearn.cluster import MiniBatchKMeans
URL_TEMPLATE = 'https://www.reuters.com/resources/archive/jp/%s.html'
DATA_DIR = abspath(dirname(__file__)) + '/data'
DATA = DATA_DIR + '/data.txt'
def dtr(s, e):
for i in range((e - s).days):
yield s + timedelta(i)
def fetch_archive(day):
url = URL_TEMPLATE % day
filepath = DATA_DIR + '/' + day + '.txt'
if isfile(filepath):
print('Already exists %s ...' % url)
return
print("Fetching %s..." % url)
response = requests.get(url)
response.encoding = response.apparent_encoding
text = response.text
soup = BeautifulSoup(text, 'html.parser')
headers = soup.find('div', attrs={'class': 'module'}).find_all('a')
fall = open(DATA, 'a')
with open(filepath, 'a') as f:
for header in headers:
line = header.getText() + '\n'
f.write(line)
fall.write(line)
fall.close()
time.sleep(3)
def make_datasets():
s = datetime.strptime('20180601', '%Y%m%d')
e = datetime.strptime('20180614', '%Y%m%d')
os.makedirs(DATA_DIR, exist_ok=True)
for i in dtr(s, e):
fetch_archive(datetime.strftime(i, '%Y%m%d'))
def load_datasets():
return [i.rstrip('\n') for i in open(DATA).readlines()]
def preprocess(datasets, stop_words):
train = [re.sub(r'[0-9]', '0', i) for i in datasets]
tf_vect = TfidfVectorizer(stop_words = stop_words)
return tf_vect.fit_transform(train)
def classify(datasets, n_clusters = 100, stop_words = []):
#km = KMeans(n_clusters=n_clusters, max_iter = 1000)
km = MiniBatchKMeans(n_clusters=n_clusters, batch_size = 1000)
train = preprocess(datasets, stop_words)
km.fit(train)
return km.labels_
if __name__ == '__main__':
make_datasets()
datasets = load_datasets()
n_clusters = 100
stop_words = ['UPDATE', 'マーケットアイ', '焦点', '再送', 'アングル']
label = classify(datasets, n_clusters = n_clusters, stop_words = stop_words)
df = pd.DataFrame(datasets, columns=['header'])
for i in range(n_clusters):
print(df.iloc[label == i, [0]].head(10))
@kentatogashi
Copy link
Author

出力例

17          東南アジア株式・引け=大半が上伸、ホーチミンは2%超高
59          東南アジア株式・中盤=マレーシア、序盤下げるも値を戻す
269   東南アジア株式・引け=ジャカルタが1週間ぶり安値、マニラは3日続伸
362      東南アジア株式・中盤=マニラが3日続伸、ジャカルタは1%超安
561           東南アジア株式・引け=大半が下落、北朝鮮懸念が再燃
638         東南アジア株式・中盤=おおむね下落、マニラは1.7%安
860    東南アジア株式・引け=マニラ2%超下落、ジャカルタ序盤の値を消す
901       東南アジア株式・中盤=ジャカルタ、金融政策発表前に小幅上昇
1127  東南アジア株式・引け=マニラなど3市場が下落、米中貿易協議に警戒感
1223        東南アジア株式・中盤=おおむね下落、米中貿易協議を警戒
                                    header
425     “弱め”のガイダンスで悪材料出尽くしか、SMBC日興証券(花田浩菜)
696             インバウンド関連は好調、SMBC日興証券(花田浩菜)
985     実質GDPは4-6月期以降は持ち直しへ、SMBC日興証券(花田浩菜)
1274      企業の想定為替レートは保守的な水準、SMBC日興証券(花田浩菜)
1641  金利上昇と共存できるステージへの移行を期待、SMBC日興証券(花田浩菜)
1866            日経平均はじり高継続か、SMBC日興証券(花田浩菜)
2115            円安進み、風向き変わる、SMBC日興証券(花田浩菜)
2417        3つの移動平均線が揃って上昇へ、SMBC日興証券(花田浩菜)
2716        海外投資家は7週連続の買い越し、SMBC日興証券(花田浩菜)
3073          米経済指標から地合い回復へ、SMBC日興証券(花田浩菜)
                                    header
436            新規上場企業の横顔:メルカリ(6月19日マザーズ上場)
1250           新規上場企業の横顔:ログリー(6月20日マザーズ上場)
1252          新規上場企業の横顔:SIG(6月21日ジャスダック上場)
1556         新規上場企業の横顔:ライトアップ(6月22日マザーズ上場)
1557  新規上場企業の横顔:コーア商事ホールディングス(6月21日東証2部上場)
1558            新規上場企業の横顔:ZUU(6月21日マザーズ上場)
1884         新規上場企業の横顔:国際紙パルプ商事(6月26日東証上場)
2376           新規上場企業の横顔:エーアイ(6月27日マザーズ上場)
2377    新規上場企業の横顔:プロパティデータバンク(6月27日マザーズ上場)
2614          新規上場企業の横顔:パデコ(6月28日ジャスダック上場)
                               header
3398  米国株式市場・序盤=反発、イタリア混迷受けた前日の下げから一転
3937    米利上げ、今年4回予想確率上昇 雇用統計受け=短期金利先物
3945    米利上げ、今年4回予想確率上昇 雇用統計受け=短期金利先物
4238           米国株反発、雇用統計受け ハイテク株が高い
4242       米国株式市場=反発、雇用統計受け ハイテク株が高い
6815     米国株式市場・序盤=反発、ECB決定や小売売上高統計受け
                                          header
472                 福田前次官のセクハラ行為、財務大臣として認定=麻生財務相
476                 福田前次官のセクハラ行為、財務大臣として認定=麻生財務相
1304           次官人事、会期中決めたいが地検の森友調査次第でずれ込む=麻生財務相
1313  UPDATE 1-次官人事、会期中決めたいが地検の森友調査次第でずれ込む=麻生財務相
1897            森友改ざん前文書と財務省との交渉記録、23日両方提出=麻生財務相
1900   UPDATE 1-森友改ざん前文書と財務省との交渉記録、23日両方提出=麻生財務相
2741                    麻生財務相、森友交渉記録破棄など陳謝 辞任は否定
2752        再送-UPDATE 1-麻生財務相、森友交渉記録破棄など陳謝 辞任は否定
3296              麻生財務相、関係者処分後の辞任を否定 森友学園の決裁文書巡り
3297           再送-麻生財務相、関係者処分後の辞任を否定 森友学園の決裁文書巡り
                              header
1159        来週の外為市場はドル高継続か、新興国リスクに警戒
1162        ドル高継続か、新興国リスクに警戒=来週の外為市場
1723        ドル高継続か、新興国リスクに警戒=今週の外為市場
1731        ドル高継続か、新興国リスクに警戒=今週の外為市場
2664         ドル上値重い、下値の堅さも共存=来週の外為市場
4008  リスク回避の火種くすぶり、ドル108円割れも=来週の外為市場
5596       重要イベント集中、突発的な円高警戒=来週の外為市場

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment