2017年3月13日 星期一

pythone upgrade all installed packages 更新所有已安裝的packages

pip freeze --local | grep -v '^\-e' | cut -d = -f 1  | xargs -n1 pip install -U

pip3 freeze --local | grep -v '^\-e' | cut -d = -f 1  | xargs -n1 pip3 install -U

2017年3月9日 星期四

Windows 7 - Cygwin / Cygwin64 設定 pip proxy


測試 --proxy 後有無"="皆可
pip install --proxy proxyuser:proxypassword@proxy.server.domain <python_package_name>

pip install --proxy=proxyuser:proxypassword@proxy.server.domain <python_package_name>

據說 pip3 "=" 無用
pip3 install --proxy proxyuser:proxypassword@proxy.server.domain <python_package_name>


#

2017年2月21日 星期二

R 以地址取得經緯座標值

假如data.frame data中的lat值為0時,則利用google maps api geocode 查詢地址的經緯座標,並存回 data$lat 與 data$lng 中:

library(ggmap)

for (i in 1:nrow(data)) {
     if (data$lat[i] == 0) {
         addr <- data$service_addr[i]
         url = paste('http://maps.google.com/maps/api/geocode/xml?address=', addr,'&sensor=false',sep='')
         doc = xmlTreeParse(url) 
         root = xmlRoot(doc) 
         data$lat[i] = xmlValue(root[['result']][['geometry']][['location']][['lat']]) 
         data$lng[i] = xmlValue(root[['result']][['geometry']][['location']][['lng']])
     }
}

# 將 data 內容寫入檔案 mymap.csv
write.table(data, file = "mymap.csv", sep = "," )

#

2017年2月20日 星期一

取得政府資料開放平台資料資源,將資料分類統計以R語言繪製成圓餅圖

library(data.table)

# 取得政府資料開放平台資料資源 (file format = csv)
data <- fread("http://search.data.gov.tw/wise/query?q=%2A%3A%2A&export=true&format=csv&rows=2147483647&d=1", header="auto", encoding = "UTF-8")

# 統計資料分類及分類數量, 統計結果以 data.frame 儲存至 categories
categories <- as.data.frame(table(data$服務分類))

# 計算每個分類百分比,取小數點第2位,將結果存於 pct
pct <- round(categories$Freq/sum(categories$Freq)*100,2)

# 把原來的分類"名稱 百分比 %" 存回原來的名類名稱中 
categories$Var1 <- paste(categories$Var1, pct, "%", sep=" ")

#繪製圓餅圖 Piechart
pie(categories$Freq, labels=categories$Var1, main="政府資料開放平台資料資源", col=rainbow(length(categories$Var1)))


執行結果:

2017年1月16日 星期一

awk / sed 清除HTML Tags

# 移除空白行
sed '/^\s*$/d'

# 移除所有的HTML Tags,但 javascript <script> </script> 的程式碼內容則仍存在
sed 's/<[^>]*>//g'

# 移除所有的javascript Tags 與程式碼內容
awk 'BEGIN{RS="</script>"}/<script/{gsub("<script.*","")}{print}END{if(RS=="")print}'

# 移除所有的 javascript Tags 與程式碼內容和HTML Tags
awk 'BEGIN{RS="</script>"}/<script/{gsub("<script.*","")}{print}END{if(RS=="")print}' | sed 's/<[^>]*>//g'

2017年1月1日 星期日

excel - 分離字串中的中文與英文

點擊看大圖 (原圖)
利用 Excel 函數 LEN會傳回文字字串中的字元數、而LENB則會傳回用於代表文字字串中字元的位元組數。其中LENB 支援 DBCS 的語言包括日文、簡體中文、繁體中文及韓文,當 DBCS 語言設定為預設語言時,LENB 會將每個字元計算為 2 位元組。

藉由LENB的函數特性來計算屬於中文自述的長度。再搭配 LEFT() 和 RIGHT() 等文字函數來分離原文資料的中文與英文部分。

B欄:原文
C欄:=LEN(B欄)
D欄:=LENB(B欄)
E欄:=LEFT(B欄, (D欄-C欄)
F欄:=RIGHT(B欄, (C欄 - (D欄-C欄)))




參考資料:Excel函數 (官方)

2016年12月30日 星期五

Python爬蟲抓取台灣銀行的牌告匯率

參考來源:大數軟體有限公司 [爬蟲實戰] 如何撰寫Python爬蟲抓取台灣銀行的牌告匯率?


來源:https://www.youtube.com/watch?v=-c5rrzjsN34
程式碼範例:
import pandas
dfs = pandas.read_html('http://rate.bot.com.tw/xrt?Lang=zh-TW')
currency = dfs[0]
currency = currency.ix[:,0:5]
currency.columns = [u'幣別',u'現金匯率-本行買入',u'現金匯率-本行賣出',u'即期匯率-本行買入',u'即期匯率-本行賣出']
currency[u'幣別'] = currency[u'幣別'].str.extract('\((\w+)\)')
print(currency)
currency.to_excel('currency.xlsx')


執行結果:
     幣別 現金匯率-本行買入 現金匯率-本行賣出 即期匯率-本行買入 即期匯率-本行賣出
0   USD      31.9    32.442      32.2      32.3
1   HKD     4.008     4.203     4.128     4.188
2   GBP     38.53     40.46      39.4     39.82
3   AUD     22.98     23.64     23.17      23.4
4   CAD     23.53     24.27      23.8     24.02
5   SGD     21.78     22.56      22.2     22.38
6   CHF     30.85     31.91     31.38     31.67
7   JPY    0.2672    0.2782    0.2736    0.2776
8   ZAR         -         -      2.32       2.4
9   SEK      3.15      3.66      3.49      3.59
10  NZD     22.06     22.69      22.3      22.5
11  THB    0.7965    0.9395     0.885     0.925
12  PHP    0.6019    0.7349         -         -
13  IDR   0.00208   0.00278         -         -
14  EUR      33.2     34.35      33.7      34.1
15  KRW   0.02506   0.02896         -         -
16  VND   0.00104   0.00154         -         -
17  MYR     6.105     7.705         -         -
18  CNY      4.52     4.682     4.592     4.642