銘柄同士の相関を取ってみるテスト
なんぞこれ?
↓ ここの株価データを使って、銘柄総当たりの相関を調べてみました http://softreed.la.coocan.jp/data.htm
なんか面白い発見ないかな。って期待しながら 出てきたデータを眺めて楽しむことができます。
はい。それだけです。
前準備
- gaushe をインストールしておいてください
- 上記サイトからデータを取ってきて 解凍。csvを適当な場所へ。
- csvから銘柄リストを作っておきます
-
cat 201804.csv | cut -d ',' -f 2 | sort | uniq > code.lst
実行
以下ファイルを適当な名前で保存。実行すると標準出力に 以下フォーマットでデータがひねり出されていきます 「銘柄1」「銘柄2」「相関係数」
calc.data とでも名前を付けたファイルにリダイレクトして保管しておきましょう。 ※めちゃくちゃ時間がかかります。2日くらいw
#!/usr/bin/env gosh (use file.util) (use text.tr) ;; 合計 (define sum (lambda (x) (apply + x))) ;; 平均 (define (ave lst) (/ (sum lst) (length lst))) ;; 共分散 (define (covariance lst) (- (ave (map (lambda (item) (* (car item) (cdr item))) lst)) (* (ave (map car lst)) (ave (map cdr lst))))) ;; 標準偏差 (define (standard-dev lst) (define ave-lst (ave lst)) (ave (map (lambda (x) (expt (- x ave-lst) 2)) lst))) ;; 相関関数 (define (correctionFn lst) (define std (* (standard-dev (map car lst)) (standard-dev (map cdr lst)))) (cond ((zero? std) 9999) (else (inexact (/ (covariance lst) std))))) ;; 銘柄組み合わせ作成 (define (combination-pattern l) (define (pair-create top lst) (cond ((null? lst) '()) (else (cons (cons top (car lst)) (pair-create top (cdr lst)))))) (cond ((null? l) '()) (else (append (pair-create (car l) (cdr l)) (combination-pattern (cdr l)))))) ;; 銘柄コードフィルタ (define (create-filter no) (lambda (lst) (cond ((null? lst) '#f) (else (equal? (cadr lst) no))))) ;; 株価データ(一ヶ月分全銘柄) (define kabu-lst (map (lambda (str) (string-split str ",")) (file->string-list "./data/201804.csv"))) ;; 銘柄コードリスト (define code-lst (file->string-list "./data/code.lst")) ;; データ生成 (define (marge-data lst1 lst2) (cond ((null? lst1) '()) ((null? lst2) '()) (else (cons (cons (string->number (car lst1)) (string->number (car lst2))) (marge-data (cdr lst1) (cdr lst2)))))) ;; 相関関数計算 (define (calcCorrectionFn no1 no2) (print (format "~A ~A ~A" no1 no2 (correctionFn (marge-data (map caddr (filter (create-filter no1) kabu-lst)) (map caddr (filter (create-filter no2) kabu-lst))))))) (define (all-calc lst) (cond ((null? lst) '()) (else (calcCorrectionFn (caar lst) (cdar lst)) (all-calc (cdr lst))))) ;; 組み合わせリスト (define cmb-lst (combination-pattern code-lst)) (all-calc cmb-lst)
楽しみ方
出てきたデータはこんな感じで楽しみます。
head -n 1000 calc.data | awk '{printf"%.10f %d %d \n", $3,$1,$2}' | sort -r
gaushe で共分散を計算してみる
数学苦手なワシ。以下のページを参考に共分散を学ぶ https://mathtrain.jp/covariance
;; 国語・数学 の点数セット (define lst '((50 50) (50 70) (80 60) (70 90) (90 100))) (define (sum lst) (cond ((null? lst) 0) (#t (+ (car lst) (sum (cdr lst))))) (define (ave lst) (/ (sum lst) (length lst))) (define (first-list lst) (map car lst)) ;; 国語 (define (second-list lst) (map cadr lst)) ;; 数学 (ave (first-list lst)) ;; 国語 ave (ave (second-list lst)) ;; 数学 ave ;;共分散 計算方法 1 (ave (map (lambda (item) (* (- (car item) (ave (first-list lst))) (- (cadr item) (ave (second-list lst))))) lst)) ;;共分散 計算方法2 (- (ave (map (lambda (item) (* (car item) (cadr item))) lst)) (* (ave (first-list lst)) (ave (second-list lst))))
ついでに標準偏差、相関関数も。
;; 共分散 (define (covariance lst) (- (ave (map (lambda (item) (* (car item) (cadr item))) lst)) (* (ave (map car lst)) (ave (map cadr lst))))) ;; 標準偏差 (define (standard-dev lst) (define ave-lst (ave lst)) (ave (map (lambda (x) (expt (- x ave-lst) 2)) lst))) ;; 相関関数 (define (correctionFn lst) (inexact (/ (covariance lst) (* (standard-dev (map car lst)) (standard-dev (map cadr lst))))))
Ubuntu18.04 ネットワーク設定
VirtualBox の Ubuntu18.04 にネットワーク設定をしたときのメモ。 ブリッジアダプタを追加した後に起動。以下の設定をし再起動する
/etc/netplan/50-cloud-init.yaml
# This file is generated from information provided by # the datasource. Changes to it will not persist across an instance. # To disable cloud-init's network configuration capabilities, write a file # /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following: # network: {config: disabled} network: ethernets: enp0s3: addresses: [] dhcp4: true optional: true + enp0s8: + addresses: [] + dhcp4: true + optional: true version: 2
言語処理100本ノックを Gauche でやってみる(1)
こんなの見つけましたのでGaucheでやってみようかと思いました www.cl.ecei.tohoku.ac.jp
第一章 4番までなんとかやってみました。 超時間かかっちゃった・・・
コード
以下コード。 汚いなぁ orz
#!/usr/bin/env gosh (use srfi-1) (use srfi-13) (use gauche.sequence) (use gauche.collection) (use text.tree) (define (nlp100-sample) "hello") (define (nlp100-00) (list->string (reverse (string->list "stressed")))) (define (nlp100-01) (define (getchar s i) (subseq s (- i 1) i)) (define (getstr str lst) (map (lambda (n) (getchar str n)) lst)) (tree->string (getstr "パタトクカシーー" '#(1 3 5 7)))) (define (nlp100-02) (define (getchar s i) (subseq s (- i 1) i)) (define (getstr str1 str2) (cond ((null? str1) '()) (else (cons (cons (car str1) (car str2)) (getstr (cdr str1) (cdr str2)))))) (tree->string (getstr (string->list "パトカー") (string->list "タクシー")))) (define (nlp100-03) (define (getchar lst) (cond ((null? lst) '()) (else (cons (string-length (string-filter char-alphabetic? (car lst))) (getchar (cdr lst)))))) (tree->string (getchar (string-split "Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics." " ")))) (define (nlp100-04) (define (mkalist lst) (cond ((null? lst) '()) ((assoc (subseq (car lst) 0 1) (mkalist (cdr lst))) (acons (subseq (car lst) 0 2) (car lst) (mkalist (cdr lst)))) (else (acons (subseq (car lst) 0 1) (car lst) (mkalist (cdr lst)))))) (mkalist (string-split "Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can." " ") ))
テストも書いたお
#!/usr/bin/env gosh (use gauche.test) (test-start "ch01-01") (load "./main.gosh") (test-section "01") (test "nlp100-sample" "hello" nlp100-sample) (test "nlp100-00" "desserts" nlp100-00) (test "nlp100-01" "パトカー" nlp100-01) (test "nlp100-02" "パタトクカシーー" nlp100-02) (test "nlp100-03" "314159265358979" nlp100-03) (test "nlp100-04" '(("Hi" . "Hi") ("H" . "He") ("L" . "Lied") ("Be" . "Because") ("B" . "Boron") ("Co" . "Could") ("No" . "Not") ("O" . "Oxidize") ("F" . "Fluorine.") ("Ne" . "New") ("N" . "Nations") ("M" . "Might") ("Al" . "Also") ("Si" . "Sign") ("P" . "Peace") ("S" . "Security") ("Cl" . "Clause.") ("A" . "Arthur") ("K" . "King") ("C" . "Can.")) nlp100-04)
結果
~/work/repos/nlp100-gosh/ch01$ ./test.gosh Testing ch01-01 ... <01>--------------------------------------------------------------------------- test nlp100-sample, expects "hello" ==> ok test nlp100-00, expects "desserts" ==> ok test nlp100-01, expects "パトカー" ==> ok test nlp100-02, expects "パタトクカシーー" ==> ok test nlp100-03, expects "314159265358979" ==> ok test nlp100-04, expects (("Hi" . "Hi") ("H" . "He") ("L" . "Lied") ("Be" . "Because") ("B" . "Boron") ("Co" . "Could") ("No" . "Not") ("O" . "Oxidize") ("F" . "Fluorine.") ("Ne" . "New") ("N" . "Nations") ("M" . "Might") ("Al" . "Also") ("Si" . "Sign") ("P" . "Peace") ("S" . "Security") ("Cl" . "Clause.") ("A" . "Arthur") ("K" . "King") ("C" . "Can.")) ==> ok
つづく。(かも
keycloak のビルドとテストをしてみた(うまくいかなかった)
keycloak の ビルド、テスト方法について調べたのでメモ。
現状ではテストが上手く動かすことができてないのですが
とりあえず今までのところまでを記録しておきます
コンパイルまで
keycloak/README.md at master · keycloak/keycloak · GitHub
- git clone
$ git clone https://github.com/keycloak/keycloak.git $ cd keycloak
- compile
mvn install -Pdistribution -DskipTests=true
- run
$ mvn -f testsuite/utils/pom.xml exec:java -Pkeycloak-server
テスト実行
keycloak/HOW-TO-RUN.md at master · keycloak/keycloak · GitHub
# Prepare servers mvn -f testsuite/integration-arquillian/servers/pom.xml clean install \ -Pauth-server-wildfly \ -Papp-server-wildfly
$ curl -O http://origin-repository.jboss.org/nexus/content/groups/m2-proxy/org/jboss/fuse/jboss-fuse-karaf/6.3.0.redhat-328/jboss-fuse-karaf-6.3.0.redhat-328.zip $ mv boss-fuse-karaf-6.3.0.redhat-328.zip $DOWNLOAD_DIR $ mvn install:install-file \ -DgroupId=org.jboss.fuse \ -DartifactId=jboss-fuse-karaf \ -Dversion=6.3.0.redhat-328 \ -Dpackaging=zip \ -Dfile=$DOWNLOAD_DIR/jboss-fuse-karaf-6.3.0.redhat-328.zip
$ mvn -f testsuite/integration-arquillian/servers \ clean install \ -Pauth-server-wildfly \ -Papp-server-fuse63 \ -Dfuse63.version=6.3.0.redhat-328 \ -Dapp.server.karaf.update.config=true \ -Dmaven.local.settings=$HOME/.m2/settings.xml \ -Drepositories=,http://download.eng.bos.redhat.com/brewroot/repos/sso-7.1-build/latest/maven/ \ -Dmaven.repo.local=$HOME/.m2/repository
失敗
ここまでやったら 以下のエラー。
Updating Config - Keycloak authentication ps: illegal argument: o usage: ps [-AaCcEefhjlMmrSTvwXx] [-O fmt | -o fmt] [-G gid[,gid...]] [-u] [-p pid[,pid...]] [-t tty[,tty...]] [-U user[,user...]] ps [-L]
付箋画像の抽出を試してみた(まだうまくいってない)
ホワイトボードの写真から付箋画像を抽出したいって話を聞いて
それOpenCVでできるんじゃないかと一生懸命ググってみました。
以下記事を参考に 試しにやってみた記録です。 qiita.com www.blog.umentu.work
環境
Dockerコンテナ (https://hub.docker.com/r/moremagic/jupyter/)
- Ubuntu + OpenCV3.4 + Python3 + jupyter
- Opencv3.1 から 3.4 にVersionをあげるのが大変だった
まず画像を表示してみる
%matplotlib inline import cv2 # opencv import matplotlib.pyplot as plt # matplotlibの描画系 fn_img = "test.jpeg" # 画像ファイル名 img = cv2.imread(fn_img) # 画像を読み込む # opencvの処理系では (B,G,R) で管理されているが、 # matplotlib では (R,G,B) で画像を認識するので、 # 表示用に一旦変換する show_img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) plt.imshow(show_img) #表示
- 付箋を抽出してみる
# 画像差分を算出 def createDiffImg(img, base_img): img_diff = cv2.absdiff(base_img, img) return cv2.threshold(img_diff, 20, 255, cv2.THRESH_BINARY)[1] # 差分を二値化 def show_hoge(img_diff): return cv2.threshold(img_diff, 0, 255, cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU)[1] im_gray = cv2.cvtColor(show_img, cv2.COLOR_BGR2GRAY) # 元画像を RGBに分割 RGB =cv2.split(show_img) Blue = show_hoge(createDiffImg(RGB[0], im_gray)) Green = show_hoge(createDiffImg(RGB[1], im_gray)) Red = show_hoge(createDiffImg(RGB[2], im_gray)) #plt.imshow( Green ) aaa = cv2.addWeighted(Blue,0.5,Green,0.5,0) aaa = cv2.addWeighted(aaa,0.5,Red,0.5,0) plt.imshow( aaa )
- 画像を切り出してみる
def getRectByPoints(points): # prepare simple array points = list(map(lambda x: x[0], points)) points = sorted(points, key=lambda x:x[1]) top_points = sorted(points[:2], key=lambda x:x[0]) bottom_points = sorted(points[2:4], key=lambda x:x[0]) points = top_points + bottom_points left = min(points[0][0], points[2][0]) right = max(points[1][0], points[3][0]) top = min(points[0][1], points[1][1]) bottom = max(points[2][1], points[3][1]) return (top, bottom, left, right) def getPartImageByRect(rect, img): return img[rect[0]:rect[1], rect[2]:rect[3]] contours = cv2.findContours(aaa, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)[1] # filtered with area over (all area / 100 ) th_area = aaa.shape[0] * aaa.shape[1] / 100 contours_large = list(filter(lambda c:cv2.contourArea(c) > th_area, contours)) outputs = [] rects = [] approxes = [] for (i,cnt) in enumerate(contours_large): arclen = cv2.arcLength(cnt, True) approx = cv2.approxPolyDP(cnt, 0.02*arclen, True) if len(approx) < 4: continue approxes.append(approx) rect = getRectByPoints(approx) rects.append(rect) outputs.append(getPartImageByRect(rect, show_img)) cv2.imwrite(str(i)+'.jpg', getPartImageByRect(rect, show_img))
結果
付箋を四角く フィルタをかけることはできたっぽいですが
二値画像にした(つもり)なのに なんか超黄色くなってるし
一部しか抽出できませんでした・・・orz
もうちょっとちゃんと勉強してみないとだめっぽいです。
※ 続くかも