Pythonチュートリアル2

9章 クラス

9.3 はじめてのクラス

class クラス名(object):

        def __init__(self):・・・インスタンス作った際に実行

              処理内容(ここはプロパティの宣言が多い)

  def メソッド名(self):

    処理内容

     def __del__(self):・・・インスタンスを作った際に実行

 

d=クラス名()・・・ここでインスタンス出来る。__init__()を実行される。

 

・__init__もメソッドコンストラクという。

・__del__もメソッドデストラクという。

・selfとは・・・クラスの場合、関数(__init__やメソッド)は自分自身に値を保持させられない。

・selfとは・・・インスタンス自身を参照する。

・selfがないと・・・自分自身にアクセスできないので、自分自身のプロパティが分からなくなりエラーとなる

・メソッドは・・・メソッドからメソッドを呼び出せる。 

・デストラクタは・・・プログラムが処理中に動的に確保したメモリを解放する。

・デストラクタは・・・プログラムの最終行で実行される。明示的にdelを使っても良い。

 

 

11章 標準ライブラリめぐり -part2

11.2 出力整形

debugとかをする際に、値の出力はしたいんだけど、その出力が長すぎるのもいやだみたいなとき(データを出力させたいときなど)。

例えば、1万個あるような配列なのだけど

・reprlib.repr・・・出力の長さを制限

 

11.3 バイナリーレコードの処理

・structモジュール、pack()、unpack()

・unpack()関数:バイナリ=>10進 変換

・pack()関数:10進 => バイナリ 変換(タプルで返される)

11.5 ログ取り

・ログ出力用のモジュール : logging

 

12章 仮想環境とパッケージ

12.1 イントロダクション

・1つのPCに違うバージョンのPythonを入れることを仮想環境と呼ぶ

・仮想環境:virtual environment、virtualenv

 

12.2 仮想環境の生成

・仮想環境の終了:deactivateコマンド

 

12.3 pipによるパッケージ管理

・インストール

pip install パッケージ名 

pip install request==バージョン番号

 

・パッケージ名、バージョンの表示

pip list

 

・パッケージ内容詳細

pip show パッケージ名

 

14章 対話環境での入力行編集とヒストリ置換

インタープリタとファイル・・・この2つは対極的

インタープリタ・・・結果をprint文なしに画面表示できる

14.1 タブ補完とヒストリ編集

・変数、モジュール名補完は、インタープリタの起動時に自動で有効 =>[Tab]キー

14.2 その他の対話型インタープリタ

・IPython

Pythonチュートリアル

2章 Pythonインタープリタの使い方

2.1インタープリタの起動

インタープリタとは・・・Jupyer Notebookのコマンドラインのこと

インタープリタの終了方法・・・[Ctrl]+[Z] もしくは quit()

python -c コマンド」

python -m モジュール名」

 

3章 気楽な入門編

3.1 Pythonを電卓として使う

3.1.1数値

17/3・・・除算(最後は四捨五入)

17//3・・・切下げ除算(整数除算)

17%3・・・除算の余り

 

・対話モードでは最後に表示した式を変数「_」に代入する

複素数の接尾辞  「j」「J」

3.1.2文字列

word[-1]・・・「-1」は最後のキャラク

・-0は0と同じことなので、負のインデックスは-1から始まる。

・スライシング可

word[2:5]・・・位置2(2含む)から5(5含まず)まで

・始点は常に含まれ終点は常に除外される。

・大きすぎるインデックスを指定するとエラー・・・word[1000]とか

・スライシングは大きいインデックスを指定してもエラー出ない・・・word[4:1000]とか

・文字列は変更不能体(immutable)

    word[0]="J"とかで変更かけられない

・変更したい場合は、新しいメモリ(文字列)が必要

 

・置換・・・文字列.replace(置換元,置換先,置換回数)

・連結と繰り返し・・・+で連結、*で繰り返し

3.1.4リスト

・リストは異なる型を入れられるが、普通同じ型を入れる

・スライシング可

・リストは変更可能体(mutable)

・ビルトイン関数len()はリストに使える・・・len(['a','b','C']) は 3を返す

3.2プログラミング、はじめの一歩

・print関数 のキーワード引数[end=]・・・出力末尾の改行の抑制や、出力末尾の他の文字列に変更可能

・end='' がないと勝手に改行しおる!!

#改行なしで出力したい時に「end=''」を使います。
print(text_a, end='')
print(text_b)
#複数の文字列の間に空白を開けたくない場合にも使えます。
print(text_c, end='')
print(text_d, end='')
print(text_e)

4章 制御構造ツール

4.2 for文

・反復には2種類ある。シーケンスに対して、シーケンス内順序で反復と

 数字の連なりに対して反復。

・for文にもelseがある。最後に必ず通るもの。ただ、breakを通るとelse節は通らない

*注意:ループはelse節ある。(breakを通るとelse節は通らない。)

4.3 range()関数

range(start,end,skip)

 4.7 関数(無名関数、ラムダ式

・関数(無名関数)の定義

 

 def 関数名(仮引数):

   構文

 

 lambda 仮引数:構文

 

・関数の種類は3つある。

  -可変長引数・・・可変長とはタプル型渡し辞書型渡しを含む関数

    例1)タプル型渡し可変長引数

         定義側 def spam(ham,egg,*arg):

       コール側 spam(1,2,3,4,5)

                           つまり、ham=1,egg=2,arg=(3,4,5)で引き渡す

        勝手にタプルの要素を判断してくれる。要素数も問われない。

    例2)辞書型渡し可変長引数

       定義側 def spam(ham,egg,**arg):

                          コール側 spam(1,2,shopkeeper=3,client=4,sketch=5)

     ・タプル型、辞書型チャンポンの場合は、タプルが前、辞書が後ろ

    例3)タプル・辞書チャンポン型渡し可変長引数

       定義型 def spam(ham,egg,*arg,**arg)・・・タプルが前、辞書が後ろ

 

  -キーワード引数    <=>   位置引数

              定義 def spam(ham,egg,*arg):

    コール側

    ・関数コールする際は、必ず位置引数が先でキーワード引数を後にする

    ・キーワード引数の順序は問われない

    ・

  -デフォルト引数・・・定義時にデフォルト値を引数に与える

              使い方 デフォルトを用意しておいて、必要な時だけ変更する。

 

 

    定義側   def spam(ham,egg=1,bacon=3):

    コール側 spam(0)

                 つまり、ham = 0で残りの引数は設定不要。

 4.7.4 リストのアンパック

・リスト名の前に*を付けるとアンパックできる

>>>args=[3,6]

>>>list(range(*args))

[3,4,5]

5章 データ構造

5.1 リストについての補足

・リスト中のxの個数

 list.count(x)

 

・最初のアイテム削除

 list.remove(x)

・全削除

 list[:] =

   del list

・indexで削除

   list[2:5] =

   del list[2:5]

 

5.1.3 リスト内包

       squares =

       for x in range(10):

            squares.append(x**2)

 

      squares = list(map(lambda x:x**2,range(10)))

      squares = [x**2  for x in range(10) ]

 

リスト内包はにいくつでもfor文を入れられるが、3つ以上はダメ。

for文・if文が連続で入れ子で現れたものを1行にしたもの。

5.3 タプルとシーケンス

・タプルは変更不能体(immutable)

・タプルの初期化は()で行う。例)タプル =()

・タプルの初期化はカッコが要らない 例)タプル= 1,2,3

・タプルは、要素に「,」 例)タプル=1,<=ぶら下がったカンマ

・タプルパッキング・・・ タプル=1,2,3 

・タプルアンパッキング・・・ 要素1,要素2,要素3=タプル

 

5.6 ループのテクニック

・辞書型ループ

   for key,value in 辞書.items():

 

・シーケンスループ

   for idx, v in enumerate(シーケンス):

 

・シーケンスループ逆順

   for seq1,seq2 in reversed(シーケンス):

 

・2つのシーケンスループ

   for seq1,seq2 in zip(シーケンス1,シーケンス2):

5.7 条件についての補足

・論理演算子(ブール演算子、短絡演算子

・比較演算子: in 、 not  in・・・シーケンスに値が存在

5.8  シーケンスの比較、その他の型の比較

・最初のアイテムを比較し、異なっていれば結論、同じならば次のアイテムへ進む

  (1,2,3) < (1,2,4)

 

 

6章 モジュール

6.1 さらにモジュールについて

6.1.2 モジュールの検索パス・・・モジュールインポート時の挙動

①ビルトインモジュール内に   モジュール名   を探す

②sys.path変数で得られるリスト内に   モジュール.py   を探す

   (モジュール検索パスは標準ライブラリのsysモジュールのsys.pathに格納)

 

6.4 パッケージ

・パッケージをimport時に発生するエラーはImportError

・このエラーは、モジュールのディレクトリが変更した際に発生。例えば、バージョンアップとかである。

try:

   from lesson_package import utils

except ImportError:

   from lesson_package.tools import utils

 

こうしていれば旧バージョン、新バージョンどちらでもimportを対応できる。

ただし、ディレクトリに変更内容の詳細を知っている必要がある。

   

 

6.4.1 

7章 入出力

7.1 手の込んだ出力フォーマット

・print関数とstr.formatメソッド

   str.format()メソッドに渡されたオブジェクトが{}に置き換えられる。

           print("{}and{}",.format("spam","eggs"))

 

 

7.2ファイルの読み書き

7.2.2 構造のあるデータをjsonで保存する

pythonプログラム中のデータ(オブジェクト、文字列)をJSON形式に変換することを

 シリアライズという

・逆変換をシリアライズという

・ファイルへのシリアライズ(JSON化):dump()

・文字列へのシリアライズ(JSON化):dumps()

・ファイルからデシリアライズ(Python化):load()

・文字列からデシリアライズ(Python化):loads()

 

 

8章 エラーと例外 

8.3 例外の処理

pythonではすべてのexceptionをcatchして次の処理に進むのはあまり良くない

・できれば、exceptionを指定してcatchする方が良さそう

8.6 クリーンナップ動作の定義

・finally節は外部リソース(ファイルやネットワークのコネクションなど)をその利用

 の成否にかかわらず解放するのに便利。

・finally節は後続の処理に影響がある変数値の設定するのに便利。

・finally節は処理が完了したことを示すログの表示するのに便利。

 

8.6.1 オブジェクトに定義してあるクリーンナップ動作

with open("myfile.txt") as f:

      for line in f:

            print(line,end="")

このwithにはtry~catchが含まれている。

◎ビルトイン関数

・range()

・len()

◎シーケンスとは

・配列と呼ばれる順序付きのコレクション:シーケンス

・リスト型、タプル型、文字列型、バイト型

◎反復子イテレータと反復可能体(イテラブル)

反復子(イテレータ:for演算子、list()関数

反復可能体(イテラブル):range()関数、リスト、タプル

反復可能体を利用する関数や構造は反復子と呼ぶ

・反復可能体=イテラブル=イテラブルオブジェクト・・・まあ元データですなぁ

     -繰り返し可能なオブジェクト

  -反復を掛けることで望みのシーケンスのアイテムを連続的に返すオブジェクト

  -空になるまで連続的にアイテムを供給する元データ・・・このイメージ

  -

  -実際にはリストを作らない

反復子=イテレータ・・・イテラブルのコピー。要素を取り出すと減っていく。

f:id:strongerthansword:20201009164703p:plain

リストからイテレータ

 

 

 

 

 

統計学と確率論をすこし

統計学のイメージ

 ・「従来の統計学」は「頻度論」と呼ばれた

「頻度論」とは

・「あることが起こる頻度」を実験・観測・数学から客観的に求めるため

・「品質管理」「実験分析」に貢献

「時間の異なるデータの活用」「少ないデータの分析」「経験を加味したデータ解析」には不向き

分類

・記述統計

  -19世紀終わりから20世紀にかけて大成

  -データの特徴を記述

    平均、分散(標準偏差

  -現状を整理

    度数分布表、ヒストグラム

  ー広く与えられたデータを整理し、有用な情報を取り出す方法論

    平均値、標準偏差、最頻値、中央値

 

・推測統計 => 機械学習へ展開

  -20世紀

  -標本(サンプル)から母集団の性質を確率的に推測

    推測には確率を使う

  -未来を予測する

  -数字で与えられたデータを、どのように分析し、どのような判断を下したらよいかを論ずる学問

  -「推定」「検定」

  -客観確率

     推計統計学は精緻な数学理論となった反面、応用には必ずしも適していない

    

ベイズ統計

  -1954年

  -「ベイズの定理を使う」が共通点で、応用が自由

  -主観確率

    母集団の前提を必要とせず不完全情報環境下での計算や原因の確率を語る

    新たに取得した情報によって確率を更新する機能が内包されている

    

     *注)結果から原因を探る定理

 

確率論

1.数学的確率(古典的確率、事象論)・・・中学、高校で学ぶ確率

   求める「場合の数」/起こる全ての「場合の数」=「場合の数」の比

   [条件1]起こる全ての「場合の数」 => 有限確定・一定

   [条件2]どの単一事象の起こる確率も等しい=一様分布=「同様に確からしい」

   [矛盾1]「同様に確からしい」場合でしか適用できない

   [矛盾2]確率を求めたいのに前提で確率がすでに定義されている

           [矛盾3]根元事象の数が無限個ある場合に分母が無限大になり確率を求められない

 

   [結論]数学的確率は上の矛盾点を感じるので美しくなく、釈然としない

 

例1)「地球に隕石が落ちてくる。陸地に落ちる確率を求めよ」という問題が

  あった場合・・・数学的確率では答えが出ない。なぜなら、陸地、地球の面積を有限の場合の数で表せないからである。数学的には、(落下)点は面積ではない。

点は面積を持たない。

 

例2)「飛行機がハイジャックされる確率を求めよ」

  ”場合の数”は、「ハイジャックされる」「ハイジャックされない」の2通り。

  「同様に確からしい」であれば、ハイジャックされる確率=50%

  ハイジャックされない確率=50%となってしまう。

  でも、実際にはこんなことはあり得ない。

 

例3)「1の目が出るまでサイコロを投げた回数」を根元事象とすれば、根元

    事象は無限個になる。

 

有限確定・・・無限の「場合の数」ではダメ。「場合の数」は有限でなければ

        ならない。

一定・・・サイコロの面がある場合は6面だが次に投げたら4面とかありえない。

                      常に6面一定でなければならない。

 

2.統計的確率(頻度論)・・・大学で学ぶ確率

   事象の起こった回数/試行回数=「発生頻度」の比

   [条件]同一条件の元で何度でも反復してAが起こるか否かを試すことが許される

   [欠点1]実験・観測を行う環境や条件を同一にするのが困難な場合がある。

   [欠点2]無限回行うことが不可能である。

 

           例1)「車の衝突回避システムの安全性の確率を求めよ」

      こんなの反復試行できない。やったら、ドライバーけがをする。

   例2)「原発の停止システムの確率を求めよ」

      危険すぎて実験できない。

      下手こいたら、放射線ばらまきまくるやないかえ。

    [結論1]理論上は分かりやすい概念であるが、現実の世界に合わせると使える

                     場面は限定される。

         [結論2]有限回のnで反復試行を打ち切り、そのときまでにaiがni回起こったと

      すれば、Piをそのときの相対頻度ni/nで近似せざるを得ない。

     

 

 

3.公理論的確率(測度論的確率)・・・大学で学ぶ確率

  1、2に数学的な厳密性を持たせたのが、これ。

  逆に言えば、1,2は数学的な厳密性に欠ける。。。というより様々な意味を

  持つので定義するのが難しいのかも。。。

  工学屋も使うし、経済学屋も使うし、結構雑学なのね。

  だから、とりあえず、3つの公理を満たせば「確率」としちゃえって感じかなぁ。

 

  重要なのは3つの公理。

  非負性、完全加法性、

  姉妹ブログで詳細

https://qiita.com/Pen_Than_Sword/items/3d34618bffdf2b775af3

 

 

参考文献

確率論:筑波大学

https://www.youtube.com/watch?v=eiVrWChM1eo

 

機械学習のプロセスとコア技術 

◎基本ワークフロー

①全体設計

機械学習の設計

③運用

 

◎全体設計

①問題の定式化

②システム設計

③データの収集

 

 

機械学習の設計とシステム運用

機械学習アルゴリズムの選択

②データ整形と特徴量エンジニアリング

③モデルの学習

④予測結果の検証と評価

⑤ハイパーパラメータのチューニング

⑥システムの運用

 

ディープラーニングの開発とビジネス

◎手軽なAI利用法

・APIサービスの利用

・主要クラウド企業のAPIサービス

・日本企業のAPIサービス

  -NTTドコモ

     画像認識、文字認識、発話理解、言語解析、シナリオ対話

  -goo

     地図API、時刻情報正規化API、形態素解析API

  -リクルートテクノロジー

  -富士通

◎AI技術の応用先

・検知

  -異常検知・予知

    故障検出・予知

    潜在顧客の発見

・予測

  -数値予測

    売上需要予測

    与信スコアリング

    発症リスク評価

  -ニーズ・意図予測

    個人レベルの発注予測

    関心の自動推定

  -マッチング

・分類

  -情報の判断・仕分け・検索

    言語、画像、

    曲の抽出・検索

  -音声・画像・動画の意味理解

    感情把握

    医療画像診断

・検査

◎AIビジネスの特徴

1.予測

 ・今までのビジネス手法

  アナリストが過去の実績データをもとに、BIツールを用いて経験と勘

  アナリストを常駐させる必要があった

  予測精度はアナリストの能力に依存

 ・事例

   ①店舗への来客者数の予測

     教師データ:過去の来客実績数

     説明変数:立地、曜日・カレンダー、天候、商品特性、広告の情報

   ②売上の予測

     教師データ:過去の売上データ

    ③工場の作業員動線分析

     作業員1人の効率化ではなく、全員の総移動量を計測・分析

2.識別

  

GCPメモ

◎誰もがディープラーニングの成果をビジネスに活かすサービス

・GCP内

・2つのサービスを提供

1.機械学習の訓練済みモデルをAPIで提供・・・汎用的なもの

  -Cloud Vision API・・・画像認識

    画像を多くのカテゴリに分類

     画像内複数物体を個別検出

     画像内テキスト読み取り

  -Speech API・・・音声からテキスト変換

    80以上の言語と方言認識、結果をリアルタイムで返答

     雑音の多い音声データに対して正確に認識

    音声コマンドによる機器の操作

     音声からテキストファイルの作成

 

  -Natural Language API・・・非構造化テキストからインサイトを得る

  -Translate API・・・翻訳

2.機械学習ライブラリ「Tensor Flow」の提供・・・特定分野のもの

  -医療・産業の特定分野向けにカスタマイズ

  -Pythonで簡単コードを書くだけでディープラーニング利用可能

  -[Tensor Flow]を使えばニューラルネットワークの調整はハイパーチューンを

   いうソフトウェアが自動で行う

 

◎APIとは

・一般的に特定の機能を持つコンピュータプログラムを外部の

プログラムから呼び出して利用するインターフェース

 

参考文献

・グーグルに学ぶディープラーニング 日経BP社

UiPath メール、UI 上の文字情報抽出

メールメッセージを取得するアクティビティ 

アクティビティ:POP3OutlookIMAP・Exchange の 4 種類

・サーバー設定[接続情報等の設定を手動]IMAPPOP3

・サーバー設定不要[接続設定を自動検出]Outlook・Exchange

 

◎受信メールのフィルタリング

[メッセージ取得]アクティビティ:変数の型 List<MailMessage>

[繰り返し(コレクション)]アクティビティtypeargument System.net.mail.MailMessage

  ー typeargument は コレクションの中身の型

     *注)System.web.mail.MailMessageと混同しない!!

 

◎送信メール本文のテンプレート活用

全文入力は、管理・変更に時間がかかる。テンプレートファイルを使用すること。

テンプレートにあらかじめプレースホルダーを設定後String.Format メソッドを活用し実行時に生成された動的なデータを置き換えること

・[テキストファイル読み込む]アクティビティを使ってテンプレート読み込むこと