Pythonの基本変数型

変数の型は、代入する値の型によって決まる

 

整数型 (integer)

  n = 10

 

浮動小数点 (実数) (floating point)

  x = 10.0

  x = 10.0e5

 

文字列型 (string)  "" あるいは ’’ でくくる。どちらも意味は同じ。

  s = “abc”

  s = ‘abc’

 文字列内にが含まれる場合、くくる引用符を変えることで表現できる。
s = “a’bc”

あるいは、’\’ を使って特殊文字をエスケープする。

s = ‘a\’bc’

   改行文字 (LF)          \r

   行頭復帰文字 (CR)       \r

   タブ                   \t

      直後の1文字           \\      \ 文字自身

                             \’     ‘

                             \”     “

s = ‘a\’bc’     文字列内で ‘\’ があると、直後の1文字と組み合わせて

 

リスト型 (list) 複数の要素を持つ配列

  d = []

 要素を追加する場合

  d.append(3.0)

   追加する値の型により、その要素の型は変わる => 一つのリストに、異なる型の要素を持たせられる

 i 番目の要素を参照

   d[i]      注意:Basic, Fortranなど以外のプログラム言語では、
要素番号 i 0から始まり、N-1 まで (Nは要素数)

 

タプル型 (tupple) リスト型に似ているが、要素の書き換えができない => 定数リスト

  d = ()

 書き換えができないので、.append() は使えない

 i 番目の要素を参照

   d[i]

 

 

オブジェクト

 オブジェクト (Object): 複数の属性 (attribute, property) と 操作 (method) を結び付けた変数

                     pythonの場合は、属性と操作をいずれもattributeと呼ぶ

 

Pythonの変数はすべてオブジェクトである。

オブジェクト変数の属性へのアクセス:

インスタンス変数名.属性名

インスタンス変数名.操作名(引数)

 

 

 オブジェクトの定義: クラス (class)

 クラスを変数として実体化: インスタンス (instance)

 オブジェクト指向プログラミング: クラス、オブジェクトを中心としたプログラム言語、プログラミング

     ó 関数型プログラミング: Cのように、関数、サブルーチンで構造化したプログラミング

 

例:

 catオブジェクト: propertyとして、color, weight, methodとして move(), position()などが考えられる。

クラスの定義 (概念的なプログラムリストなので以下のままでは動かない)

class cat():

      # pythonでは、 # 以降は行末までがコメント文として、無視される

      # 関数は def文で定義し、: で終わる

      # 変数は 変数名 = 初期値 とすることで、初期値を設定できる

def __init__(self, color = 'white', weight = 20.0):

color = color       # ややこしいけど注意。左のcolorcatattribute変数

# 右辺のcolor__init__関数の引数変数

            weight = weight

            x = 0               # 位置変数 x,y,z0で初期化しておく

            y = 0

            z = 0

 

        def move(dx, dy, dz):   #位置をdx,dy,dzだけ移動させる

                …

 

        def position():

                return x, y, z  #位置を [x,y,z]リストで返すメソッド

 

 インスタンスの生成(変数の作成)

  nyanko = cat()

        catクラスで定義されたオブジェクトのインスタンス変数nyankoをつくる。

        引数を指定していないので、初期値が使われ、

naynako.color 'white'nyanko.weight 20kgになる。

  nyanko = cat(color =’black’)

        catクラスで定義されたオブジェクトのインスタンス変数nyankoをつくる。

        引数で指定されたcolor変数は初期値から変更され、naynako.color 'black' になる

  nyanko.move(3, -1, 0)を実行すると、nyanko.x, nyanko.y, nyanko.zはそれぞれ 3, -1, 0 になる

  nyanko.move(-1, 3, 2)を実行すると、nyanko.x, nyanko.y, nyanko.zはそれぞれ 2, 2, 2 になる

 

 

pythonの起動

1. Windowsのスタートメニューから “Anaconda Prompt” を起動
(python
へのPATH変数が通っていれば、通常のコマンドプロンプトでも同じ)

 

2. 作業フォルダーに移動。例えば、F:\workへ移動するなら、
(
赤字部分を入力し、Enterを押す)

(base) C:\Users\tkamiya>f:

(base) F:\>cd work

(base) F:\work>

 

対話モード (interactive mode)

1.  Pythonを引数なしで起動

(base) F:\work>python

“>>>” は、pythonの入力プロンプト

ここで、pythonのプログラムと同じコマンドがすべて使えるので、文法の確認などをするといい。

 

対話モードで変数の型、扱いを確認してみる

>>> a=10              整数の代入

>>> print(a)

10                     整数として表示

 

>>> a=10.0            実数として代入

>>> print(a)

10.0                   実数として表示。デフォルトでは最小の小数点で表示される。

>>> a=10.00            桁数が違う実数として代入。

>>> print(a)

10.0                   実数として表示。デフォルトでは最小の小数点で表示される。

 

>>> a="10.00"         文字列として代入

>>> print(a)

10.00                  文字列のため、代入した値そのままが表示される

 

>>> a=[10.00, 10, '10.000']    リストとして代入

>>> print(a)

[10.0, 10, '10.000']    リストの要素が [] にくくられて表示。要素ごとに型が違うことがわかる

>>> a[1]=3             要素番号 (index) 1 の要素を 3 に変更してみる

>>> print(a)

 [10.0, 3, '10.000']    2つめの要素が3に変更されている(index0から始まることに注意)

>>> a.append(5)         リストに要素を追加

>>> print(a)

 [10.0, 3, '10.000', 5]

 

>>> a=(10.00,10,'10.000')      タプルとして代入

>>> print(a)

 (10.0, 10, '10.000')   タプルの要素は () にくくられて表示される。

>>> a[1]=3             index 1 の要素を 3 に変更してみる

Traceback (most recent call last):      Trace: "痕跡をたどる” => incidentが生じた場所を探すこと

  File "<stdin>", line 1, in <module>

TypeError: 'tuple' object does not support item assignment

                タプルの要素は変更できないのでエラーになる

>>> a.append(3)        タプルに要素を追加してみようとする

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

AttributeError: 'tuple' object has no attribute 'append'

                appendという属性(attribute)がないのでエラーになる

 

>>> exit()     pythonスクリプトを抜ける関数。この場合は対話モードから抜ける

(base) F:\work>

 

CSVファイル

Comma Separated Valuesの略。

1行ごとに複数の値を‘,’でくぐって並べる。

先頭行に、各値のラベル (Label) を書くことが多い

Excelで作成 => ファイルの保存で “CSV” を選ぶ

Excelで直接読み込める

 

例:\work\data.csv

rho(ohm),T(K)

0,1

1,2

2,5

3,8

4,15

 

CSVファイルの読み込み

注意: pythonでは、追加機能を module で追加する。

 どのようなmoduleが使えるかは、とにかく検索するに限る

    “python csv” で検索

 

\work\01-readcsv.py

import csv                     csvを読み込むためのmoduleを読み込む

from pprint import pprint       リストを表示する際に成形して表示するmodule pprintを読み込む。

      import pprintでもよいが、実際のpprintは、pprintモジュール内の pprint関数であるので、
呼び出す際には pprint.pprint (モジュール名.関数名、あるいはモジュール名.クラス名) とする必要がある。
from module import XXX
文を使うと、module.py中のXXXという関数だけをインポートし、関数名で呼び出すことができる。この場合は、下記のように、pprintだけで呼び出しができる。

 

 

infile = 'data.csv'            読み込むcsvファイルのパスを infile 変数に設定

 

lines = []                     csvから読みこむ各行のデータのリスト変数を作成

with open(infile, "r") as f:    infile を読み込み専用モード ‘r’ で開き(open)

ファイルアクセスに必要なファイル変数を f に代入する。

Openしたファイル変数は、使用が終わったらcloseしなければならない

(closeしないと、他のプログラムからファイルにアクセスできなくなる)

                               with 文を使うと、withブロックを抜けた時に、

自動的にファイルをcloseしてくれるので便利

reader = csv.reader(f)   csvモジュールの属性.readerを使い、fに紐づけられているファイルを
csv
として読み込むためのreader変数を設定

                        pythonでは、インデント (indent, 字下げ)数でブロックを区別する。
同じブロックは同じだけのインデントをする必要がある

 

       for row in reader:       csvファイルを1行ずつ読み込む定型文。

                               Readerから1行ずつ読み込み、row リスト変数に各要素を代入

            lines.append(row)   とりあえず、各行のリスト変数を、linesリスト変数に追加しておく

                               linesは、2次元の配列 (リストのリスト) になっていることに注意。

                              j行目のデータのリストは lines[j] で取得できる。

                               j行目のk番目のデータは lines[j][k] で取得できる。

                                       (j,kのいずれも、0 から始まることに注意)

         ブロックが終わったら、for文にもどり、readerから次の行を読み込み、

row変数に代入、以下を繰り返す

 

header = lines[0]       csvファイルの1行目はラベル行なので、header変数に代入しておく

xy  = lines[1:]        データ行は2行目以降なので、xyリスト変数に代入しておく。

                [1:]は「リストのスライス」と呼ばれ、index 1から最後までの部分リストを返す

                [3:6]とすると、index 3 から 5 (2番目のindexより1少ないことに注意)の部分リスト

 

print("header:", header)        headerの中身を確認するため、print文で表示する

                               print分では、表示したい変数を , で区切って並べられる

 

print("lines (print):", xy)     xyの中身をprint文で確認

 

print("lines (pprint):")        xyの中身をpprint文で確認したいが、pprintでは文字列とリストを並べて

表示できないので、まず、print文で文字列を表示

pprint(xy)                     xyの中身をpprint文で確認。この場合はprint文を同じ表示。

 

 

 

 

CSVファイルのデータを実数型のx,yリストに読み込み、グラフに表示

\work\01-readcsv.py

# グラフにプロットしてみる

# http://ailaby.com/least_square/

 

import csv

from pprint import pprint

from matplotlib import pyplot as plt

        グラフに表示するため、matplotlibモジュールの pyplot クラスをimportする。

        importしたクラス、変数、関数(オブジェクト)には、as 文により別名をつけられる。

        この場合、 pltという別名でpyplotオブジェクトにアクセスできる

 

infile = 'data.csv'

 

i = 0           csvの変数をheaderと区別して読み込むため、行カウンタ変数を使う

                まず、0に初期化する (先頭行を i == 0 で区別できるようになる)

x = []          csvの各行の変数を、x,yというリスト変数に別々に取り込むため、x,yリスト変数を作成する

y = []

with open(infile, "r") as f:

    reader = csv.reader(f)

 

    for row in reader:

        if i == 0:              i == 0、つまり、最初の1行のデータはheader変数に代入

                     == 演算子は、両辺の変数の値が等しいか等しくないかを判断し、

bool True, Falseを返す。

                       if文は、与えられた値がTrueであれば次のブロックを実行する。

            header = row

        else:                  i == 0Falseである場合に実行される

            x.append(float(row[0]))     xリスト変数に、各行の index 0 (最初の要素) を追加する

                       ファイルから読み込んだ値は 文字列 になっているため、float()関数を使って

実数変数に変換する。

            y.append(float(row[1]))     yリスト変数に、各行の index 1 (2番目の要素) を追加する

        i = i + 1       行カウンタを1増加させる

 

print("header:", header)

 

print("x:", x)

print("y:", y)

 

plt.scatter(x , y)      x,yリスト変数を.scatterメソッドに渡し、

散布図として(x,y)をプロットすることを指示する

plt.show()             グラフを表示