2022/06,江端さんの技術メモ

宇都宮ライトレールを単線にして分かりやすくしてみた件

の続編です

utsu_tram_db3(コスト値改ざん+LRT路線改ざんのデータベース)を使って、乗り換え地点を算出する、をやってみました。

utsu_tram_db3=# SELECT seq, node, edge FROM pgr_dijkstra('SELECT gid as id, source, target, cost FROM ways', 1200, 12000, directed:=false);
seq | node | edge
-----+-------+-------
1 | 1200 | 29995
2 | 1201 | 291
3 | 370 | 43579
4 | 18420 | 42387
5 | 1202 | 20089
6 | 1203 | 10026
7 | 1151 | 20094
8 | 1223 | 19060
9 | 30564 | 5625
10 | 18415 | 20069
11 | 1143 | 271
12 | 1141 | 9793
13 | 135 | 9794
14 | 1218 | 295
15 | 1221 | 297
16 | 18403 | 15478
17 | 18397 | 20191
18 | 1551 | 25527
19 | 18400 | 405
20 | 1531 | 418
21 | 1561 | 28006
22 | 26620 | 20199
23 | 1578 | 37996
24 | 26628 | 30131
25 | 1582 | 30133
26 | 1585 | 28213
27 | 27344 | 29873
28 | 733 | 58915
29 | 42213 | 48439
30 | 60 | 9780     最初の0より大きくて100より小さい正数が2つ連続で出てくる時 
31 | 59 | 39645   ← ここがLRTの乗車ノード
32 | 57 | 42199
33 | 56 | 39644
34 | 54 | 39643
35 | 52 | 48847
36 | 43717 | 60590
37 | 43716 | 60589
38 | 49 | 39641
39 | 48 | 39640
40 | 33440 | 44769
41 | 46 | 39639
42 | 44 | 39637
43 | 41 | 48374
44 | 42003 | 58686
45 | 42004 | 58687
46 | 42941 | 59674
47 | 42942 | 59675
48 | 41986 | 58669
49 | 39 | 48373
50 | 41997 | 58680
51 | 42001 | 58684
52 | 42002 | 58685
53 | 38 | 48588
54 | 42665 | 59406
55 | 42943 | 59676
56 | 42143 | 58846
57 | 41988 | 58671
58 | 41989 | 58672
59 | 41998 | 58681
60 | 33444 | 48960
61 | 42005 | 58688
62 | 41999 | 58682
63 | 42000 | 58683
64 | 42007 | 58690
65 | 42006 | 58689
66 | 42009 | 58692
67 | 41990 | 58673
68 | 42008 | 58691
69 | 42654 | 59396
70 | 33441 | 44770
71 | 36 | 39634
72 | 34 | 39633
73 | 62 | 39646
74 | 31 | 48368
75 | 41991 | 58674
76 | 30 | 48369
77 | 41992 | 58675
78 | 41993 | 58676
79 | 41994 | 58677
80 | 42653 | 59395
81 | 42010 | 58693
82 | 42011 | 58694
83 | 27 | 9777  ← ここがLRTの降車ノード
84 | 28 | 9776  最初の0より大きくて100より小さい正数が2つ連続で出てくる時 
85 | 20482 | 45133
86 | 33950 | 49670
87 | 13270 | 40742
88 | 13515 | 43318
89 | 11988 | 40674
90 | 12000 | -1
(90 rows)

さて、この乗車ポイントと降車ポイントをどうやって探すか(できるだけ手を抜いて)。

結局、こうなりました。

// go get github.com/lib/pq を忘れずに
// go run main10.go

/*
	経路の分離点を抽出してみる
*/

package main

import (
	"database/sql"
	"fmt"
	"log"

	_ "github.com/lib/pq"
)

func main() {
	// utsu_tram_db3をオープン
	db, err := sql.Open("postgres", "user=postgres password=password host=localhost port=15432 dbname=utsu_tram_db3 sslmode=disable")
	if err != nil {
		log.Fatal("OpenError: ", err)
	}
	defer db.Close()

	// node番号 1200 から 12000 までのダイクストラ計算を行う
	str := "SELECT seq, node, edge FROM pgr_dijkstra('SELECT gid as id, source, target, cost FROM ways', 1200, 12000, directed:=false)"
	rows, err := db.Query(str)

	if err != nil {
		log.Fatal(err)
	}
	defer rows.Close()

	var seq, node, edge int
	var add_node_num = []int{} // 可変長配列

	for rows.Next() {
		if err := rows.Scan(&seq, &node, &edge); err != nil {
			fmt.Println(err)
		}

		// ルート分離は、0<x<70の値が出てきたら、駅のノードである、とする。
		// 何しろ、私が地図を改ざんしたのだから間違いない
		// で、その値を全部格納する

		if node > 0 && node < 70 {
			add_node_num = append(add_node_num, node)
		}
	}

	if len(add_node_num) != 0 { // 見つけることができたら最初から2番目と、最後から2番目の番号(0 < X < 70)を取り出す
		first_node := add_node_num[1]
		last_node := add_node_num[len(add_node_num)-2]

		fmt.Println("first_node:", first_node, "last_node:", last_node)
	} else { // 見つけることができなかったら
		fmt.Println("No node")
	}
}

 結果
c:\Users\ebata\goga\1-9-9-1\others>go run main10.go
first_node: 59 last_node: 27

2022/06,江端さんの技術メモ

version: '3'

services:
  db:
    image: postgres:14
    container_name: postgres

    ports:
      - 15432:5432
    volumes:
      - ./stock_db:/stock_db
      - db-data:/var/lib/postgresql/data
    environment:
      - POSTGRES_PASSWORD=password
volumes:
  db-data:

# stock_dbというディレクトリを掘っておくこと
# docker exec -it postgres bash // コンテナへのログイン方法

ーーーー

>docker-compose start

ーーーー

>docker exec -it postgres bash

ーーーー

$ gem install csv2psql

ーーーー

CREATE TABLE stock(Date varchar(10), Open numeric, High numeric, Low numeric, Close numeric, Ave5day numeric, Ave25day numeric, Ave75day numeric, VWAP numeric, Vol numeric, Vol5day numeric, Vol25day numeric);

ーーーー

hitachi=# CREATE TABLE stock(Date varchar(10), Open int, High int, Low int, Close int, Ave5day int, Ave25day int, Ave75day int, VWA
P int, Vol int, Vol5day int, Vol25day int);
CREATE TABLE
hitachi=# \copy stock from '/stock_db/hitachi.csv' with csv delimiter ',';
COPY 245
hitachi=# select * from stock;
    date    | open | high | low  | close | ave5day | ave25day | ave75day | vwap |   vol    | vol5day | vol25day
------------+------+------+------+-------+---------+----------+----------+------+----------+---------+----------
 2022/6/3   | 6860 | 6897 | 6781 |  6856 |    6791 |     6492 |     6021 | 6840 |  1942500 | 2547480 |  2870752
 2022/6/2   | 6795 | 6802 | 6715 |  6797 |    6752 |     6460 |     6009 | 6778 |  1654700 | 2506700 |  2903484
 2022/6/1   | 6686 | 6796 | 6671 |  6796 |    6712 |     6431 |     5998 | 6752 |  1575500 | 2560260 |  2931012
 2022/5/31  | 6750 | 6798 | 6706 |  6725 |    6678 |     6402 |     5986 | 6735 |  3122200 | 2775060 |  2944456

 

2022/06,江端さんの技術メモ

SBI証券では、HYPER SBIというSBI証券が提供する取引ソフトを利用することでダウンロードが可能です。これまで、HYPER SBIについては条件を満たしていない場合だと月額利用料を支払う必要がありましたが、2021/10/2(土)より待望の無料化が実現しました。

との事でしたので、シミュレーション用にこのデータを頂いてくることにしました。

ちなみに、私の環境はWindows10です。


まずSBI証券のサイトにログインして、

HYPER SBI 2(国内株式版)をダウンロードします(HYPER SBIはサービス終了となるようです)

あとは、普通のアプリを同じようにインストールすればOKです。

HYPER SBI2を起動すると、こんな画面が出てきます(画面というよりはメニュー)

でてきたチャートに、6501と入力(ただの例題です)

で、「時系列」ボタンを押下します。

個別銘柄に「6501」→「日足」→「2021/06/03」(適当でいい) → 「2022/06/03」(適当でいい)→「照会」→「CSVエクスポート」

以下は、csvファイルをエクセルで表示したものになります。

あとは、これをDBに格納すれば、データを使い倒すことができます。

例:「PostgreSQLでCSVファイルをインポート/エクスポートする方法」

うーん、最近、証券会社もデータの大盤振舞いをしていて助かります。


■投資信託の情報の取得方法