2017年12月12日 星期二

Windows 10 64bits + Arduino IDE + ESP8266 (ESP-01)


  1. Arduino.cc 下載最新版 Arduino IDE (以1.8.5版為例)
  2. 將 arduino-1.8.5-windows.zip 解壓縮至指定目錄下,安裝好 Arduino IDE
  3. 啟動 Arduino IDE,開啟「檔案 > 偏好設定 (preferences)」 視窗
  4. 偏好設定
  5. 在「額外的開發版管理員網址」(Additional Board Manager) 輸入網址:
  6. 開啟「工具 (Tools) > 開發板 (Board) > 開發板管理員 (Boards Manager)」後,搜尋 "esp" 並且安裝 esp8266 套件
    安裝 esp8266 (可以看見其實有錯誤發生)

    正常的套件下載安裝畫面
  7. 安裝完成後,下次就能選擇 ESP8266 開發板,進行IDE程式開發與上傳功能


後記:
  • 如果下載時發生了"下載http://downloads.arduino.cc/packages/package_index.jsp時發生錯誤"的訊息,可以在「檔案 > 偏好設定 > 網路」設定 proxy 來解決。
  • 網路上有些說法是設定 JAVA IPv4Stack=true 即可: setx _JAVA_OPTIONS -Djava.net.preferIPv4Stack=true
  • 不過對我來說似乎沒有用,反而是最簡單的 proxy 解決了我的問題。
  • 下載套件時的錯誤訊息

    設定 Java IPv4Stack ,不過對我來說沒用處

    設定 proxy

2017年9月19日 星期二

新 iPhone 是否會熱銷?

Google趨勢比較結果

市場是不少看衰此次 iPhone 8/iPhone X的消息與傳言,就連股市裏相關的蘋果概念股一時間股價也被看空。那到底銷售情況會如何呢?

沒有甚麼大數據分析能力,但Google Trends比較一下或許能告訴我們一些答案

#

2017年6月4日 星期日

取得台北火車站附近最熱門的打卡點 (留給自己參考)

* 參考來源:苗栗最熱門的打卡點? Andrew Tang

  • 修改:
    • gcode將"台北車站"字串以iconv從big5編碼為utf8
    • 取得個地點打卡次數時,順便將location寫入fields取回lat, lng等地理座標資訊
install.packages("ggmap")
install.packages("leaflet")
install.packages("DT")
install.packages("jsonlite")
install.packages("curl")
install.packages("dplyr")

library(ggmap)
library(leaflet)
library(DT)
options(stringsAsFactors = F)

(myplace <- geocode(iconv("台北車站", "big5", "utf8")))
顯示台北火車站座標結果
      lon      lat
1 121.517 25.04774
繪製出台北火車站方圓5公里(radius=5000)的範圍
leaflet() %>% addTiles() %>% 
  fitBounds(0, 40, 10, 50) %>% 
  setView(myplace$lon, myplace$lat, zoom = 12) %>% 
  addCircles(myplace$lon, myplace$lat, radius = 5000)
台北火車站方圓5公里
至Facebook 圖形API測試工具 取得程式權杖(token)
library(jsonlite)
經緯度 <- paste(myplace$lat, myplace$lon, sep=",")
方圓幾公尺 <- 5 * 1000
token <- "EAACEdEose0(略)ppeaL"
url <- sprintf("https://graph.facebook.com/search?type=place¢er=%s&distance=%s&limit=50000&access_token=%s", 經緯度, 方圓幾公尺, token)

tmp <- fromJSON(url)
result <- tmp$data[c("category","name","id")]
while(!is.null(tmp$paging$`next`)){
  tmp <- fromJSON(tmp$paging$`next`)
  result <- rbind(result, tmp$data[c("category","name","id")])
}

datatable(result, 
          extensions = 'Scroller', options = list(
          deferRender = TRUE,
          scrollY = 500,
          scroller = TRUE
        ))
##執行結果

取得每個地點的 名稱(name)、打卡數(checkins)、地點類別(category)、和座標資料(location)
library(dplyr)
fields <- "name,checkins,category,location"
checkin <- sapply(result$id, function(id){
  url <- sprintf("https://graph.facebook.com/%s?fields=%s&access_token=%s", id, fields, token)
  #unlist(fromJSON(url))
  fromJSON(url)
})

mycheckin <- as.data.frame(t(checkin))
mycheckin$checkins <- as.integer(mycheckin$checkins)
mycheckin <- mycheckin[order(mycheckin$checkins, decreasing = T),]
row.names(mycheckin) <- NULL
datatable(mycheckin, 
          extensions = 'Scroller', options = list(
          deferRender = TRUE,
          scrollY = 200,
          scroller = TRUE
        ))
##執行結果
#

2017年5月10日 星期三

python dictionary items 未依序排列問題

import collections

s = {}
for i in range(0,36,2):
    s.update({i:str(i)*10})

sorted_s = collections.OrderedDict(sorted(s.items()))
print(s)
print('-------')
print(sorted_s)
print('=======')
for i, j in sorted_s.items():
    print('%s:%s' % (i,j))
將 dictionary s 重新排序後, 輸出次序就能正常囉~
{0: '0000000000', 32: '32323232323232323232', 2: '2222222222', 4: '4444444444', 6: '6666666666', 8: '8888888888', 10: '10101010101010101010', 12: '12121212121212121212', 34: '34343434343434343434', 14: '14141414141414141414', 16: '16161616161616161616', 18: '18181818181818181818', 20: '20202020202020202020', 22: '22222222222222222222', 24: '24242424242424242424', 26: '26262626262626262626', 28: '28282828282828282828', 30: '30303030303030303030'}
-------
OrderedDict([(0, '0000000000'), (2, '2222222222'), (4, '4444444444'), (6, '6666666666'), (8, '8888888888'), (10, '10101010101010101010'), (12, '12121212121212121212'), (14, '14141414141414141414'), (16, '16161616161616161616'), (18, '18181818181818181818'), (20, '20202020202020202020'), (22, '22222222222222222222'), (24, '24242424242424242424'), (26, '26262626262626262626'), (28, '28282828282828282828'), (30, '30303030303030303030'), (32, '32323232323232323232'), (34, '34343434343434343434')])
=======
0:0000000000
2:2222222222
4:4444444444
6:6666666666
8:8888888888
10:10101010101010101010
12:12121212121212121212
14:14141414141414141414
16:16161616161616161616
18:18181818181818181818
20:20202020202020202020
22:22222222222222222222
24:24242424242424242424
26:26262626262626262626
28:28282828282828282828
30:30303030303030303030
32:32323232323232323232
34:34343434343434343434

2017年4月27日 星期四

Tensorflow 集合


Tensorflow 是運用 data flow graphs 觀念進行數值計算的開源程式庫,經常被應用在機器學習和深度神經網路研究等機器智慧研究領域上。

2017年4月26日 星期三

Windows 10 + NVIDIA GPU + TensorFlow


  1. 參考 Install TensorFlow with GPU for Windows 10
  2. 強烈建議:
    • 確實檢查自己的NVIDIA顯示卡是否支援?官網
    • Windows設定 %CUDA_HOME% 和添加CUDA相關目錄至%PATH%環境變數
    • Anaconda 同時安裝 Python2 和 Python3 兩版本:下載連結
    • 建立 Conda tensorflow-gpu 虛擬環境時,記得 Python3版本為 3.5
      • conda create -n tensorflow-gpu python=3.5 (暫時別選3.6)
    • activate tensorflow-gpu 後,安裝 numbapro 套件
    • 開啟 jupyter notebook 後,執行下列 python3 code:參考網站
    • from numbapro import cuda, vectorize, guvectorize, check_cuda
      from numbapro import void, uint8 , uint32, uint64, int32, int64, float32, float64, f8
      import numpy as np
      check_cuda()
      
    • 確認執行結果是否類似下列結果,最後出現的是 True !:
    • ------------------------------libraries detection-------------------------------
      Finding cublas
       located at d:\Anaconda3\envs\tensorflow-gpu\DLLs\cublas64_70.dll
       trying to open library... ok
      Finding cusparse
       located at d:\Anaconda3\envs\tensorflow-gpu\DLLs\cusparse64_70.dll
       trying to open library... ok
      Finding cufft
       located at d:\Anaconda3\envs\tensorflow-gpu\DLLs\cufft64_70.dll
       trying to open library... ok
      Finding curand
       located at d:\Anaconda3\envs\tensorflow-gpu\DLLs\curand64_70.dll
       trying to open library... ok
      Finding nvvm
       located at d:\Anaconda3\envs\tensorflow-gpu\DLLs\nvvm64_30_0.dll
       trying to open library... ok
       finding libdevice for compute_20... ok
       finding libdevice for compute_30... ok
       finding libdevice for compute_35... ok
      -------------------------------hardware detection-------------------------------
      Found 2 CUDA devices
      id 0    b'GeForce GTX 1060 6GB'                              [SUPPORTED]
                            compute capability: 6.1
                                 pci device id: 0
                                    pci bus id: 2
      id 1      b'GeForce GTX 650'                              [SUPPORTED]
                            compute capability: 3.0
                                 pci device id: 0
                                    pci bus id: 1
      Summary:
       2/2 devices are supported
      PASSED
      Out[1]:
      True
      
  3. 兩張顯示卡的GPU數量不同,另外在Windows環境設定TF_MIN_GPU_MULTIPROCESSOR_COUNT=2 錯誤訊息才消失
希望大家能少走點冤枉路...:P #

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
另外一種方式也是可以的...
pip install -U $(pip3 freeze |awk '{split($0,a,"=="); print a[1]}')

pip3 install -U $(pip3 freeze |awk '{split($0,a,"=="); print a[1]}')
#

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函數 (官方)