BIXLERのログ

いろいろ記録します。

macOSで大量のフォルダを一度に作る方法(フォルダ名のテキストファイルとcatコマンドを使った方法)

macOSで大量のフォルダを作成する方法の一つを以下に記載します。簡単に記載すると、

  1. フォルダ名の一覧を作成
  2. フォルダ名の一覧をテキストファイルで用意
  3. ターミナルで cat フォルダ名一覧.txt | xargs mkdir を実行

のような流れになります。

実際の例を以下に記載します。

0. やりたかったこと

東京証券取引所に上場している企業の銘柄コードごとにフォルダを作成する。

1. フォルダ名の一覧を作成

日本取引所のホームページにある東証上場銘柄一覧を加工してフォルダ名の一覧を作成しました。

 

東証上場銘柄一覧

東証上場銘柄一覧(2021年3月末)

フォルダ名は「銘柄コード_銘柄名_市場を表すコード」にすることにします。市場を表すコードは、市場・商品区分から変換しました。(例:市場第一部→T1)

ダウンロードした一覧にはETFなども含まれているので、それらをカテゴリなどを使ってデータを削除し、株式のみの一覧を別シートに作成しました。

次に、市場を表すコードの列を追加し、市場・商品区分からif関数で変換しました。

銘柄コードと銘柄名、市場を表すコードを&でつなぎ合わせ、フォルダ名の一覧の元データが完成です。

銘柄コード銘柄名

フォルダ名の一覧の元データ(赤枠)
2. フォルダ名の一覧をテキストファイルで用意

Launchpadを開き、その他の中にあるテキストエディットを開きます。 ファイル選択のためのFinderが表示されたら、左下段にある新規書類をクリック。

macOSテキストエディットアプリ

テキストエディットアプリ

名称未設定というファイルが立ち上がったら、出力の設定をテキストファイルに変更します。テキストエディットのアプリケーションメニュー -> フォーマット -> 標準テキストにする をクリックします。

標準テキストにする

標準テキストにする

そうすると、テキストエディタのタイトル部分の表示が変わり、.txtファイルとして保存できるようになります。 

テキストエディットのタイトルが変わる

タイトルが変わる

ここに1.のステップで作成したフォルダ名の一覧を貼り付けます。Numbersの列を丸ごとコピーして、テキストエディットに貼り付けます。

情報の貼り付け

フォルダ名の一覧を貼り付けた後

名前をつけて保存します。今回は SecCodeNameList.txt というファイル名にしました。


3. ターミナルで cat フォルダ名一覧.txt | xargs mkdir を実行

フォルダを一度に作成する場所に SecCodeNameList.txt を移動します。私の場合は、04_Projectフォルダの下にあるFoldersというフォルダの中に移動しました。

ターミナルを起動して対象のフォルダに移動します。

次に cat SecCodeNameList.txt | xargs mkdir を実行します。

ターミナルcatコマンド

ターミナルの操作

そうすると作成したい名前のフォルダがズラリと現れます。

catコマンド実行結果

実行結果

後日やりたいことが変わってしまったため、このフォルダは不要になってしまいまいた。しかし、手作業でやったら途方もない時間がかかったであろう作業を効率的に行えたことは、とても良い経験になりました。以上です。

OSError: [Errno45] Operation not supportedに悩まされたけどGitHubとGoogle翻訳に助けられた (Mac, python, Arelle)

以下の記事を参考にXBRLのデータを取得するコードを書いたところ、ArelleのCntlrモジュールを実行した時にエラーが発生しました。

OSError: [Errno45] Operation not supported: '/home/naget' というエラーです。

f:id:BIXLER:20210329100807p:plain

エラーの内容

エラーに書かれていたCntlr.pyのファイルの中身を見てみると、エラーとなっていた235行目の少し上の230行目に /home/naget/...の記載がありました。

f:id:BIXLER:20210329101610p:plain

Cntlr.py

解決策を探していると、/etc/auto_masterの一部をコメントアウトすることで解消されるようなことが書かれている記事を見つけましたが、参考元の情報がとても古かったため、この対応策は取らず他の解決法がないかさらに調べました。

ちなみに、/homeディレクトリはmacOSでは使われていない、というような記載も見つけました。Unixの名残りのようなものと理解しました。

そして、ついにGitHubで解決策を見つけました。韓国語で書かれていたため、情報収集の初め頃に一度見ていたのですが、日本語・英語ではなかったので読み飛ばしてしまっていました。

韓国語の知識がないのでGoogle翻訳様にお任せします。

f:id:BIXLER:20210329104245p:plain

Google翻訳

Full Pathに書かれているとおりに、/Users/ユーザー名/Library/Application Supportの下にArelleフォルダを追加してみます。通常、ユーザー名フォルダの下に存在するLibraryフォルダはFinderでは非表示になっているので、command + shift + . のショートカットキーを使って表示させます。

f:id:BIXLER:20210329104700p:plain

Arelleフォルダの追加

このあと作成したPythonコードを実行したところ、OSErrorは出力されなくなりました。

なぜ、これで解消されるのか詳細は分かりませんが、解決してよかったです。将来的にそのあたりも勉強したいと思います。

日本語や英語の情報だけを調べていて、解決策に辿り着くまでに時間がかかってしまいました。今の時代は素晴らしい翻訳ツールが存在するので、自分が理解できない言語であってもまずは翻訳してみるというのが今回の教訓です。

SeleniumのChormeDriver(WebDriver for Chrome)を利用する際のエラーの対処 (python, Mac)

以下の記事を参考に、TDNETから決算短信XBRLをダウンロードをしてみようと試したところ、Seleniumのwebdriverの設定でエラーが出たので、対処方を記録しておく。

事前にSeleniumChrome用のWebDriverを以下の記事を見ながらインストール。
Chrome のバージョンと対応したWebDriverをインストールする必要がある、との記載されていたが、 メジャーバージョンのみ指定するとエラーになってインストールできなかったので、指定をせず、pip install chromedriver-binaryを実行。(これがコード実行時にエラーにつながる、後ほど解消)

次に前述のqiitaを参考にPythonのコード作成し、実行したところ、webdriverの定義でエラーが発生。PATHが必要とのこと。 

調べると、ChromeDriverのフォルダを指定すればうまくいくみたい。

webdriver.Chromeの呼び出し時にexeutable_pathを設定。(3行目の後半)
自分の場合はAnacondaのフォルダの下にあったchromedriverフォルダをパスに設定。

改めてコードを実行したところ、新たなエラーが発生。

使おうとしているChromeDriverはバージョン90をサポートする、君のChromeのバージョンは89だ!と言われしまった。
WebDriverインストール時にバージョン指定せずにインストールしたことが原因。
メジャーバージョンが89のChromeDriverの番号を確認して、インストール。バージョン90は自動的にアンインストールされた。

バージョン番号の確認は、ChromeDriverのサイトでも確認可能。

これでChromeDriverは動くようになった。Pythonコード自体は別のエラーが出てしまった、まだ動いていないけど。

Atomのplatformio-ide-terminalでImportError: No moduleエラーが出るときの回避策 (Mac, Anaconda)

Atomのplatformio-ide-terminalでインポートエラーが出てPythonのファイルが実行できない。
requestsのモジュールがないということで、そんなわけあるか!と思ったけど、念のためpip installを実行。
やはり、既に存在している。

f:id:BIXLER:20210322094333p:plain

インポートエラー

AnacondaでPythonをインストールしたことが影響してるのかも、と考え、解決策を調べてみた。
日本語での情報は見つけられなかったが、GitHubにそれらしきものを見つけられた。

platformio-ide-terminalの設定の中にあるShell OverrideとShell Argumentsを変更する.。

  • Shell Override: /usr/bin/env
  • Shell Arguments: -u PATH zsh

f:id:BIXLER:20210322095617p:plain

platformio-ide-terminalの設定

f:id:BIXLER:20210322095226p:plain

変更箇所

私はこれで解消することができた。

ETFとPythonの勉強 米国市場のETFについて運用会社毎のETF数と運用残高を集計してみる その2

前回からの続き。 
今回は運用資産残高(AUM:Amount Under Management)の集計。

運用会社ごとの運用資産残高の集計

データ加工で用意したAUMの項目を集計する。集計は前回のETF数の手順を利用。

運用会社ごとのETF数と運用資産残高のシェアを1つのグラフで表示

運用資産残高上位300のETFについて、運用会社ごとのETF数と運用資産残高のシェアを見てみる。
運用資産残高のデータを半径を2.4に設定した外側の円グラフとして表示。ETFの数を半径1.6に設定した円グラフで表現している。最後に半径0.8の白い円を描写して、真ん中が空いているようなドーナツグラフを表現。 

見づらいグラフになってしまったので、修正を加える。

  1. Issuerごとに外側と内側のグラフの色を一緒にしたい(外側のBlackrockの青色が、内側の6.3%のポーションに再度現れている)
  2. グラフの各部の間の枠線をつけて各ポーションを見えやすくしたい

1については、カラーマップが外側から内側の円グラフに引き継がれてしまっていることが原因と思うので、カラーマップを円グラフを呼び出す前に定義しておき、それぞれの円のColorsに設定する。今回はデータの数が7個なので、カラーマップ'Accent'の7個目までの色を取得。(以下ページのQualitative colormapsの上から4つ目)


2については、円グラフのwedgepropsプロパティを設定する。
その他、簡単な説明などをつけて完了。

 

最後に

割合だけ表示しまっていて、運用資産残高の合計値を表示していなかった。5兆1670億ドルもある。単純に100円換算しても516兆円以上!

f:id:BIXLER:20210317150240p:plain

運用資産残高の合計(Billion $)

想像していたとおり、運用資産残高はいくつかの会社に偏っている。内側の円グラフを見ると、BlackRock、Vanguard、SSGAの3社で8割5分を占めていることがわかる。
Vanguardは上位300にランキングするETFの数がBlackRockに比べて少ないけど、運用試算残高ではシェアを取っていることがわかる。(薄紫色の部分)

次はどういう分析をしてみようか検討中。以上です。