In [2]:
with open('0203.csv', 'r') as f:
    for line in f.readlines():
        #print line.strip()
        pass

In [10]:
import requests
from bs4 import BeautifulSoup as bs
payload= {
'select_item':'1',
'select_subitem':'1',
'Submit':'%B7j%B4M'
}
res = requests.post('http://www.twse.com.tw/ch/listed/listing_profile_inquiry.php', data = payload)
res.encoding = 'big5'
soup = bs(res.text)

In [18]:
import pandas as pd
dfs = pd.read_html(soup.select('.board_prod')[0].prettify('utf-8'), encoding = 'utf-8')
df = dfs[0]
df.columns = df.iloc[1]

In [19]:
df = df.drop([0,1])
df


Out[19]:
1 證券代號 證券名稱 3/29 收盤價 3/28 收盤價 漲幅 %
2 1213 大飲 17.95 16.9 6.21
3 5264 F-鎧勝 174 164 6.1
4 1524 耿鼎 7.38 7 5.43
5 2910 統領 24.1 23 4.78
6 3550 聯穎 13.2 12.6 4.76
7 3016 嘉晶 25.6 24.5 4.49
8 2539 櫻花建 29.5 28.35 4.06
9 2387 精元 15.6 15 4
10 2379 瑞昱 87.6 84.7 3.42
11 3504 揚明光 37.7 36.55 3.15
12 2449 京元電 27.6 26.8 2.99
13 1590 F-亞德 178 173 2.89
14 1443 立益 5.24 5.1 2.75
15 3038 全台 13.25 12.9 2.71
16 2006 東鋼 19.5 19 2.63
17 1470 大統染 18.85 18.4 2.45
18 5534 長虹 50.2 49.05 2.34
19 9930 中聯資 64.2 62.8 2.23
20 2727 王品 141.5 138.5 2.17
21 6172 互億 7.3 7.16 1.96
22 1438 裕豐 4.3 4.22 1.9
23 2540 愛山林 30.85 30.3 1.82
24 2424 隴華 28.9 28.4 1.76
25 2612 中航 24.35 23.95 1.67
26 2454 聯發科 244 240 1.67
27 2608 大榮 40.4 39.75 1.64
28 3034 聯詠 126 124 1.61
29 2912 統一超 225.5 222 1.58
30 3561 昇陽科 17.65 17.4 1.44
31 2498 宏達電 91.8 90.5 1.44
32 3296 勝德 14.2 14 1.43
33 6239 力成 71.5 70.5 1.42
34 2723 F-美食 254.5 251 1.39
35 4108 懷特 43.95 43.35 1.38
36 6415 F-矽力 405 399.5 1.38
37 1465 偉全 14.75 14.55 1.37
38 8940 新天地 14.8 14.6 1.37
39 2393 億光 54.5 53.8 1.3
40 2105 正新 64.1 63.3 1.26
41 5269 祥碩 166 164 1.22
42 1805 寶徠 6.84 6.76 1.18
43 2385 群光 79 78.1 1.15
44 2444 友旺 13.5 13.35 1.12
45 1722 台肥 47.3 46.8 1.07
46 5907 F-大洋 25.15 24.9 1
47 1605 華新 8.45 8.37 0.96
48 4934 太極 21.2 21 0.95
49 2731 雄獅 109 108 0.93
50 3025 星通 11.85 11.75 0.85
51 6285 啟� 84.2 83.5 0.84

In [20]:
df.head()


Out[20]:
1 證券代號 證券名稱 3/29 收盤價 3/28 收盤價 漲幅 %
2 1213 大飲 17.95 16.9 6.21
3 5264 F-鎧勝 174 164 6.1
4 1524 耿鼎 7.38 7 5.43
5 2910 統領 24.1 23 4.78
6 3550 聯穎 13.2 12.6 4.76

In [21]:
df.describe()


Out[21]:
1 證券代號 證券名稱 3/29 收盤價 3/28 收盤價 漲幅 %
count 50 50 50 50 50
unique 50 50 50 49 46
top 1465 統一超 54.5 164 1.44
freq 1 1 1 2 2

In [34]:
import sqlite3 as lite
con = lite.connect('stock.sqlite')
df.to_sql('stock', con=con)


C:\Anaconda2\lib\site-packages\ipykernel\__main__.py:3: UserWarning: The spaces in these column names will not be changed. In pandas versions < 0.14, spaces were converted to underscores.
  app.launch_new_instance()

In [1]:
import datetime
import os
import pandas

seattle_fire_responses = pandas.read_csv('0203.csv', parse_dates=[
    'Datetime'
], usecols=[
    'Address',
    'Type',
    'Datetime',
    'Latitude',
    'Longitude',
    'Incident Number',
]).dropna()
len(seattle_fire_responses)


C:\Anaconda\lib\site-packages\dateutil\parser.py:428: UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal
  elif res.tzname and res.tzname in time.tzname:
Out[1]:
332

In [2]:
seattle_fire_responses.head()


Out[2]:
Address Type Datetime Latitude Longitude Incident Number
0 4th Av N / Mercer St Aid Response 2014-02-03 23:56:00 47.624564 -122.348877 F140012355
1 2121 8th Av Aid Response 2014-02-03 23:47:00 47.616647 -122.338160 F140012352
2 747 N 135th St Aid Response 2014-02-03 23:19:00 47.726864 -122.348012 F140012350
3 3716 Ne 75th St Medic Response 2014-02-03 23:12:00 47.683046 -122.288274 F140012349
4 1111 3rd Av Auto Fire Alarm 2014-02-03 23:11:00 47.606410 -122.334739 F140012348

In [9]:
import pandas as pd
df = pd.read_csv('data/gps.csv')
df.head()


Out[9]:
lat lon date city country
0 51.481292 -0.451011 05/14/2014 09:07 West Drayton United Kingdom
1 51.474005 -0.450999 05/14/2014 09:22 Hounslow United Kingdom
2 51.478199 -0.446081 05/14/2014 10:51 Hounslow United Kingdom
3 51.478199 -0.446081 05/14/2014 11:24 Hounslow United Kingdom
4 51.474146 -0.451562 05/14/2014 11:38 Hounslow United Kingdom

In [12]:
#df['city'].value_counts()
df['country'].value_counts()
df['country'].value_counts().head()


Out[12]:
Spain             646
Portugal          256
Germany           225
Czech Republic    130
Poland            104
dtype: int64

In [14]:
coordinates = df.as_matrix(columns=['lon', 'lat'])
print type(coordinates)


<type 'numpy.ndarray'>

In [15]:
%pylab inline


Populating the interactive namespace from numpy and matplotlib
WARNING: pylab import has clobbered these variables: ['cm']
`%matplotlib` prevents importing * from pylab and numpy

In [27]:
import matplotlib.pyplot as plt
plt.figure(figsize=(10, 6), dpi=100)
co_scatter = plt.scatter(coordinates[:,0], coordinates[:,1])
plt.show()



In [28]:
most_index = df['city'].value_counts().head().index
# list city within most index
most = pd.DataFrame(df[df['city'].isin(most_index)])
# drop duplicate city within index
most.drop_duplicates(subset=['city'], take_last=False, inplace=True)

In [29]:
print most


            lat        lon              date       city         country
7     38.781775  -9.137544  05/14/2014 15:11     Lisbon        Portugal
268   41.377119   2.151632  05/19/2014 00:04  Barcelona           Spain
671   50.087729  14.660600  06/02/2014 12:10     Prague  Czech Republic
805   48.518270   9.058023  06/06/2014 19:06   Tübingen         Germany
1659  40.982352  28.815756  07/06/2014 20:42   Istanbul          Turkey

In [33]:
# lisf top 6 city index
most_index = df['city'].value_counts().head(6).index

# list city within most index
most = pd.DataFrame(df[df['city'].isin(most_index)])

# drop duplicate city within index
most.drop_duplicates(subset=['city'], take_last=False, inplace=True)

In [34]:
plt.figure(figsize=(10, 6), dpi=100)
co_scatter = plt.scatter(coordinates[:,0], coordinates[:,1])



In [36]:
for i, row in most.iterrows(): 
    print i, row


7 lat                38.78177
lon               -9.137544
date       05/14/2014 15:11
city                 Lisbon
country            Portugal
Name: 7, dtype: object
268 lat                41.37712
lon                2.151632
date       05/19/2014 00:04
city              Barcelona
country               Spain
Name: 268, dtype: object
671 lat                50.08773
lon                 14.6606
date       06/02/2014 12:10
city                 Prague
country      Czech Republic
Name: 671, dtype: object
805 lat                48.51827
lon                9.058023
date       06/06/2014 19:06
city               Tübingen
country             Germany
Name: 805, dtype: object
1588 lat                37.96767
lon                 23.7292
date       07/05/2014 05:32
city                 Athens
country              Greece
Name: 1588, dtype: object
1659 lat                40.98235
lon                28.81576
date       07/06/2014 20:42
city               Istanbul
country              Turkey
Name: 1659, dtype: object

In [38]:
plt.figure(figsize=(10, 6), dpi=100)
co_scatter = plt.scatter(coordinates[:,0], coordinates[:,1])

for i, row in most.iterrows():    
     plt.annotate(row['city'].decode('utf-8'), 
                 xy=(row['lon'], row['lat']),
                 xytext=(row['lon'] + 1.5, row['lat'] + 0.6),
                 bbox=dict(boxstyle='round', color='k', fc='w', alpha=0.6),
                 xycoords='data',
                 arrowprops=dict(arrowstyle='->', connectionstyle='arc3,rad=0.5', color='k', alpha=0.8))
plt.show()



In [39]:
# lisf top 6 city index
most_index = df['country'].value_counts().index

# list city within most index
most = pd.DataFrame(df[df['country'].isin(most_index)])

# drop duplicate city within index
most.drop_duplicates(subset=['country'], take_last=False, inplace=True)

plt.figure(figsize=(10, 6), dpi=100)
co_scatter = plt.scatter(coordinates[:,0], coordinates[:,1])

for i, row in most.iterrows():    
     plt.annotate(row['country'].decode('utf-8'), 
                 xy=(row['lon'], row['lat']),
                 xytext=(row['lon'] + 1.5, row['lat'] + 0.6),
                 bbox=dict(boxstyle='round', color='k', fc='w', alpha=0.6),
                 xycoords='data',
                 arrowprops=dict(arrowstyle='->', connectionstyle='arc3,rad=0.5', color='k', alpha=0.8))
plt.show()



In [41]:
import numpy as np
from sklearn.cluster import KMeans


# Compute clustering with Means
k_means = KMeans(n_clusters=10)
k_means.fit(coordinates)

k_means_cluster_centers = k_means.cluster_centers_
print k_means_cluster_centers


[[ 23.51629587  38.01096837]
 [  2.15699201  41.38100871]
 [ 19.72823386  50.07119026]
 [ -8.98752764  39.45797003]
 [  8.82884648  48.40155074]
 [ 18.35364969  43.19139728]
 [ 28.97042667  41.02845416]
 [ 14.50884003  50.04236579]
 [ 20.52068845  41.28865261]
 [ -0.44683729  51.47795081]]

In [46]:
plt.figure(figsize=(10, 6), dpi=100)
plt.scatter(k_means_cluster_centers[:,0], k_means_cluster_centers[:,1], c='r', s=100)
plt.scatter(coordinates[:,0], coordinates[:,1], c='k', alpha=.3, s=10)
plt.show()



In [47]:
from sklearn.cluster import DBSCAN
db = DBSCAN(eps=0.8, min_samples=2).fit(coordinates)
labels = db.labels_
print labels


[ 0  0  0 ..., 14 14 14]

In [48]:
num_clusters =   len(set(labels)) - (1 if -1 in labels else 0)
print set(labels)


set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, -1])

In [49]:
from sklearn import metrics
print('Estimated number of clusters: %d' % num_clusters)
print("Silhouette Coefficient: %0.3f" % metrics.silhouette_score(coordinates, labels))


Estimated number of clusters: 15
Silhouette Coefficient: 0.901
C:\Anaconda\lib\site-packages\numpy\core\_methods.py:59: RuntimeWarning: Mean of empty slice.
  warnings.warn("Mean of empty slice.", RuntimeWarning)

In [50]:
def getCentroid(points):
    n = points.shape[0]
    sum_lon = np.sum(points[:, 1])
    sum_lat = np.sum(points[:, 0])
    return (sum_lon/n, sum_lat/n)

In [51]:
clusters = pd.Series([coordinates[labels == i] for i in xrange(num_clusters)])
clusters


Out[51]:
0     [[-0.4510112, 51.4812916], [-0.4509991, 51.474...
1     [[-9.1375444, 38.7817746], [-9.1291947, 38.774...
2     [[2.1059314, 41.3039111], [2.0755827, 41.29272...
3     [[19.0983815, 50.4893042], [19.0605598, 50.449...
4     [[15.3950116, 50.0418467], [14.99529, 50.12124...
5     [[9.37027094, 49.16301872], [9.3457177, 49.157...
6     [[20.2898206, 44.8211643], [20.463396, 44.8142...
7     [[18.4259447, 43.8595184], [18.4258652, 43.859...
8     [[16.4362152, 43.5111015], [16.434215, 43.5076...
9     [[20.736022, 42.2082015], [20.7361144, 42.2082...
10    [[20.7987999, 41.1143363], [20.7986329, 41.114...
11    [[19.9464309, 40.7021955], [19.9464281, 40.702...
12    [[21.1200769, 39.0400212], [21.26011286, 38.55...
13    [[28.8157561, 40.9823519], [28.8170347, 40.976...
14    [[11.7921547, 48.3564169], [11.7917104, 48.356...
dtype: object

In [57]:
print clusters[0]

def getCentroid(points):
    n = points.shape[0]
    sum_lon = np.sum(points[:, 1])
    sum_lat = np.sum(points[:, 0])
    return (sum_lon/n, sum_lat/n)

getCentroid(clusters[0])


[[ -0.4510112  51.4812916]
 [ -0.4509991  51.474005 ]
 [ -0.446081   51.4781991]
 [ -0.446081   51.4781991]
 [ -0.4515622  51.4741456]
 [ -0.4411027  51.4801463]
 [ -0.4410238  51.479669 ]]
Out[57]:
(51.477950814285713, -0.44683728571428577)

In [55]:
for c in clusters:
    print len(c)


7
256
646
109
128
215
15
84
23
30
34
30
81
94
6

In [58]:
clusters = pd.Series([coordinates[labels == i] for i in xrange(num_clusters)])

lat = []
lon = []

for i, cluster in clusters.iteritems():  
    representative_point =getCentroid(cluster)
    lat.append(representative_point[0])
    lon.append(representative_point[1])

In [59]:
lat


Out[59]:
[51.477950814285713,
 39.457970034765623,
 41.38100870532508,
 50.071190261284414,
 50.026167333203126,
 48.389913845023251,
 44.811871419999996,
 42.814683774999992,
 43.510389552173912,
 42.208403176666678,
 41.114181535294115,
 40.641590293333337,
 38.023672725679013,
 41.02845416361702,
 48.356280233333337]

In [60]:
lon


Out[60]:
[-0.44683728571428577,
 -8.9875276445312497,
 2.1569920091176469,
 19.728233857798166,
 14.410459441796876,
 8.7166680074883729,
 20.392825326666664,
 18.514508229761905,
 16.436269191304348,
 20.737659086666667,
 20.798097426470591,
 19.969341370000002,
 23.48671292148148,
 28.970426670212767,
 11.791802433333332]

In [61]:
zip(lat, lon)


Out[61]:
[(51.477950814285713, -0.44683728571428577),
 (39.457970034765623, -8.9875276445312497),
 (41.38100870532508, 2.1569920091176469),
 (50.071190261284414, 19.728233857798166),
 (50.026167333203126, 14.410459441796876),
 (48.389913845023251, 8.7166680074883729),
 (44.811871419999996, 20.392825326666664),
 (42.814683774999992, 18.514508229761905),
 (43.510389552173912, 16.436269191304348),
 (42.208403176666678, 20.737659086666667),
 (41.114181535294115, 20.798097426470591),
 (40.641590293333337, 19.969341370000002),
 (38.023672725679013, 23.48671292148148),
 (41.02845416361702, 28.970426670212767),
 (48.356280233333337, 11.791802433333332)]

In [65]:
plt.figure(figsize=(10, 6), dpi=100)
plt.scatter(lon, lat, c='r', s=100)
plt.scatter(coordinates[:,0], coordinates[:,1], c='k', alpha=.3, s=10)
for i, row in most.iterrows():    
     plt.annotate(row['country'].decode('utf-8'), 
                 xy=(row['lon'], row['lat']),
                 xytext=(row['lon'] + 1.5, row['lat'] + 0.6),
                 bbox=dict(boxstyle='round', color='k', fc='w', alpha=0.6),
                 xycoords='data',
                 arrowprops=dict(arrowstyle='->', connectionstyle='arc3,rad=0.5', color='k', alpha=0.8))
plt.show()



In [66]:
plt.figure(figsize=(10, 6), dpi=100)
plt.scatter(k_means_cluster_centers[:,0], k_means_cluster_centers[:,1], c='r', s=100)
plt.scatter(coordinates[:,0], coordinates[:,1], c='k', alpha=.3, s=10)
for i, row in most.iterrows():    
     plt.annotate(row['country'].decode('utf-8'), 
                 xy=(row['lon'], row['lat']),
                 xytext=(row['lon'] + 1.5, row['lat'] + 0.6),
                 bbox=dict(boxstyle='round', color='k', fc='w', alpha=0.6),
                 xycoords='data',
                 arrowprops=dict(arrowstyle='->', connectionstyle='arc3,rad=0.5', color='k', alpha=0.8))
plt.show()



In [162]:
print corpus[0]


新北市 八仙 水上 樂園 昨晚 發 生粉 塵 爆炸 , 新北市 衛生局 統計 到 目前 為止 , 由 救護車 送 醫再 加上 自行 送醫 的 人數 , 已經 有 474 人 , 其中 125 人 重傷 ; 而 新北市 長 朱立倫 昨晚 到 現場 坐鎮 指揮 了解 狀況 , 並馬上 要求 追究 責任 徹查 , 並要 八仙 樂園 立刻 關園 停業 , 八仙 樂園 業者 雖然 表示 活動 是 外包 的 , 但 也 說 會 配合 暫時 停止 營業 接受 調查 。 < br   / > < br   / > 警方 今天 凌晨 也 帶 回 五名 相關 人 漏夜 偵訊 , 包括 現場 呂姓 活動 負責人 、 邱姓 硬體 設備 人員 、 和 廖姓 特效 人員 , 以及 兩名 在 現場 噴灑 彩色 粉塵 的 2 名 工作 人員 , 訊後將 依業務 過失 重大 傷害 與 公共 危險 罪嫌 偵辦 , 統一 移送 士林 地檢署 。 檢警 偵辦 重點 在 於 主辦 單位 辦 這個 活動時 , 到底 有 沒 有 做好 安全 上 的 防備 ; 據 了解 主辦 人 表示 彩色 派 對 今年 是 第四次 舉辦 , 去年 也 才 在 高雄 西子 灣辦過 , 不 知道 為何 這次 會 造成 這麼 嚴重 的 意外 ; 但 警方 對 這樣 的 說法 保留 態度 。 < br   / > < br   / > 而 士林 地檢署 今天 凌晨 也 已經 由 3 名檢察官 , 連夜 到 八仙 樂園 了解 情況 , 並 扣押 噴發 氣體 和 粉塵 的 鋼瓶 。 據 了解 , 檢方 人員到 現場 後 發現 , 舞台 設在 游泳池 中間 , 其實 等 於 是 半密閉 空間 , 而且 地上 四散 菸 蒂 和 打火 機 , 不 排除 是 有人 不慎 點 菸 引燃 , 造成 這次 的 意外 。 < br   / > < br   / > 而 外界 關注 昨晚 現場 到底 有 沒 有 在 舞台 上 噴火 , 據 了解 , 昨晚 器材 中並 沒有 火焰 效果器 , 檢警 初步 研判 , 辦 趴用 的 粉彩 主要 成分 為 玉米粉 , 在 一定 的 空間 、 一定 的 濃度 , 遇到 靜電 或 火花 , 不用 高溫 就 很 容易 引發 閃燃 現象 ,   可能 是 大量 接觸 熱能 , 像是 舞台 光源 、 器材 電流 、 點 菸 等 引發 爆炸 , 但 詳細 起火 原因 和 起火 點 , 還是 要 經由 火場 鑑識 釐 清 。 檢警 近期 將陸續 傳喚 傷者 , 並調 閱監 視錄 影畫面 , 了解 事發 經過 。

In [169]:
import jieba.posseg as pseg
for ele, pos in pseg.cut("我爱北京天安门"):
    print pos, ele
print ' '.join([ele for ele, pos in pseg.cut("我爱北京天安门") if pos in ['n', 'ns'] ])


r 我
v 爱
ns 北京
ns 天安门
北京 天安门

In [170]:
from xml.dom import minidom
from xml.etree import ElementTree
import jieba
import jieba.posseg as pseg

with open('1435449602.xml', 'r') as f:
    events=ElementTree.fromstring(f.read())

corpus = []
ary= []
for elem in events.findall('./channel/item'):
    guid        = elem.find('guid').text
    title       = elem.find('title').text
    description = elem.find('description').text
    pubDate     = elem.find('pubDate').text
    source      = elem.find('source').text
    ary.append(title)
    corpus.append(' '.join([ele for ele, pos in pseg.cut(description) if pos in ['ns','vn','nr','nt','nz','an','n']] ))

In [171]:
from sklearn.feature_extraction.text import TfidfTransformer
transformer = TfidfTransformer()
X = vectorizer.fit_transform(corpus)
tfidf = transformer.fit_transform(X)
weight = tfidf.toarray()

In [172]:
db = DBSCAN(eps=0.6, min_samples=3,algorithm='brute', metric="cosine")
db_data = db.fit_predict(weight)

In [173]:
print db_data


[ 0  3  1 -1  0 -1 -1 -1 -1 -1 -1  0  1 -1  2 -1  0 -1 -1 -1  2 -1 -1 -1  1
  0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1  1 -1  1 -1 -1  1 -1 -1 -1 -1 -1 -1 -1
 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
 -1 -1 -1 -1 -1 -1 -1  1 -1  1 -1 -1 -1 -1 -1  3 -1  1 -1 -1  3 -1 -1  3 -1
  0  0 -1  0 -1  3  0 -1 -1 -1  2  4 -1  0  1 -1  2  0 -1  2  0  2 -1  0  4
  4  2  0 -1 -1 -1 -1 -1 -1 -1 -1 -1  2 -1 -1 -1 -1  2  0  0  2 -1]

In [174]:
labels = db.labels_
print labels


[ 0  3  1 -1  0 -1 -1 -1 -1 -1 -1  0  1 -1  2 -1  0 -1 -1 -1  2 -1 -1 -1  1
  0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1  1 -1  1 -1 -1  1 -1 -1 -1 -1 -1 -1 -1
 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
 -1 -1 -1 -1 -1 -1 -1  1 -1  1 -1 -1 -1 -1 -1  3 -1  1 -1 -1  3 -1 -1  3 -1
  0  0 -1  0 -1  3  0 -1 -1 -1  2  4 -1  0  1 -1  2  0 -1  2  0  2 -1  0  4
  4  2  0 -1 -1 -1 -1 -1 -1 -1 -1 -1  2 -1 -1 -1 -1  2  0  0  2 -1]

In [175]:
num_clusters =   len(set(labels)) - (1 if -1 in labels else 0)
print set(labels)


set([0, 1, 2, 3, 4, -1])

In [181]:
for idx, l in enumerate(db.labels_):
    if l == 1:
        print ary[idx]


希臘國內三分一自動櫃員機現金短缺
歐元區財長拒希臘延長救助計劃
呂紹煒專欄:違約與退出 希臘與歐洲才能重生(上)
希臘違約在即  歐盟全力穩定經濟
希臘脫歐變可能 歐洲衝擊大
希債協議  法國願盡最後斡旋努力
希臘1/3提款機錢被提光
確保銀行穩定 希臘續與ECB緊密合作
希臘態度強硬 歐元區耐心漸失
希臘盼展延債務 歐元區拒絕

In [182]:
from sklearn.feature_extraction.text import TfidfTransformer
transformer = TfidfTransformer()
X = vectorizer.fit_transform(corpus)
tfidf = transformer.fit_transform(X)
weight = tfidf.toarray()

In [185]:
from sklearn.metrics.pairwise import linear_kernel
#print linear_kernel(tfidf[0], tfidf).flatten()
cosine_similarities = linear_kernel(tfidf[0], tfidf).flatten()
print cosine_similarities


[ 1.          0.10093483  0.00758355  0.          0.42773423  0.02451755
  0.19486331  0.          0.          0.00581206  0.02384168  0.18383265
  0.00486899  0.00919249  0.          0.0055901   0.27669117  0.
  0.05308888  0.          0.01679272  0.24639655  0.01742609  0.          0.0062555
  0.40371155  0.00720463  0.01295297  0.03973804  0.01860976  0.
  0.00479975  0.          0.          0.          0.          0.04051555
  0.00341339  0.          0.00305933  0.03243179  0.05083708  0.          0.
  0.01430347  0.          0.00571796  0.00286234  0.00330209  0.00683212
  0.00331356  0.01427637  0.002769    0.00471629  0.00332822  0.00770943
  0.00168146  0.00481331  0.01089011  0.00559877  0.00524669  0.01728479
  0.00554637  0.00866881  0.02642362  0.01242947  0.02176888  0.00337425
  0.01362229  0.          0.00910713  0.0255711   0.00550622  0.00298241
  0.00400042  0.00788701  0.00755019  0.03920336  0.0095726   0.          0.0088191
  0.1714976   0.          0.01596974  0.          0.01157497  0.11049715
  0.23443364  0.16620506  0.08352423  0.09533714  0.23470309  0.00670028
  0.13840243  0.00588396  0.19656445  0.03030759  0.12798875  0.05524131
  0.04955824  0.34046947  0.0348634   0.22254132  0.24635459  0.06220053
  0.03999806  0.14124245  0.          0.          0.05595543  0.
  0.01075228  0.06585667  0.30390597  0.          0.0125914   0.02018255
  0.30815772  0.04641673  0.          0.26227533  0.010885    0.00633091
  0.24794773  0.0191538   0.0212888   0.01230695  0.28104111  0.          0.
  0.04739165  0.00362059  0.01762153  0.00672942  0.01099016  0.03296523
  0.00410349  0.02160689  0.00515261  0.01732761  0.06813776  0.06885693
  0.02224968  0.22480396  0.16539234  0.          0.        ]

In [194]:
related_docs_indices = cosine_similarities.argsort()[::-1]
related_docs_indices
print ary[0]
for index in related_docs_indices:
    if cosine_similarities[index] > 0.1:
        print ary[index], cosine_similarities[index]


八仙塵爆  五相關人依公共危險重傷害法辦
八仙塵爆  五相關人依公共危險重傷害法辦 1.0
6月28日各報頭版要聞 0.427734225844
八仙樂園粉塵燃爆 400人傷 負責人被移送 0.403711547586
八仙樂園粉塵瞬燃 還原失事現場影片曝光 0.340469466339
八仙樂園爆炸意外 朱立倫:立即停園接受調查 0.308157718314
八仙樂園爆炸228人輕重傷 朱立倫:無限期停業 0.303905967756
【八仙意外】馬英九、毛治國第一時間得知 指示全 0.281041114878
八仙樂園貼出暫停營業海報 0.276691169809
八仙樂園塵爆215傷 朱立倫下令即刻停業 0.262275333546
八仙樂園爆炸 朱立倫4點指示 0.247947732381
八仙樂園爆炸案 專家認玉米粉危險性高應管制使用 0.246396551513
八仙樂園爆炸案 3檢察官展開調查 0.24635458965
彩色派對主辦人:風勢太大,引燃粉塵 0.234703085254
侯友宜探視傷者:追究責任 0.234433640894
【八仙意外】讓專業的來!柯文哲指示啟動EOC 0.224803956208
八仙樂園爆炸案 士檢派3檢察官現場指揮 0.222541322502
派對彩粉首次釀禍  蔣丙煌:研議管理 0.196564449597
八仙樂園舞台大火 逾400人輕重傷 0.194863311466
八仙樂園意外 毛揆取消視察臺東行程 0.183832645598
八仙樂園爆炸案 負責人等5人移送 0.171497595795
八仙樂園火警  國軍加入救援 0.16620506456
八仙水上樂園爆炸逾百人傷 三軍總醫院收治傷患 0.165392336726
八仙樂園意外 洪秀柱:為傷者祈福 0.141242453989
八仙樂園大火  傷者查詢電話 0.138402428704
00:35統計 八仙大火重傷97人、輕傷132人 0.127988746478
八仙樂園爆炸 劣賊趁亂打劫 0.110497152011
八仙樂園意外 病患持續增加中 0.100934833054

In [195]:
# pip install seaborn
%matplotlib inline
from matplotlib import pyplot as plt
import seaborn as sns

In [200]:
n_cosine_similarities = linear_kernel(tfidf[0:10], tfidf[0:10])
print n_cosine_similarities


[[ 1.          0.10093483  0.00758355  0.          0.42773423  0.02451755
   0.19486331  0.          0.          0.00581206]
 [ 0.10093483  1.          0.02261562  0.          0.14269063  0.00590131
   0.24146506  0.          0.          0.        ]
 [ 0.00758355  0.02261562  1.          0.00349887  0.01618184  0.
   0.01420986  0.          0.          0.        ]
 [ 0.          0.          0.00349887  1.          0.01709682  0.00151445
   0.01157983  0.          0.          0.0024299 ]
 [ 0.42773423  0.14269063  0.01618184  0.01709682  1.          0.00222422
   0.23087119  0.          0.          0.00479342]
 [ 0.02451755  0.00590131  0.          0.00151445  0.00222422  1.
   0.01034154  0.00263271  0.          0.        ]
 [ 0.19486331  0.24146506  0.01420986  0.01157983  0.23087119  0.01034154
   1.          0.          0.          0.        ]
 [ 0.          0.          0.          0.          0.          0.00263271
   0.          1.          0.          0.        ]
 [ 0.          0.          0.          0.          0.          0.          0.
   0.          1.          0.        ]
 [ 0.00581206  0.          0.          0.0024299   0.00479342  0.          0.
   0.          0.          1.        ]]

In [201]:
sns.heatmap(n_cosine_similarities, annot=True, center=0, cmap='coolwarm')


Out[201]:
<matplotlib.axes._subplots.AxesSubplot at 0xd9e8fd0>

In [215]:
import requests
from bs4 import BeautifulSoup as bs
rs = requests.session()
res = rs.get('http://bsr.twse.com.tw/bshtm/bsMenu.aspx')
soup = bs(res.text)
payload = {
'RadioButton_Normal':'RadioButton_Normal',
'TextBox_Stkno':'2330',
'btnOK':'查詢'    
}
#'CaptchaControl1':'92D34',
for inp in soup.select('input[type==hidden]'):
    payload[inp['name']] = inp['value']

In [216]:
res2 =  rs.post('http://bsr.twse.com.tw/bshtm/bsMenu.aspx', data=payload)

In [218]:
res3 = rs.get('http://bsr.twse.com.tw/bshtm/bsContent.aspx?v=t')
#print res3.text

In [221]:
import pandas as pd
dfs = pd.read_html(res3.text.encode('utf-8'), encoding = 'utf-8')

In [222]:
dfs[0]


Out[222]:
0 1 2 3 4 5 6 7 8 9 ... 523 524 525 526 527 528 529 530 531 532
0 交易日期 2016/03/30 股票代號 2330 台積電 成交筆數 14,480 成交金額... 交易日期 2016/03/30 股票代號 2330 台積電 成交筆數 14,480 成交金額... 交易日期 2016/03/30 股票代號 2330 台積電 成交筆數 14480 成交金額 7009730223 ... 98 1045 161 0 4000 100 104A 159.5 1000 0
1 交易日期 2016/03/30 股票代號 2330 台積電 成交筆數 14,480 成交金額... 交易日期 2016/03/30 股票代號 2330 台積電 成交筆數 14480 成交金額 7009730223 成交股數 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2 交易日期 2016/03/30 股票代號 2330 台積電 NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
3 成交筆數 14480 成交金額 7009730223 成交股數 43720332 NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
4 開盤價 158.50 最高價 162.00 最低價 158.50 收盤價 161.50 NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
5 序 證券商 成交單價 買進股數 賣出股數 1 1020 合  庫 158.50 2,000 ... 序 證券商 成交單價 買進股數 賣出股數 1 1020 合  庫 158.50 2,000 ... 證券商 成交單價 買進股數 賣出股數 1 1020 合  庫 158.50 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
6 序 證券商 成交單價 買進股數 賣出股數 1 1020 合  庫 158.50 2,000 ... 證券商 成交單價 買進股數 賣出股數 1 1020 合  庫 158.50 2000 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
7 證券商 成交單價 買進股數 賣出股數 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
8 1 1020 合  庫 158.50 2000 0 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
9 3 1020 160.00 20000 35000 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
10 5 1020 161.00 13000 8000 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
11 7 1020 162.00 0 3000 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
12 9 1021 160.00 1000 4000 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
13 11 1021 161.00 0 3000 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
14 13 1022 合庫台南 159.50 3000 0 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
15 15 1022 161.50 0 10000 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
16 17 1023 160.50 0 10000 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
17 19 1023 161.50 0 1000 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
18 21 1024 161.50 0 11000 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
19 23 1028 合庫彰化 160.00 0 1000 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
20 25 102A 合庫新竹 160.00 0 1000 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
21 27 102C 合庫自強 159.50 2000 0 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
22 29 102C 160.50 0 5000 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
23 31 102C 161.50 0 1000 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
24 33 102E 159.50 0 1000 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
25 35 102E 161.00 8000 0 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
26 37 102F 合庫西台 161.50 1000 0 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
27 39 1030 160.00 0 213000 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
28 41 1030 161.00 0 35000 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
29 43 1031 土銀台中 161.00 0 1000 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
79 42 1030 161.50 0 1000 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
80 44 1032 土銀台南 161.50 0 1000 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
81 46 1034 土銀嘉義 158.50 2000 0 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
82 48 1034 160.00 0 2000 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
83 50 1035 土銀新竹 158.50 1000 0 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
84 52 1035 160.50 0 945 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
85 54 1036 土銀玉里 160.00 0 2000 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
86 56 1037 土銀花蓮 160.50 0 281 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
87 58 1038 159.50 0 2000 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
88 60 1038 160.50 0 3000 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
89 62 1038 161.50 0 3000 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
90 64 103A 土銀建國 160.00 0 2000 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
91 66 103A 161.50 0 1000 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
92 68 103C 土銀白河 160.00 1000 0 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
93 70 103D 土銀湖口 160.50 0 350 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
94 72 1040 臺 銀 158.50 6000 0 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
95 74 1040 159.50 12000 409000 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
96 76 1040 160.50 0 223000 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
97 78 1040 161.50 8000 805000 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
98 80 1041 159.50 0 1000 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
99 82 1041 161.00 0 4000 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
100 84 1042 臺銀臺南 158.50 10000 0 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
101 86 1042 160.50 35 3000 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
102 88 1042 161.50 31000 5000 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
103 90 1043 160.00 6000 8000 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
104 92 1043 161.00 0 6000 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
105 94 1045 臺銀新竹 159.00 0 1000 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
106 96 1045 160.00 2000 2000 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
107 98 1045 161.00 0 4000 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
108 100 104A 159.50 1000 0 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN

109 rows × 533 columns


In [ ]: