カテゴリー
CurlとJqを使ってgithubレポジトリ上のcsvデータを取得する 〜 株価日足編
※ 当ページには【広告/PR】を含む場合があります。
2021/03/23
ローカルで管理している日足csvデータをオンラインで管理・取得するときに、「あの銘柄のデータはどこのどのフォルダーだったかな...すぐに思い出せない😅」ということがしばしば出てきます。
いっそのことgithub上でデータ管理可能なプロジェクトとしてcsvデータも置いておくのはどうだろう、という使い方も人によってはあると思います。
そんなときCurlとJqコマンドを組み合わせると、ターミナルから効率的なデータ操作を行うことができます。
今回はcurlでオンラインプロジェクトからGETしたcsvデータを、jqでjson形式に整理・変形して捌く方法を紹介します。
Curlで生csvを取得
githubから生のテキストデータにアクセスするためには以下のような用法でcurlを使います。
$ curl -sS https://raw.githubusercontent.com/[ユーザー名]/[レポジトリ名]/[ブランチ名]/[ファイルまでのパス]
ついでにcurlのオプションですが、
-s
また
-S
man curl
では実際に試してみましょう。
具体例として、弊社のオープンレポジトリにおいた昨年の1月からの日経平均データを
1001.csv
$ curl -sS https://raw.githubusercontent.com/tacoskingdom/commonBlogMaterial/main/deep-tacopots/1001.csv
2020-01-06,23319,23365,23148,23205,1219710000
2020-01-07,23320,23577,23299,23576,1157950000
#....
2021-03-22,29444,29472,29107,29174,1384260000
という生のcsvレスポンスが返ってくるはずです。
なお、この日足データの書式は
日付,始値,高値,低値,終値,出来高
Jqでレスポンスの整形処理
jq インストール
以前、jqによるcsvからjsonへの変換のコツとして以下のリンクの記事で考え方のポイントを解説していました。
念の為、もう一度jqでのcsvからjsonへの変換のスクリプトを振り返ってみると、
$ cat [csv形式のテキスト] | jq -sR '
#👇配列化のために[...]でラップ
[
#👇改行位置でテキストを分割し、分割した要素で配列に変換
split("\n")[]
#👇要素が空文字の場合には除外
| select(length > 0)
#👇要素のテキストをさらにコンマ切りで配列に変換
| split(",")
]
#👇mapで配列の要素(の配列)をjson要素に変換
| map({"A": .[0], "B": .[1], "C": .[2]})
'
というような配列化とmapメソッドを上手く組み合わせることでjson化していました。
このテクニックを利用して先程のcsvファイルもjsonオブジェクトの配列にしてみます。
$ curl -sS https://raw.githubusercontent.com/tacoskingdom/commonBlogMaterial/main/deep-tacopots/1001.csv | jq -sR '
[ split("\n")[] | select(length > 0) | split(",") ]
| map({"日付": .[0], "初値": .[1], "高値": .[2], "低値": .[3], "終値": .[4], "出来高": .[5]})
'
#👇出力
[
#...中略
{
"日付": "2021-03-22",
"初値": "29444",
"高値": "29472",
"低値": "29107",
"終値": "29174",
"出来高": "1384260000"
}
]
のように利用しやすいjson形式に変換することができるようになりました。
まとめ
今回はcsvデータをgithubに管理・アクセスしやすく録り溜めておけるようにしておきたい場合に活用できるcurl+jqの組み合わせコマンドのもっとも単純なレポジトリへのGETのやり方を解説してみました。
curlとjqを前段に噛ませることで、javascriptのネイティブアプリやnodejsコマンドなどにも引数や保存したjsonファイルなどで利用できやすくなったと思います。
今後はもっと株式テクニカル分析などの応用的な使いこなしを題材に取り上げてみたいと思います。
記事を書いた人
ナンデモ系エンジニア
主にAngularでフロントエンド開発することが多いです。 開発環境はLinuxメインで進めているので、シェルコマンドも多用しております。 コツコツとプログラミングするのが好きな人間です。
カテゴリー