はじめてのプログラミングとしてのPython入門(実践編)

IT技術 教養としてのテクノロジー入門

この記事について

前回、はじめてのプログラミングとしてのPython入門(基本編)では基本的なPythonの構文を解説しました。この記事ではPythonをより実践的な使い方をしていきたいと思います。※前回記事の知識前提で解説しますので、プログラミング初心者の方は前回記事をまず一読することをおすすめします。

実践編

実践編のゴール

実践編では、インデックス投資でETFと一般投資信託どちらが良い購入対象なのか検証してみたで触れました積立投資のシミュレーションデータ作成プログラムが作れるようになることをゴールとします。

これを作るためには、基本編の知識に加えて、配列、for文、ファイル操作、ライブラリ利用を扱える必要があるのでまず基本編の知識の補完としてこれらを解説していきます。

配列

配列とは値をグルーピングしたものになります。


# coding: UTF-8

greetings = ["おはよう", "こんにちは", "こんばんは"] #配列の定義です []でグルーピングします

# 変数の後ろに[数値]とすることで中身を取り出せます
# おはようが出力されます。
print(greetings[0])

# こんにちはが出力されます
print(greetings[1])

# len()で配列の長さを取得できます。
length = len(greetings)

# 3が出力されます。
print(length)

# .appendとすることで配列が追加されます。
greetings.append("おやすみなさい");

# このような処理を書くことで全ての配列を取り出して表示することができます。
num = len(greetings)
i = 0
while i < num:
    # 配列の順番指定に変数が使えます
    print(greetings[i])
    i = i + 1


% py ./list.py
おはよう
こんにちは
3
おはよう
こんにちは
こんばんは
おやすみなさい

for文を使った繰り返し

前述のプログラムコードではwhile文を使った繰り返しで配列の値を取り出しました。for文を使うともっと簡単に繰り返しを用いて値を取り出すことができます。


# coding: UTF-8

greetings = ["おはよう", "こんにちは", "こんばんは", "おやすみなさい"]

# greetingsから順番に値をとりだしgreetに格納します
for greet in greetings:
    print(greet)


$ py ./list.py
おはよう
こんにちは
こんばんは
おやすみなさい

ファイル操作

ここまで単一ファイルのプログラムだけ完結していました。ここからは外部のファイルを取得して処理していきます。ファイル操作はファイルの読み書きはじめ様々なことができますが今回は単純にテキストファイルを読み込んで出力するだけをやってみましょう。

今回はこんなファイルを用意してみました。


$ cat greeting.txt
こんにちは

以下のコードがこちらのテキストファイルを読み込み加工して出力するプログラムです。


# coding: UTF-8

with open("./greeting.txt", encoding="utf-8") as file:
  # fileに格納されたファイルデータを読み込みます。
  text = file.read()
  print(text + "私の名前は太郎です")


$ python fileread.py
こんにちは私の名前は太郎です

with open() の形がポイントで with open のブロック内ではfileという変数を使ってファイル操作ができるようになります。上記のプログラムではfile.read()で中身を取り出して利用しています。

ライブラリの利用

ここまではPythonのデフォルト仕様だけを利用しました。ここからはライブラリを利用していきます。ライブラリとは、デフォルト仕様以外の処理機能を使える機能郡の塊です。様々なライブラリがありますが、今回はcsvファイルを処理するライブラリを使ってみましょう。

扱うcsvはこのようなcsvとします。

注意:Windowsの方はShift-Jisの文字コードで作成してください。Shift-Jisがわからない方はExcelで下記ファイルを作成した後csvで保存するようにしてください。


% cat ./greetings.csv
日本語,こんにちは
英語,ハロー
フランス語,ボンジュール
中国語,ニーハオ

csvというライブラリを利用することで、上記csvファイルを以下のような処理で取り扱うことができます。


# coding: UTF-8
import csv # csvのライブラリを読み込む

# ファイルを読み込み
with open('./greetings.csv') as file:
    
    # csv.readerでcsvファイルのデータを扱いやすく配列化する。
    list = csv.reader(file)
    for line in list:
        output = line[0] + "の挨拶は" + line[1] + "です"
        print(output)


$ python greetings.py  
日本語の挨拶はこんにちはです
英語の挨拶はハローです
フランス語の挨拶はボンジュールです
中国語の挨拶はニーハオです

積立投資シミュレーション計算プログラムを作ってみる

駆け足でしたがここまでが、基本編からの追加のPythonの仕様解説でした。簡単なサンプルだけですがこれだけを組み合わせるだけで冒頭で紹介したインデックス投資でETFと一般投資信託どちらが良い購入対象なのか検証してみたの積立投資のシミュレーションデータ作成プログラムが作れるようになります。

シミュレーション用のデータ

以下のような形式です。一行目はヘッダーで2行目から年月のS&P500の価格をリストアップしています。

注意:こちらのCSVについてもWindowsの方はShift-Jisの文字コードで作成してください。Shift-Jisがわからない方はExcelで下記ファイルを作成した後csvで保存するようにしてください。


% cat data.csv
年月,S&P500
00年8月,1394.46
00年9月,1366
00年10月,1498
---- 中略 ----

シミュレーションプログラム

このシミュレーションプログラムでは上記CSVファイルを元に、毎月$1000分S&P500の投資信託を購入していきます。また信託報酬を12ヶ月毎に計算して引いています。最後に毎月の購入口数とその時点での総資産額をCSVとして出力するプログラムとなっています。


# coding: UTF-8
import csv

# 基準価格
price = 0.0
# これまでにかかった信託報酬
feeTotal = 0.0
# 年率信託報酬
feeRate = 0.03 / 100
# 所持口数
stock = 0
# 毎月の購入金額
wallet = 10000.0

# 出力するCSV
output = ["年月,所持口数,総資産額"]

# csvのデータを読み込み
with open('./data.csv') as f:
    list = csv.reader(f)
    num = 0;
    for line in list:
        num = num + 1
        #一行目はヘッダのためスキップ
        if num == 1:
            # continueとは繰り返しのスキップで以降の処理をさせずに次の処理を行います。
            continue 

        #コストの計算
        #本来信託報酬は毎日引かれているものだが1年に1度精算という形にする
        # float()とは文字列を小数点の数値型floatに変換する関数です。
        # CSVから取り出したデータがString型のため小数点数値のfloatに変換しています。
        if num % 12 == 0:
          feeTotal = feeTotal + (float(line[1]) - feeTotal) * feeRate

        #本来の基準価格からこれまでかかったコストを引いていく
        price = float(line[1]) - feeTotal

        #所持口数の追加
        stock = stock + wallet / price
        
        #CSV1行分の作成
        output.append(line[0] + "," + str(stock) + "," + str(stock * price))

# 作成したリストを一行ずつcsvとして出力
for line in output:
  print(line)

実行結果

実行結果は以下のようになります。


% py simulation.py
年月,所持口数,総資産額
00年8月,7.171234743198084,10000.0
00年9月,14.489628794807398,19798.918577800727
00年10月,21.162612552764934,31713.867919322474
00年11月,28.04762594411598,40737.213350012375
-----------中略---------------
19年12月,1693.1175879754571,4644761.357111018
20年1月,1696.5270444387213,4975945.763549963
20年2月,1699.8921909382811,5051465.638006186
20年3月,1703.319525986482,4969807.451070794
20年4月,1706.688799554133,5065450.356837394

実際にはさらにここからExcelでグラフ作図などの加工を行いたいので標準出力を切り替えて出力を新しいファイルにしています。


% py simulation.py > result.csv

おわりにーさらなる学習をしたい方へ

以上がPythonの実践的な使い方の例でした。これ以外にもクラス、関数作成、Webアプリ開発など紹介していないPythonの使い方はたくさんあります。入門書やリファレンスを一冊買って読んでみてもいいですが、例えば今回のように「Python CSVを操作したい」、「Python ファイルの読み書きをしたい」と検索すれば簡単なサンプルコードはたくさんでてきます。あとはそれを組み合わせるだけで目的のプログラムは作れるようになると思います。

今回の記事で少しでもPythonに限らずプログラミングに興味を持っていただけましたら幸いです。

Photo by: Matthew Henry

 みやうデジタルラボ - にほんブログ村