読者です 読者をやめる 読者になる 読者になる

Remrinのpython攻略日記

python3に入門しました。python3についてあれこれとサンプルコードとか。

クラス

クラスについて。 クラス…オブジェクトの設計図のようなもの。 データとメソッドを持つ。 インスタンス…設計図から作られた実体。オブジェクト ・クラス名は大文字で始める。 class Color_test(): pass a = Color_test() print(a) # <__main__.Color_test object at 0x....> a.red = 255 print(a.re</__main__.color_test>…

decimals

decimalsモジュールのDecimalクラスは数値演算での誤差を回避するクラス。 小数の計算では誤差が生じる。 for i in range(10): print(i * 0.1) # 0.0 # 0.1 # 0.2 # 0.30000000000000004 # 0.4 # 0.5 # 0.6000000000000001 # 0.7000000000000001 # 0.8 # 0.9…

高階関数、デコレータ

高階関数...関数を関数に渡したり、戻り値として関数を返したり。 関数に機能を追加できたりする。 print(int(3.14)) # 3 print(int("100", 3)) # 9 :3進法の100は10進法の9 def arg_check(func, arg): print(arg) return func(arg) print(arg_check(int, 3.…

イテレータ

イテレータとは: 1. シーケンスなどの要素を次々取り出す。→ __next__ 2. 終わったら知らせる。 → StopIteration forループや内包表記では内部でiter()関数が呼ばれ、 順に「__next__」をしていき、最後にStopIterationで停止するので、 __next__やStop…

テストデータ(8) 麻雀の役

麻雀の役について 麻雀の役名 英語名は複数の言い方があるようなので、一例 役名 英名 翻 鳴き 形で決まる リーチ Ready 1 0 × 一発 One_shot 1 0 × 面前ツモ Self_pick 1 0 × 役牌 Honor_tiles 1 1 △ タンヤオ All_simples 1 0 ○ 平和 No-points_hand 1 0 ×…

bytes, bytearray

ググってみると、文字列に関する型というよりは、バイナリデータを扱う型でした。 まとめてバイナリシーケンスとも呼ばれます。 0~255の整数のみが要素になります。 bytes イミュータブル(値の変更不可) bytearray ミュータブル(値の変更可能) bytes型 …

関数

関数についての注意事項など。 引数 ・可変長引数 *argsとして受け取ると、個数に関係なく残りの引数をタプルとして受け取れる。 def test(a, b, *args): print(a, b, args) test(1, 2) # 1 2 () test(1, 2, 3) # 1 2 (3,) test(1, 2, 3, 4, 5) # 1 2 (3, 4,…

ループ処理

ループ処理について。 for イテレータ(シーケンスなど)を添える while イテレータの代わりに条件式。while True, while 1という形をよく見る break ブロックから抜ける continue それ以降のループブロックを実行せず、最初に戻る else whileブロックで使う時…

3つのif

ifの使い方について。 「1000未満の3または5の倍数の和を求める」場合 ○条件分岐 limit = 1000 result = 0 for i in range(limit): if i%3 == 0 or i%5 ==0: result += i print(result) ○内包表記 limit = 1000 result = sum([x for x in range(limit) if x%…

NumPyの使い方(19) 数え上げ

NumPyの数え上げ(要素のカウント)について。 0,1のみのデータから1や0の個数を数える方法 import numpy as np a1 = np.array([0, 1, 1, 0, 1, 0, 0, 0]) # 1の個数をカウントする例 print(np.count_nonzero(a1)) # 3 print(a1.sum()) # 3 print(len(np.where…

素数

素数について。 素数生成のジェネレータ def gen2(start=2, stop=1000000): pr = max(1, start - 1) while True: while pr < stop: pr += 1 if all(pr%x != 0 for x in range(2, int(pr**0.5) + 1)): break yield pr g = gen2() for i in range(10): print(n…

ジェネレータ

ジェネレータについて。 通常の関数のreturnの部分をyieldとするとジェネレータを自作できる。 偶数を生成するジェネレータ def gene(): even = 0 while True: yield even even += 2 e = gene() for i in range(5): print(next(e)) 素数を生成するジェネレー…

PILの使い方(1)

PIL(Python Imaging Library)の使い方について。 画像の読み込み img = Image.open("filepass") のように、ファイルを読み込む。 この時点では参照されているだけで、必要になってからデータを読み込む。 下の例では作業ディレクトリの下のdataフォルダに該…

フィボナッチ数列

フィボナッチ数列について。 def fib(n): a, b = 0, 1 for i in range(n): a, b = b, a + b return b print([fib(i) for i in range(10)]) # [1, 1, 2, 3, 5, 8, 13, 21, 34, 55] メモ化した場合 fib_memo = {} def fib(n): if n < 3: return 1 if n not in …

pandasの使い方(3) インデックス

pandasのインデックスオブジェクトについて。行や列のインデックスは「インデックスオブジェクト」として保持。 行:DataFrame.index 列:DataFrame.columns import numpy as np import pandas as pd data = {"year": [2010, 2011, 2012, 2013], "pref":["千…

テストデータ(7) 東京の年平均気温

東京の平均気温(気象庁のサイトより) # coding: utf-8 import pandas as pd url = 'http://python-remrin.hatenadiary.jp/entry/2017/05/18/142423' ## DataFrameのリストを得る。header=0のオプション指定で、最初の行をheader扱い。 fetched = pd.io.htm…

最小二乗法

最小二乗法について。 (2, 3), (4, 7), (9, 11)の3点をデータとして、最小二乗法を1次式で行う場合。 とすると、 これの最小値を求めることになり、偏微分をして となるベクトルが係数ベクトルとなる。 # coding: utf-8 import numpy as np import matplotli…

NumPyの使い方(18) 次元操作

NumPyの次元操作について 次元の増減 保持 削減 増加 reshape ○ ○ ○ resize ○ ○ ○ flatten ○ × rabel ○ × any, all × ○ × sort ○ △ × axis略で1d スライス ○ × × インデックス × ○ × ファンシーインデックス ○ ○ × take ○ △ × axis略で1d mean, sum × ○ × mi…

NumPyの使い方(17) 構造化配列

NumPyの構造化配列(structured array)について。 dtypeを自分で設定して、異なる型の変数を織り込める。 フィールド名で要素を参照できる。 dtype = [("x", int), ("y", float)] a1 = np.array([(1, 2), (3, 4), (5, 6)], dtype=dtype) print(a1) # [(1, 2.0…

麻雀(1)

何年かかるかわかりませんがプログラムの練習で麻雀を作ってみようと思います。 m 萬子 0-8 p 筒子 9-17 s 索子 18-26 h 字牌 東:27~中:33 pair 対子 triplet 暗刻 Triplet 明刻 seq 順子 kan 暗槓 Kan 明槓 prevailing_wind 場風 seat_wind 自風 dealer …

NumPyの使い方(16) 行列matrix

NumPyのmatrixについて。 class 種類 次元 ndarray 配列 次元は自由 matrix 行列 2次元に固定 ndarrayでは行列の積を表すときにdot()を呼びだすが、 matrixでは「*」や「**」で行列の積などを表せる。 その他の使い方はndarrayと同様のようです。 import num…

NumPyの使い方(15) ブロードキャスト

NumPyのブロードキャストについて。 配列の次元、大きさ(要素数)などが異なっていても配列どうしやスカラーの演算ができる。 ブロードキャストができるのは、2つの配列のshapeを最終軸から順に比較していき、同じ大きさか、一方が1であるかチェック。 1つ…

NumPyの使い方(14) 繰り返し

NumPyの繰り返しrepeat()、tile()について。 np.repeat() 配列の要素を繰り返す。 axisを省略すると1次元にflattenされる。 import numpy as np a1 = np.arange(4) print(a1.repeat(2)) # [0 0 1 1 2 2 3 3] print(a1.repeat([3, 2, 1, 0])) # [0 0 0 1 1 2]…

Numpyの使い方(13) 結合・分割

Numpyの配列の結合・分割について。 np.concatenate() 2個以上の配列を軸指定して結合する。 軸指定オプションのaxisはデフォルトが0 マスクは保存されない。(マスクについては別の記事で) import numpy as np a1 = np.array([[1, 2, 3], [4, 5, 6]]) a2 …

NumPyの使い方(12) 乱数、random

乱数を発生させるライブラリは主に2つ。randomライブラリとNumPyのrandom 2つのライブラリの一番の違いは乱数の発生個数。 乱数の発生個数 randomモジュール :乱数1個 numpyは配列の形をsize=~の形のキーワード引数で乱数の個数を指定できる。 size 省略…

NumPyの使い方(11) 行列計算

NumPyの行列計算について 内積 内積はnp.dot()関数を使うかarray.dot()メソッドを使うか。 内積は順序によって結果が異なる。 import numpy as np a1 = np.ones([2, 2], dtype=int) a2 = np.arange(1, 5).reshape(2, 2) print(a1) # [[1 1] # [1 1]] print(a…

NumPyの使い方(10) 集合関数

NumPyの集合関数について。 python標準のset型も参照。 1次元配列を対象とした集合関数 unique(x) 重複を除外し、ソートした配列 in1d(x,y) xの各要素がyに存在するか intersect1d(x, ) 共通部分。積集合 union1d(x, y) 和集合 setdiff1d(x, y) 差集合 setxo…

NumPyの使い方(9) 並べ替えsortなど

NumPyのsortについて。 sort()メソッド 内部で配列をソート。返り値はNone np.sort()関数 ソート済み配列を返す。元の配列は保存。 # coding: utf-8 import numpy as np np.random.seed(1) a1 = np.random.randint(0, 100, 10) print(a1) # [37 12 72 9 75 5…

NumPyの使い方(8) 真偽値

NumPyの真偽値について。 ・TrueとFalse python標準のTrue, Falseでは False 数値のゼロ、空文字列、空配列、False True 他すべて TrueがFalse以外ということは、 負の値、NaN、infもTrueとなる。・条件がTrueとなる要素の確認 import numpy as np a1 = np.a…

boolと条件

真偽値boolや条件などについて。 真偽値bool ・True, Falseの2つの値のみ。 ・True,=1, False=0で変更できない。(python2では変更できた) True = 0 # SyntaxError: can't assign to keyword False 数値のゼロ、空文字列、空配列、False True 他すべて ・必要…

NumPyの使い方(7) 統計関数、最大・最小

NumPyの統計関数の使い方 ndarray配列全体、あるいは特定の軸についての統計処理をする。 sumやmeanなどの集計処理は次元削減になる。 axis=0 縦方向にreduce axis=1 横方向にredece sum 和。 長さ0の配列では0を返す。 mean 平均。長さ0の配列ではNaNを返す…

NumPyの使い方(6) 条件制御

NumPyの条件制御について。 if~elseで条件分岐をするとき a = 5 if a >= 0: b = 1 else: b = -1 と書けますが、これを3項演算子を使い以下のようにも書けます。 b = 1 if a >= 0 else -1 似たような動作を組み込みのリスト型で行うとき、 例えば、Trueなら…

NumPyの使い方(5) ベクトル演算とユニバーサル関数

ベクトル演算とユニバーサル関数について。 ベクトル演算 ndarrayと数値(スカラー)の計算は全要素対象で、forループを使わない。 ndarrayどうしの演算は対応する位置の要素どうしで計算。 [注意]ndarray * ndarrayは内積や外積にはならない。 import numpy a…

Project Euler

Project Euler problem #001 Multiples of 3 and 5 If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23. Find the sum of all the multiples of 3 or 5 below 1000. 問題1…

テストデータ(6) メフィスト賞

メフィスト賞 import pandas as pd url = 'http://python-remrin.hatenadiary.jp/entry/2017/05/10/222443' ## DataFrameのリストを得る。header=0のオプション指定で、最初の行をheader扱い。 fetched = pd.io.html.read_html(url) print(len(fetched)) # l…

テストデータ(5) 直木賞

直木賞 import pandas as pd url = 'http://python-remrin.hatenadiary.jp/entry/2017/05/10/215715' ## DataFrameのリストを得る。header=0のオプション指定で、最初の行をheader扱い fetched = pd.io.html.read_html(url) print(len(fetched)) # 1 listの…

NumPyの使い方(4) 形状変換と転置

NumPyの形状変換と転置について。 reshape()、resize() タプルでshapeを指定して形状を変換する。 変換前後で全要素数が一致しないときはValueError -1を指定した軸はNumPyが自動で判断。 もとの配列を参照を得るので、値変更は元の配列に及ぶ。 np.resize()…

NumPyの使い方(3) インデックス、スライス

NumPyのインデックス、スライスについて。 1次元配列のインデックス、スライス 値の参照:python組み込みのlistと同様 値の代入:まとめて同じ値が代入(ブロードキャスト) import numpy as np # 値の参照、代入 a1 = np.arange(1, 10) print(a1) # [1 2 3…

NumPyの使い方(2) データ型

NumPyのデータ型 dtype 略号 種類 int32 i, i4 符号あり整数 32bit unit32 I, u4 符号なし整数 32bit float32 f, f4 小数 64bit complex64 F, c8 複素数 128bit bool 真偽値 True, False object O pythonオブジェクト string バイト文字列型 固定長。5文字な…

NumPyの使い方(1) 配列の生成

NumPyの使い方について。 NumPyとは ・NumPy: numerical pythonの略。科学技術計算の基盤となるパッケージ ・多次元配列オブジェクト ndaaryay(N-dimensional array) ・高速演算 ・ファイルの読み書き ・線形代数、フーリエ変換、乱数 ・C、C++、FORTRANのコ…

内包表記

内包表記(comprehension)の使い方。 map()やfilter()に近い使い方を高速に実行できる表記方法。 l2 = [x*2 for x in range(4)] # リスト内包表記 [0, 2, 4, 6] g = (x*2 for x in range(4)) # ジェネレータ式 0, 2, 4,... d2 = {x:x*2 for x in range(4)} # …

テストデータ(4) 常用漢字

常用漢字のテストデータです。 data = [""]*7 #小1 data[0] = """ 一右雨円王音下火花貝学気九休玉金空月犬見五口校左三山子四糸字耳七 車手十出女小上森人水正生青夕石赤千川先早草足村大男竹中虫町天田土 二日入年白八百文木本名目立力林六""" #小2 data[1…

pandasの使い方(2) DataFrameの生成

データフレームを作る(1) numpyの配列から作る。 import numpy as np import pandas as pd a = np.random.randint(1, 100, (3, 2)) frame = pd.DataFrame(a, columns=["a", "b"]) print(frame) # a b # 0 85 80 # 1 85 10 # 2 17 38 データフレームを作る…

テストデータ(3) アミノ酸 コドン表

m-RNAからアミノ酸へのコドン表 bases = "UCAG" codons = [b1+b2+b3 for b1 in bases for b2 in bases for b3 in bases] aminoacids = "FFLLSSSSYY**CC*WLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG" codon_dict = dict(zip(codons, aminoacids)) pri…

map(), filter()

pythonのmap(), filter()の使い方について。 map() Definition : map(func, *iterables) リストなどの全要素に関数を適用し、イテレータを作る。 もとのリストは保存され、非破壊的。 mapオブジェクトを生成するので、中身を見たければlist化など。 list1 = …

バーンスレイのシダ

○バーンスレイのシダ 4種類の変換をそれぞれ、85%、7%、7%、1%の確率で選んでいきます。 # -*- coding: utf-8 -*- import numpy as np import matplotlib.pyplot as plt def transform1(p): x, y = p[0], p[1] x1 = 0.85*x + 0.04*y y1 = -0.04*x + 0.85…

matplotlibでアニメーション

matplotlibでアニメーションを作ります。 # -*- coding: utf-8 -*- import matplotlib.pyplot as plt import matplotlib.animation as ani def create_circle(): c1 = plt.Circle((0, 0), 0.5) return c1 def update_radius(i, c1): # i:フレーム番号 plt.cl…

matplotlibで図形

matplotlibで図形を描く方法。 plot()関数が呼ばれると背後でfigure()が呼ばれ、続いてaxes()が呼ばれてfigureの中に軸をつくる。 plot()関数を呼ばずにfigure()やaxes()で図、軸を設定できる。 import matplotlib.pyplot as plt c1 = plt.Circle((0, 0), ra…

csvライブラリ

csvモジュールの使い方について。 以下の内容のtest.csvを準備しました。 1,20 2,30 3,40 4,50 ○csvファイルの読み取り (1)各行はリストとして読み込まれる。 import csv with open("test.csv", "r") as f: data = csv.reader(f) print(data) <_csv.reader object at 0x...> for i in d</_csv.reader>…

matplotlibの色名一覧

matplotlibの色名一覧 この色名一覧はpythonで書かれていて、同じページにコードも載っています。 あとでゆっくりコードを読んでみようと思います。 # coding: utf-8 from __future__ import division import matplotlib.pyplot as plt from matplotlib impo…