より簡単に実行できるPythonプログラムを作りたい
前回、Pythonプログラムをダブルクリックだけで実行できるようPythonをインストールしました。

しかしそれだけではこれまでAnacondaで作成したPythonプログラムをダブルクリックで実行はできません。
ということでどうやったらダブルクリックだけで実行できるプログラムを作成できるか。
それを解説していきたいと思います。
とりあえず今回は「数値データが入っているCSVファイルを読み込み、なんか計算をして、グラフにして書き出して、同時にCSVファイルを書き出す」というプログラムを作ってみましょう。
まずは今回使う数値データを決めましょう。
ということでこんな数値データを作ってみました。
<testdata.csv>
1, 2, 10
2, 4, 20
3, 8, 30
4, 16, 40
5, 32, 50
6, 64, 60
7, 128, 70
8, 256, 80
9, 512, 90
10, 1024, 100
いつも通りダウンロードはご自由に。
最初の列がX値、真ん中と右側を掛け算してたものをY値としてグラフを作成し、さらに新しいファイルとして書き出してみましょう。
また今回は勉強のためになるべく一歩一歩解説するために、めんどくさいプログラムを書いていきます。
では先ほどの「testdata.csv」を置いたフォルダと同じところに新しいPythonプログラムを作成し、始めていきましょう。
ライブラリのインポート
まずはライブラリのインポートを行います。
今回使うのは「matplotlib」と「csv」だけ。
ということでこんな感じ。
from matplotlib import pyplot as plt
import csv
今回はAnacondaの最初のセルはライブラリのインポートだけに使うことにします。
つまりこんな感じ。

ファイルの読み込み
次にファイルの読み込みを行います。
今回は前回紹介したnumpyを使ったCSVファイルの読み込みではなく、通常のファイル読み込みを使っていきます。

ということでこんな感じ。
filename = "testdata.csv"
output_fig = "out_fig.png"
output_data = "test_out.csv"
f = open(filename, "r")
reader = csv.reader(f)
for row in reader:
print(row)
f.close()
実行結果
['1', ' 2', ' 10']
['2', ' 4', ' 20']
['3', ' 8', ' 30']
['4', ' 16', ' 40']
['5', ' 32', ' 50']
['6', ' 64', ' 60']
['7', ' 128', ' 70']
['8', ' 256', ' 80']
['9', ' 512', ' 90']
['10', ' 1024', ' 100']
「filename」、「output_fig」、「output_data」はそれぞれデータを読み込むファイル名、グラフを保存する時のファイル名、CSVデータを保存する時のファイル名です。
ここでは最初の「filename」しか使いませんが、あとで使うので先に設定しておきます。
そしてこの部分でファイルを開き、それぞれの行を「print(row)」で表示しています。
f = open(filename, "r")
reader = csv.reader(f)
for row in reader:
print(row)
f.close()
次にデータを変数に格納していきますが、その時は「print(row)」のところを書き換えていきます。
データを変数に格納
ということでデータを変数に格納していきます。
先ほどのプログラムを書き換え、こんなふうになります。
filename = "testdata.csv"
output_fig = "out_fig.png"
output_data = "test_out.csv"
f = open(filename, "r")
reader = csv.reader(f)
x = []; y1 = []; y2 = []
for row in reader:
x.append(int(row[0]))
y1.append(int(row[1]))
y2.append(int(row[2]))
print(x)
print(y1)
print(y2)
f.close()
実行結果
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[2, 4, 8, 16, 32, 64, 128, 256, 512, 1024]
[10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
「x = []; y1 = []; y2 = []」でX値と2つのY値を格納するための空のリストx、y1 、y2を作成します
そしてx.append(int(row[0]))というプログラムでX値をリストxに格納、y1.append(int(row[1]))でリストy1に格納、y2.append(int(row[2]))でリストy2に格納します。
ちなみにint(row[0])としているのは、読み込んだ直後は文字型であるstr型となっているため、整数型であるint型に直しているということです。
とりあえずprint(x)、print(y1)、print(y2)でちゃんとそれぞれの値が取れていることが確認できました。
結構長くなってきましたので、続きは次回に回しましょう。

ということで今回はこんな感じで。
コメント