--- Title: python Author: python0705 Web: https://mimemo.io/m/ydN6woxajxlp7qE --- python メイン学習 スコープ・・・変数の有効範囲 定義した変数を使うことのできる範囲 グローバルスコープとローカルスコープがある。 グローバルスコープにある変数をグローバル変数 ローカルスコープにある変数をローカル変数という グローバル変数は、その変数があるPythonファイル(モジュール)のどこからでも使える。 一方、ローカル変数は定義されている関数内でのみ使える。 ➡ローカル変数を関数の外で使うとnameErrorになる。 様々なスコープと名前空間を参照。 global文を使うことでスコープの外側に変数を参照できる。 名前空間・・・変数や関数の名前が所属している場所 変数や関数が所属する場所==モジュールやクラスが名前空間になる 異なる名前空間にある同じ名前のオブジェクトには何の関係もない。 インデント・・・4文字分のスペース ブロック・・・ :で終わる分の次の行から行頭にインデントが入っている 連続した処理をブロックという。 トランザクション・・・アプリの仕様上、それ以上分割することができない 一連の処理。 AさんからBさんに10000円を振り込む 〇Aさんの口座から10000円を差し引く 〇Bさんの口座に10000円を加算する。 重要なことは、この2つの処理は同時に処理され、 成立しなければならない。 Aさんの口座を差し引いた後で、何かしらシステムに障害が 発生してBさんの口座の残高が増えないと大変なことになる。 こういった場合に備えて全ての処理が正常に終了しない場合、 全て取り消して元の状態に戻す。 Aさんの口座からN円差し引く・Bさんの口座にN円加算するは 分割できない処理。==これがトランザクション エラーが発生したらトランザクションを開始する前に必ず戻す。 このことを「ロールバック(roll back)という」巻き戻す。 トランザクションで記述した処理を確定させることを「コミット(commit)という」 <組み込み型> シーケンス・・オブジェクトを順番(シーケンシャル)に処理するための データ構造。 基本的なシーケンス型はリスト、タプル、rangeオブジェクトの3つ。 [共通のシーケンス演算] リスト、タプル、文字列で共通の操作を行える x in s : sの中にxと同じ要素があればtrue,なければfalse。 x not in s : sの中にxと同じ要素があればfalse なければtrue s + t : sとtの結合 s * n : s自身をn回足す s[i] :sの0から数えてi番目の要素 s[i:j] : sのiからjまでのスライス s[i:j:k] : sのiからjまでk毎のスライス len(s) : sの長さ min(s) sの最小の要素 max(s) sの最大の要素 s.index(x[,i[,j]]): sの中でxが最初に出現するインデックス s。count(x) : s中にxが出現する回数 イミュータブル・・・作成後にその状態を変えることができないオブジェクト タプルなど。 ミュータブル・・・作成後にその状態を変更できるオブジェクト リストなど。 テキストシーケンス・・・文字列はイミュータブルなシーケンス <文字列> ’か”で囲む。 三重引用符’’’で囲むと複数行に分けられる。 <スライス> []を用いて、文字列の一部を抽出できる。 これを「スライス」と呼ぶ 例:'山田太郎ものがたり' print(a[0]) 0番目の文字==山 print(a[7:]) == 7 7番目から最後まで==たり print(a[2:4])「 3文字から4文字目まで ==郎も <文字列の結合> プラス記号 (+) join利用 ','.join ([文字列]) format利用 ’{},{}'.format(文字列、文字列) 繰り返し 文字列*3 繰り返し文字列を出力できる。 <二項演算子> 計算を行う演算子 足し算、割り算など 割り算➡/ = 割り算(小数点あり)     // = 割り算(小数点以下切り捨て)     % = 余り べき乗 **  変数に利用できる。 変数に何らかの計算を行い、結果を元の変数に代入する式を省略して x += 1と記述できる。 <比較演算子> 右辺と左辺の値を比較する演算 == 等しい != 等しくない >= 以上 <= 以下 > より大きい <より小さい is 同一のオブジェクト isnot 同一のオブジェクトではない。 <論理演算> 論理型(ブール型):true、false 真偽値:真または偽と判断されるもの。 真:True、非ゼロの数値、空でない文字列、空でないタプル、 空でないリスト、空でない辞書、NONEでないオブジェクト 偽:false、ゼロ、空文字列、空のタプル、リスト、空の辞書、None 論理積  AND A と B A 真 B真  真 A真  B偽  偽 論理和 or AまたはB A真 B偽 真 A偽 B偽 偽 辞書を利用した集計 数値の合計を計算することを集計という 制御フロー if文 条件式を書ける。 for文 繰り返し ☆冗長性の排除  プログラミングをするときは同じことを何度も書かない。 繰り返しはブロックで書かれた処理が何度も繰り返し実行される。 for文はブロックの処理を何度も繰り返す。 while文・・・式の値が真である間実行を繰り返す。 式を判断して、結果が真の場合は次の行以降のブロックの処理を繰り返す。 <関数> 処理に名前をつけたもの。 値を渡すと結果を返す。 ①引数と呼ばれるデータを受け取る ②定められた処理を行う ③結果を返す 〇関数の定義 関数はいくつかのステートメント(処理)を一つのまとまりにして 名前をつけたもの。 関数はdefで定義する。 巻子に値を渡せる ➡ 渡す値を引数と呼ぶ。 関数は呼び出されたときに実行される。 関数名の後ろにカッコをつける 〇戻り値 関数の処理結果を呼び出し元で利用できる。 戻ってくる処理結果を戻り値と呼ぶ。 return文を実行すると、関数の呼び出し元に指定した値を戻す。 return文に複数の値を指定すると。複数の戻り値を戻せる。 <モジュールの関数呼び出し> モジュールに存在する自作の関数を呼び出して利用できる。 モジュールはPythonの定義や文が入ったファイル。 ファイル名はモジュール名に接尾語「py」をつける from ファイル名 import モジュール名 最初にPythonには実行されるときに最初から値が代入されている 特別な変数がある。 例えば_name__ 何が代入されているかというと モジュール名が入っている。だがモジュールとしてimportされる訳ではなく 直接記述のあるファイルを実行した場合だけ特別に_main__という文字列が 代入される。 これでファイルがimportされて使われているのか 直接実行されているのかを見分けられる。 なぜこのような機能があるか。 それはプログラムを書いた時点では、importされて使われているのか 直接実行されるのかがわからないから。 関数は後で呼び出して利用する場合がある。 そんな時、元々ファイルに書いてある関係ない処理が実行されると 使いづらいので、importされたときは、処理が実行されないように if ・・・・を書いておく。 <無名関数 ラムダ式> ラムダ式を用いて名前のない関数をかける。 名前のない関数を無名関数という。 名前が必要ない小さな関数を作る為の機能。 <モジュール> 呼び出すだけで便利に使える処理を集めたもの。 import モジュール名と書いて呼び出すと利用できるようになる。 <ファイル出入力> ファイルを利用するには、ファイルを利用できる状態にする必要がある。 これを「ファイルを開く」という 終わったら閉じる。 open('ファイルパス')で開いてプログラム中でファイルオブジェクトとして 利用する。 file = open('furuit.txt',encoding='utf-8') print(file.read())) file.close() [ファイルの読み込み] ファイルの内容を読み込む。 readを利用するとファイルの全内容を読み込める。 readline()を利用するとファイルの一行分を読み込む。 readlines()はファイルの全行のリストを返す。 ループを利用すると、ファイルを一行ずつ読み込める。 rstrip()は改行を削除する [ファイルの書き込み] 開くときにモードを指定する。 r 読み込み専用。省略可能。 w 書き込みする時に指定。ファイルが存在しない場合、新しいファイルが作られる。 x ファイルが存在しない場合のみ、ファイルを作成して、 書き込む。 ファイルが存在する場合は何もしない。 a 末尾に書き込み。ファイルが存在しない場合はファイルを作成して 書き込む。 f.write(書き込む文字列でファイルに文字列を書き込む。 <標準ライブラリ> input() プログラムの外部からの入力を受け付ける。 ユーザが実行画面で入力した文字をプログラム中で利用できる。 <ソート> リストに格納されているデータを並べ替えられることをいう sorted()関数 小さい順に並ぶ。 list.sort() 引数にreverse = Trueを指定すると 降順に並べ替えられる。 <エラー> エラーには構文エラーと例外の2種類がある。 構文エラー 実行前に発生するエラー 例外 実行中に発生するエラー 例外処理 実行時に例外が発生した場合の処理をかける。 構文エラー・・・コードの書き方が間違っている。 〇syntaxエラー 例外エラー 〇nameerror 定義されていない変数名を利用した場合に発生する。 このエラーが発生したら変数名を打ち間違えていないか 変数を定義し忘れていないかチェック。 〇indexerror シーケンスの添え字が範囲外の場合に発生する。 〇indentationError プログラムの前に不要な空白があったり必要な空白がないというエラー。 行の先頭に余計な空白がある。 unexpected indent = 期待されていないインデント expected an indented block = 期待されるインデントがない 〇import Error import文でモジュール定義を見つけられなかった場合や from・・・・import文で指定した名前を インポート出来なかった場合、発生する。 〇typeError 関数などで適切でない型のオブジェクトが利用された場合に発生する。 データ処理用ライブラリ・・・ ジュピターノートブック:OSSのwebアプリケーションで プログラミングコードを含むドキュメント。 対話式にコードを実行できて、ノートブック形式のドキュメントを 作成できる。 このドキュメントにはPythonコードとその実行結果を合わせて 保存できる。 作成したドキュメントはEメールに添付したり、dropbox、Githubなどで共有できる。 pandas: 強力なPython製のデータ分析ツール。 主なデータ構造であるSeries(一次元:リストのような形式)とDataframe (2次元:表のような形式)は財務、統計、その他多くの工学分野での データ処理に利用されている。 pandasが提供している表形式のデータをサポートするデータフレームクラス (pandas.Dataframe)を利用して、表形式のデータに対して、 SQLのような問い合わせ、データを加工して新しい列を追加、 複数のDataframeを結合するなどできます。 pandasはファイルフォーマットやデータベースから データを取り込み、DataFrameに変換でき、 様々な形式で出力できる。 pandasを利用するとpythonのfor文を用いて1行ずつ処理するより シンプルにテーブルのデータを追加、変更、分析できる。 <pythonとデータ分析> 科学計算、統計解析、機械学習などのライブラリが 豊富で、容易に使える。 作業が自動化できる。 汎用プログラミング言語なのでシステム化などもできる。 データ分析以外でも数値計算、行列計算、 統計解析、回帰分析、多変量解析や 機械学習、ディープラーニング、クラスタリング、 分析結果の可視化など多くのことができる。 <もう一度基本から> 書きやすく読みやすいように設計されている。 人工知能、機械学習に最も使われている。 pythonの統合開発環境としては、 ジュピターノートブック、パイチャーム、アトム、サブライムテキストなどが 良く使われている。 ジュピターノートブックは、起動中にデータをメモリに保持して、 更にデータ加工のログを残すことができるため、 データの前処理に適している。 またフレームワーク(汎用的な機能をまとめた基盤となるソフトウェア)も 数多く用意されており、webアプリ制作であれDJANGO(ジャンゴ)FLASK(フラスク)などが 有名。 <クラス・オブジェクト指向> クラス・・・設計図 クラスは「コンストラクタ、メンバ、メソッド」の 3つで定義される。 コンストラクタ・・・クラスを呼び出した際に 最初に実行される「初期化用の特殊なメソッド」 インスタンスを生成するときに、 一度だけ呼び出される。 メンバ・・クラス内で使用する変数。 他のオブジェクト指向言語では「プライべート(クラス外からアクセスできない)」と パブリック(クラス外からもアクセスできる)の2種類があるが、 pythonでは、全てパブリックになる。 ただしプロパティという手法を使うことで アクセス制限も可能。 クラスで生成するオブジェクトをインスタンスという。 ☆一つしかインスタンスを生成しないときは モジュール。 複数のインスタンスを生成する場合はクラスを定義することが 推薦されている。 時間を計算するためのtimeモジュールは プログラム内に一つあれば十分かもしれないが 複数のインスタンスを生成することが多いので クラスで定義しておいたほうが、無難。 <Pythonの標準ライブラリ> datetime・・・日付や時刻の取得。 文字列⇔日付の変換、n日後、n日前の 日付データを取得等。 shutil・・・高水準なファイル操作を提供する モジュール。 ファイルのコピーやディレクトリに対する操作を非常に    簡単に書くことができる。 collections・・・appendやpopを高速に行う、 OrderedDict(順序付き辞書)、defaultdict(デフォルト値のある辞書)、 Counter(カウンター付き辞書)等がある。 効率的なアルゴリズムの実装や プログラミングコンテスト等ではお世話になる。 pdb・・・ブレークポイントの設定や、 ソース行レベルでのシングルステップ実行等の 機能を提供するデバッガ。 インタラクティブシェルでの実行や、 pyなどのScriptファイルとして実行することも出来る。 timeit・・・pythonプログラムの実行時間を 計測するモジュール。 コード1つ1つに対して時間を測ることができる。 細かいパフォーマンスを計れる。 NumPy・・・科学技術計算などで配列や行列の演算を高速で行うための 研究などで数学的な計算をしたいときに、非常に有効なライブラリとなっている matplotlib・・・pythonでデータをグラフにプロットできるようになる。 グラフの表示にはmatplotlib.pyplotモジュールのplotおよび showを使用する。 scipy・・・numpyで行える配列や行列の演算を行うことができ、 加えてさらに、信号処理や統計といった計算ができるようになる。 <外部ライブラリ> tqdm・・・ループの進捗を確認したいときに、以下のような進捗バーを簡単に作成することが できる。 py2exe・・・pythonScriptをウィンドウズ用のexeへ変換するライブラリ。 simplejson・・JSONのエンコード、デコードライブラリ。 標準ライブラリにJSONがあるがそれと同じように使用することができて、 更に高速に動作するのが特徴。 reguests・・・使いやすいhttpライブラリ。 標準ライブラリにurllibがある。 requestsは非常に使いやすく、最近の書籍でもよく薦められている。 pep8・・・ソースコードのチェックツール。 pythonのスタイルガイド。 使うとどこが違反しているかを教えてくれる。 <python開発環境> Anaconda・・・python自体の他にscipyやNumpyなどのデータサイエンス系の 必要パッケージもまとめられたパッケージのこと。 pycham・・・・pythonの統合開発環境であり、 OS限らず、Python開発でIDE使うなら実質これ一択。 b aがbよりも大きい a <= b aがb以下である a >= b aがb以上である a <> b aがbと異なる a is b aがbと等しい a is not b aがbと異なる(notする) a in b aがbに含まれる(bにinしている) a not in b aがbに含まれない(not in している) 分岐 if 条件: 処理 elif 条件: 処理 else: 処理 関数 def 関数名(引数, ...): 処理 呼び出しは関数名(引数)のように記述する。 def ex(value): print(value) ()を出力する関数 ex(テスト) ➡テスト と出力される モジュール import モジュール import random import random.randint from random import randint from random import * 配列 list = ["a","b","c"] ☆追加するには・・・list.append("d") [末尾に追加] list = ["a","b","c","d"]になる list = ["a","b","c"] list.insert(1,"x") [指定した位置に追加]この場合(位置,"要素")と記述する list = ["a","x","b","c"]になる ☆切り出し list = [5,6,7,8,9] s = list[:2] s = [5,6] s = list[2:4] s = [7,8] s = list[1:] s = [6,7,8,9] 削除 ①要素を指定 list = ["a","b","c","d"]  list = ["a","b","d"] list.remove("c") remove(要素)でその要素を削除 ②indexを指定 list = ["a","b","c","d"] 「結果は上記と同じ」 list.pop(2) popで指定したインデックスの要素を削除 ③list = ["a","b","c","d"] list = ["a","b","c"] list.pop()  指定なしだと末尾が削除される。 ☆タプル tuple = (1,"A",true)         for 繰り返し for 変数 in リスト変数: print(変数) for 変数 in タプル変数: print(変数) while 変数 比較演算子 数値:  条件が成立している間 print(文字列)        この文字列を繰り返す。   変数 + 1  1つずつ上がる。 ☞「○○の値になるまで」「○○を越したら終了」など。 辞書(変数) = {キー : 値,・・・で記述} print(辞書変数[キー]) ☞そのキーとセットになっている値が出力される。 ⦿削除 del 辞書変数[キー]  ☞そのキーと値が両方削除される。 with構文 所定の機能をより安全かつ簡潔に使う構文。 例えば、通常ならファイルをオープンした後、 クローズしなければならないところが、 withを使うと、ファイルのオープン後のクローズが不要になる。 ◎例外が発生しても必ずcloseされたり、closeを忘れずに済む。 with構文が使える関数は、必ず例外処理やcloseなどの終了処理の 記述が必須となる。 pythonで使えるデータは基本的に「文字列」と「数値」 インデントはスペース4つ。 ☆変数と定義。 関数の外で作った変数 ➡グローバル変数 関数の中で作った変数 ☞ローカル変数 変数だけの宣言はできない。 color エラー 変数 = 値 の式は絶対!! ☆クラス クラスもオブジェクト。 クラスからオブジェクトを作ることを「インスタンス化」という そのオブジェクトを「インスタンス」という。 インスタンスメソッドの第一引数にはインスタンス自身を表すselfを必ず指定。 コンストラクタは初期化メソッド__init__を使う。 コンストラクタ・・・クラスを定義する場合、そのクラスのインストラクタが 生成されるときに呼び出される初期化メソッドを定義できる。 これを「コンストラクタ」という。 記述の仕方☆ def __init__(self,src1,src2,・・・): ※クラス文中に記述する。