書籍「退屈なことはPythonにやらせよう」を教本にした「投資家のためのプログラミング勉強会(投プロ)」第4回目です。今回は、第1部4章に沿って下記の内容を学んでいきましょう。

  • リスト(大量の変数を簡単に扱う方法)
  • forループ(繰り返し処理)

「リスト」と「forループ」および前回学習した「条件分岐」が理解できれば、プログラミングにおけるベース部分をマスターしたと言っても過言ではありません。じっくり習得していきましょう。

前回作成した、複数ウェブサイトを一気にオープンするアプリ「一発くん」は、入力した銘柄コードが4文字かどうかをif文の条件分岐でチェックする機構を実装しました(プログラムコードを書いてある機能を実現することを「実装する」と言ったりします)。

今回はさらに「入力した銘柄コードが東証一部銘柄であるかないか」をチェックできるロジックに変更していきます。これによりさらに厳密に入力値のチェックが行えますので、アプリらしくなってくると思います。

ではまずは前回のおさらいから。

上記ソースでは、キーボードから入力した銘柄コードをinput()関数で変数 stock_code に入れ、さらに stock_code の文字列長をlen()関数で取得して変数 m に入れています。最後に m と 数値の4 を比較した結果(TrueかFalseでしたね)をhantei に入れ、if文の条件分岐でTrueかFalseの判定結果で処理を分岐しています。

今回は、入力された銘柄コードを、文字列長ではなく、実在する東証一部銘柄(2000以上あるはずです)に合致するかどうか、というチェック方式に変更してみましょう。

「銘柄コード」のような大量の塊(かたまり)である変数を扱う際は「リスト(配列)」に入れるのが常道手段です。

例えば、複数の銘柄コードをリストではなく別々の変数にセットしようとすると、このように銘柄コードの種類分の変数が必要となります。(私の好きな高配当株を例にとります(^^) )

このままでは銘柄が増えるたびにズラーっと変数の定義が並んでソースコードの可読性が落ちてしまいます。しかも、どの変数を使えばいいかをいちいち大量の変数の中から探す必要が出てきます。

このように「種類が同じで何パターンもある変数を定義する」ときにはリスト型の出番となります。

リストは変数の箱が鎖のようにつがったイメージです。ひとつの変数を定義すれば、それにぶら下がる複数の値を保持できます。(「変数」の考え方は第1回を参照してください)

stock_codesという一つの変数で、上記のように複数の値を定義できました。全体を中括弧で囲み、それぞれの値をカンマで区切るのがリストの文法となります。

銘柄コードの他にも、例えば銀行名や動物の種類など「種類が同じで何パターンもある変数を定義する」には、いちいち変数を定義するのではなくこのようにリスト型を使います。

リストの中の値は添字番号で呼び出します。
stock_codes[0]であれば1番目の値を呼び出すことができ、stock_code[2]は3番目の値となります。

では実際に表示してみましょう

添字で指定した銘柄コードは表示されましたか?

0や3以外にも色々な添字を使ってどのような値が返ってくるか試してみてください。

いかがでしたか?

-2の表示結果は「なるほどーっ」といった感じだったと思います。これに限らずですが、Pythonは直感的な理解のために、あたかも英文法のように分かりやすい文法が設計されています。

なお、リストの添字はゼロから始まることに注意してください。Pythonに限らずプログラミング言語の世界では、数字は1ではなく0から始まるのが普通です。

さてここで一つ質問です。このリストに入っている要素の数を知るにはどうしたらいいでしょうか?

前回学習したlen()関数を覚えていますか?

これは変数 company の文字列長を取得している例です。

同様に、len()関数にリスト変数を入れると、今度はそのリストの長さ(要素の数)を返してくれるのです。

無事に6が表示されましたか? さらに理解を深めるために、上記の配列の要素の数を増減させ、len()関数がどのような値を返すか試してみてください。(例えば空のリストを入れたらどうなりますか?)

ここまでがリストに関する解説です。詳細は第1部4章を読んでみてくださいね。

 

それではいよいよ実際に東証一部の銘柄をリストで定義してみましょう。

銘柄コードのリストは中級編で学ぶ「スクレイピング」という技術で東証のウェブサイトからサクッと取得でますが、今回は取得済みの下記データをご自分のソースコードにコピペしてください。

それでは、さっそく先ほどのlen()関数で要素数を数えてみましょう。

2117と表示されましたか?

そうです、東証一部には2117種類の銘柄があるということが分かりました。(上記の配列の定義は表記上 「….」 で省略していますが、実際には省略せずに最後の要素までコピペしてください)

ここで話は少々逸れますが、同様なことを手動でしようとすると「東証のウェブサイトを検索して訪問し、銘柄コードの一覧画面を目でカウントするか、エクセルにコピペする」なんてことが必要となります。

これがプログラミングなら、たった三行で同等の結果を得られるわけで、プログラミングの凄さここにありなのです。さらにこのすぐ後で学ぶループを使えば2117種類の銘柄との付け合わせ作業も一瞬で終わらすことができます。

しかも、一度コードを書きさえすれば、半年後や一年後でもこのコードを実行するだけで、最新の銘柄情報をいつでも同じ品質で取得できてしまうのです。

プログラミングの素晴らしさの一端がお分かりになるかと思います。

さて、「キーボードから入力した文字列と、あらかじめ取得していた2117種の東証一部銘柄コードとを一つずつ比較する」のが今回のゴールでした。

上記を実現するために、これまでの知識だけでコードを書くとすると、このようになります。

配列にセットされている2117種類の証券コードを、このように一つずつ呼び出して比較するコードを書こうとすると目眩がしてきますね...でも安心してください、もちろんプログラミングの世界ではこんな書き方はしません。

このような大量の繰り返し処理を行う際の強力な機能が「forループ」です。

forループは様々な繰り返し処理で活用できる機能ですが、今回のようにリストを扱う際には必ずと言っていいほど使われますので、セットで覚えておきましょう。

forループの動きを理解するために、リストにセットされている全ての銘柄コードをprint()で表示するプログラムを書いてみましょう。

forループを使うことによって、リスト変数 stock_codes に定義されている各要素を、変数 c に順番にセットし後続の処理( print(c) )を行い、それをリストの要素数分(2117回)繰り返すことができます。書き手はリストの中身がいくつあるかなどを意識する必要はなく、勝手にforループが処理を回してくれます。便利ですね。

ちなみに英単語のforには「時間や距離の範囲」という意味があります。

working here for two years

cooking for a few minutes

forループのforはまさにこの感覚だと思います。stock_codesの中身(in)の範囲で繰り返し処理を行いなさい、という命令を意味しているわけです。

リスト変数とforループを学んだところで、「一発くん」のバージョンアップに取り掛かりしょう。
前回までは「入力された証券コードが4桁以外ならNG」とするチェック機構でしたが、これを「実在する東証一部の銘柄コードならウェブサイトを開く」というようなロジックに改善します。

みなさんが書いたコードはどのようになりましたか?

上記は答えの一例ですが、入力された銘柄コードとリスト内の要素と比較して、それらが一致したら該当のウェブサイトを開くアプリに改良されました。

ちなみにこれだと入力した銘柄が東証一部の銘柄リストに該当しない場合NGメッセージが出ませんので、さらに以下のように改良します。

breakはforループの途中で抜ける命令です。flagという変数を設けることで、一度もリストの値と合致しなかった場合にはNGメッセージを出力しています。これも条件分岐ifの使い方の一例です。

このように、プログラミングは「条件分岐」と「ループ」を何度も繰り返しながら、目的の値を探したり、分析を行っていきます。この考え方はぜひ頭にいれておいてください。

第1回から今回までの内容を習得すれば、これまで手動で行なっていた様々な処理をプログラミングで自動化できることがお分かりになると思います。そして、ご自身が普段何気なく行なっているPC上での繰り返し作業を、プログラミングに置き換えられるようなアイデアがきっと出てくるはずです。

もちろんまだまだ学ぶべきことがたくさんありますが、自分が実現したいことをイメージしながら学習を進めることで、より効率的な習得ができると思います。そんな近未来を頭に描きながら引き続き学習していきましょう!

次回は、入力した銘柄コードに関連する英語ニュースを検索し、自動的に翻訳した結果を一覧表示するアプリを作っていきます。米国株の情報収集で使えるような実用性の高いアプリを作っていきましょう!

次回学習予定

  • 辞書型(第1部第5章)
  • HTTPリクエストの基礎

退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング
退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング

こちらの本を教本にした「投資家のためのプログラミング勉強会(投プロ)」を主宰しています。
そもそもプログラミングとはなんぞや、Pythonを実行させる環境をどのように用意するか、などプログラミングにおける超基本的な内容が、我々のような非ソフトウェアエンジニア向けに分かりやすく記載されています。はじめの一歩にはこれ以上ない教材です(^^)

Please follow and like us:

コメントをどうぞ

メールアドレスが公開されることはありません。

CAPTCHA


Social media & sharing icons powered by UltimatelySocial