少食は本当にいいのか

少食の効果

「腹6分目」マウスは満腹マウスより二倍長生き

  • 腹が減ったと感じてから三時間は最大の集中力、身体能力に
  • 体が軽くなる
  • 実際に病気(認知症)が少食により完治した例は多数
  • それまで消化に使われていたエネルギー(一食およそ三時間分の睡眠時間を必要とする)を必要としなくなり、睡眠時間が減り、スタミナがつく。
  • 10時に就寝ばベスト、だいたい4時に目覚めるようになるらしい
  • 食べ過ぎによる病気は大抵少食で治る
  • 必要なカロリーを摂取する必要はない
  • 当然体重は減るが、減り続けるわけではない。筋トレの効果も期待していい
  • 加齢臭が消える
  • 当然お金、時間が浮く
  • 免疫力がつく

実行方法

一日一食!

  • 一日三食少しづつではない
  • 空腹感こそが大切
  • 先ずは朝食抜きの一日二食午前中は耐えきれなかったらお茶か水
  • 20:00前に腹八分目まで食べる
  • 10:00までに寝る
  • やけ食いは摂食障害につながる。効果もない
  • 最初辛くてもだんだん幸福感を感じれるようになる

間違った認識

以下は全部嘘

  • 一日三食食べないとからだに悪い
  • カロリー理論
  • お腹が空くと力が出ない
  • 朝食を抜くとエンジンがかからない
  • 満腹まで食べないと満足できない
  • 肉を食えばスタミナがつく
  • 牛乳、チーズは体にいい

結論

一日一食「和食」を食べて、22:00に寝ろ。以上。

Ipython, Numpy, pandas, matplotlib, SciPy

Ipython


IPythonは、Pythonの対話型インタプリタを強力に拡張したもの。

  • 補完機能が充実している。tabキーでの候補を活用
  • イントロスペクション。変数名、オブジェクト名、組み込みモジュール、自作のクラスなどに、?をつけるとそのオブジェクトの情報が表示さらる。??でさらに詳細な情報を表示。
  • マジックコマンド—>デバッグなどの開発補助ツール群の提供、及びIPython自体の提供が目的
    • %run—空の名前空間の環境でスクリプトを稼働させる。このコマンドにファイル名を渡すと、スクリプトが実行し、定義したあらゆる変数に対して後から参照が可能。実行するたびに再度読み込むため、スクリプトの変更があった場合にも即座に反映される。
    • %paste—>クリップボードからのコード片の貼り付けの前に書くコード。即時実行される。
    • %cpaste–>pasteと同様。貼り付け時にプロンプトを出す。
    • (p.62)表
  • キーボードショートカット(p.59)
  • ipython -pylabで起動するとMatplotlib機能付きで起動。
  • コマンド履歴の利用
    • Ctrl -Pあるいは↑キーで、Ctrl -Nあるいは↓キーで、入力履歴を探せる。
    • iX(Xは行番号)でその行の入力にアクセス、Xで出力を見直せる。
    • セッション全体をロギングできる。logging は、あるソフトウェアが実行されているときに起こったイベントを追跡するための手段。
  • OSとの統合
    • システムシェルのコマンドを使うのは,頭に!をつけて実行するだけ。
    • ディレクトリブックマーク機能(p.69)
  • ソフトウェア開発ツール
    • 対話的デバッガ—例外の発生した時に%debugコマンドを入力する。(p.70)使って慣れるしかない。
    • 処理時間の計測–%timeit使っとけば良さそう
    • プロファイリング
      • cProfileモジュールを用いて任意のコードブロックをcProfile指定で起動し、その結果を関数ごとの消費時間のまとめとして受け取る。
      • IPythonでのプロファイリングは%prun(任意の命令),%run -p(完全なコード)を用いる。(p.76)
  • IPython HTMLノートブック
    • $ ipython notebook –pylab=inline で起動しない

NumPy 基本編


NumPy(Numerical Python)とは科学技術計算やデータ分析のためのPythonパッケージ。 http://wbhappy.hatenablog.jp/entry/2015/02/06/210000 http://pppurple.hatenablog.com/entry/2016/04/17/211855

NumPy ndarray:多次元配列オブジェクト
  • ndarrayの生成
    • np.array(data1) この列挙変数がネストしていて、ネスト内の要素数が同じであれば、多次元配列を返す。
    • data.shape 配列次元数,サイズ
    • data.dtype 要素の型
    • np.zeros*1 全ての値が0の多次元配列オブジェクトを生成
    • np.ones*2 要素を初期化して戻す。
    • np.arrange() 等間隔に増減させた値で要素を満たす。
    • (p.93)
  • ndarray要素のデータ型
    • np.array([1, 2, 3], dtype=np.float64) のように要素のデータ型の解釈を指定,変更できる。少数型を整数型にキャストした場合少数部は切り捨て。astype()でデータ型をキャスト.
    • NumPyのデータ型(p.94表)
  • インデックス参照とスライシング

    • 一次元配列の場合、リストの考え方と同じ方法でデータを指定できる。
    • arr[5:8]=12で三つも要素が12に変わる。
    • 二次元以上配列の場合、arr[0,2]のように階層的にアクセスすればいい。(p.98)
    • : を使うことで、スライス表現できる。スライス表記へのスカラー値の代入はその範囲全てへの代入を意味する
    • 配列のインデックスにbool値の配列を与え、配列を参照することが出来る。(ブールインデックス)(p.101)
    • 配列のインデックスに整数の配列を与え、配列を参照する。(ファンシーインデックス)(p.104)
    • .Tで転置行列(p.106)
  • ユニバーサル関数

    • ユニバーサル関数とはndarrayを対象に、要素ごとの捜査結果を戻す関数。引数に一つのndarrayを取るものを単項ufuncと呼び二つのndarrayを引数にとり、一つのndarrayを返すような処理を2項funcという。(p108,9)
  • ndarrayを用いたデータ処理
    • np.where(条件,真の値の場合,負の値の場合)を用いて条件制御。
    • 統計関数は、ndarray配列自体、あるいは特定の軸を中心とした統計処理を提供。(p.115)
    • python基準のリスト型と同じくsort関数で並び替える。
    • 一次元ndarrayを対象とした基本的な集合関数(p.118)
      • np.unique–配列要素から重複を取り除きソートした結果を返す。
  • ndarrayのファイル入出力
    • ndarrayの保存:バイナリ形式
      • np.save(‘保存名’,ndarray名)で保存、np.load(‘保存名’)で読み込み
      • np.savez(p.118)で、複数のndarrayを圧縮できる。
    • ndarrayの保存:テキスト形式
      • arr = np.loadtxt(‘テキスト名.txt’,delimiter = ‘,’)で配列に読み込みできる。
  • 行列計算
    • 四則演算では各要素同士が演算される。* は、要素同士をかけるだけ、
    • np.dot(x,y)で行列の掛け算に!
    • 標準的な行列の分解、転置、行列式の計算機能は、numpy.linalgモジュールで提供される。
    • 頻出の線形代数関数(p.121)
  • 乱数生成
    • randomモジュールでは乱数生成のための様々な確率分布を用意している。(p.122)

pandas入門


*1:縦, 横

*2:)) 全ての値が1の多次元配列オブジェクトを生成

  • np.empty((,,..

  • pythonことはじめ

    python事始め

    Chapter1 予備知識

    Chapter2 基礎

    • ステートメント:プログラムにおけるそれぞれの命令のこと
    • str(数値):数値を文字列に変換して戻す
    • float(数値を表す文字列):文字列を数値にして戻す
    • input([プロンプト]):ユーザーが入力した文字列を戻す
    • プロンプト:主にキーボードから文字で命令を入力して操作を行うシステムにおいて、システムが命令入力を受け付けられる状態にあることを示すために表示される文字や記号の並び。
    • pythonの数値型は整数型(int),小数点型(float)に分けられる。
    • リテラル:プログラム内に記述した値そのもの
    • list = [ , , , , ]    indexで指定、取り出し、変更可能、len()要素数
    • tuple = ( , , , , )    indexで指定、取り出し可能、変更不可(イミュータブル)
    モジュールの使用
    from モジュール名 import クラス名1, クラス名2,....
    #コンストラクタを使用してクラスのインスタンスを作成
    変数 = クラス名()
    #インスタンスにメソッドを実行
    さっきの変数.メソッド名(引数1, 引数2,..)
    乱数の使用(randomモジュール)
    import random
    randint(a,b);a以上b以下のランダムな整数を戻す
    randrange(a):a未満のランダムな整数を戻す

    Chapter3 処理の変更、繰り返し

     

    if文—分岐条件を細かく指定可能
    if 条件式A:
        処理...
    elif 条件式B:(条件式Aが成立しなかった場合の)
        処理...
    else:(それ以外の場合)
        処理...
    値1 if 条件式 else 値2
    ループについて
    for 変数 in イテレート可能なオブジェクト:
        処理1
        処理2
        .
        .
    #以下ループが完了した場合の処理(breakは終了であり以下の処理は行われない)
    else:
        処理(ループが完了した場合に実行される)
    • rangeオブジェクトでカウントアップダウン
    range([開始,] 終了[, ステップ])---開始から終了までをカウントするrangeオブジェクトを戻す。

    例えば・・・整数の総和を求める

    end = int(input("数字を入力してください: "))
    num = list(range(1, end + 1))
    print(sum(num))

    whileループ

    while 条件:
        処理1
        処理2
        .
        .

    forループ、whileループでは、break文(ループの中断)、continue文(ループの先頭に戻る)を用いることが可能。

    • enumerate(イテレート可能なオブジェクト)–インデックスと要素のペアをタプルにして順に戻す。だから変数を二つ用意する。
    • zip(リスト1, リスト2, …)–複数のリストをイテレートして、要素をまとめてタプルとして戻す。指定したリストの数だけ変数を用意。
    例外の処理
    try:
        例外が発生する可能性がある処理
    except 例外:
        例外が発生した場合の処理
    .
    .
    else:
        例外が発生しなかっ場合の処理

    Chapter4 組み込み型

    インスタンス.メソッド

    文字列に対してメソッドを実行するには、strクラスのメソッドを使う。(基礎python.p159表)

    文字列[開始位置:終了位置+1]

    find(),format()メソッド(p162-3)

    {引数の番号:.桁f}
    {引数の番号:,}
    リストやタプルの基本操作

    split(区切り文字)、index()、append()、remove()、revese()メソッド(p169-74)

    {キー1:値1, キー2:値2,...}

    key(),value(),items()メソッド(イテレート可能)はP183-4 国名リスト—>国名:国名の数を実行

    countries = [,,,,,,,]
    #空の辞書を用意
    results = {}
    #さっきの辞書に国と得票数を格納
    for country in countries:
        if country in results:
            results[country] += 1
        else:
            results[country] = 1
    #結果の表示
    for country, num in results.items():
        print("{}:{}".format(country.num))
    #結果をソートして表示
    for country in sorted(results.item(), key=lambda c:c[1], reverse=True):
        print("{}: {}".format(country[0], country[1]))

    要素の重複を許さないデータ型に「集合」があり、setクラスのインスタンスである。 {要素1,要素2,..}という型にすれば重複がないようにセットされる。イテレート可能であり、add(),remove(),clear()メソッドで編集(p188)できる。

    リスト---[式 for 変数 in イテレート可能なオブジェクト]
    条件を満たす要素を抽出---[式 for 変数 in イテレート可能なオブジェクト if 条件式]
    辞書---{キー:値 for 変数 in イテレート可能なオブジェクト}
    集合---{式 for 変数 in イテレート可能なオブジェクト}

    Chapter5 オリジナルな関数

    関数定義と関数呼び出し
    def 関数名(引数名1,引数名2,..):-----仮引数
        処理
        .
        .
        return 戻り値
    #引数にリテラルor変数を指定
    変数 = 関数名(引数1,引数2,..)----実引数、キーワード引数でも可

    変数の有効範囲により、グローバルスコープ(関数の内外関係なくアクセス可)とローカルスコープ(関数内部飲みアクセス可)に大別される。

    可長変引数

    可変長引数とは、任意の数の引数を受け取れる関数.引数名の前に*をつければ可変長引数として指定される。例えば、任意の数の値の平均を戻す関数を示す。

    def average(*num):
        sum = 0
        for n in num:
            sum += n
        return sum/len(num)
    print(average(2,8,10))

    仮引数名の前に**を記述すると関数呼び出し時にキーワード指定された任意の数の引数を辞書として受け取れる。

    def func(**dic):
        print(dic)
    func(name = "田中", num = 1)
    
    >{'name': '田中', 'num': 1}---辞書になる!
    lanbda式で無名関数を定義する
    • 小規模な関数を手軽に定義するための書式
    lambda 引数1, 引数2, ...:処理
    関数の活用
    • map関数
    def to_cm(inch):
        return inch * 2.54
    inches = [2, 5.5, 6, 4, 6.5]
    cms = list(map(to_cm, inches))    ------map(関数, リスト)
    print(cms)

    無名関数、リストの内包表現などを使用して短くして書き直すことができる。

    • filter関数(p228)
    • sort(),sorted()関数はキーワード引数keyを使用して、ソートの順番を変更できる。(p229-30)
    • ジェネレーター関数やジェネレーター式を使用すると、イテレート可能なオブジェクトを簡単に定義できる。(p236-242)

    Chapter6 テキストファイルの読み書き

    テキストファイルを読み込む

    1.ファイルを開く open(ファイル,モード,エンコーディング)—->引数で指定したファイルを開きファイルをオブジェクトとして戻す

    • ファイルから読み込むにはモードを “r"にしてファイルを開く
    • ファイルに書き込むにはモードを"w"にしてファイルを開く
    • ファイルに追記するにはモードを"a"にしてファイルを開く

    2.テキストファイルを読み込む

    • read([サイズ])—–>ファイルから指定サイズのデータを読み込み、文字列として返す。
    • readlines([サイズ])>ファイルから全ての行を読み込みリストとして戻す。
    • readline()——–>ファイルから1行ずつ読み込み文字列として戻す。
    • for文でファイルオブジェクトを直接イテレートして1行ずつ読み込むことができる。

    3.ファイルを閉じる

    • ファイルを使い終わったら、close()メソッドでファイルを閉じる。
    • ファイルを開く時点でwith文を用いると、ブロックを抜けた段階でファイルが自動的に閉じられる。
    with open(ファイル,モード,エンコーディング) as ファイルオブジェクト:
        ファイルの操作
    テキストファイルに書き込む

    読み込む時の、2にあたるところを以下のメソッドに変える

    • write(文字列)——>引数で指定した文字列をファイルに書き込む
    • writelines(文字列)->引数で指定したリストの要素をテキストファイルに書き込む

    ファイルが存在しているかどうかを調べるにはosモジュールのpath.exist()メソッドを使用(p261)

    Chapter7 オリジナルのクラスを作成する

    クラス作成の基本
    • オリジナルのクラスはclass文で定義できる。
    class クラス名:
        def メソッド1:
            メソッド1のブロック
        def メソッド2:
            メソッド2のブロック
             .
             .              
    • クラスの初期化(インスタンスの初期化を行うメソッド)はinit()メソッドで行う。また、必ず第一引数としてselfを渡す。selfは自分自身のインスタンスを示す。
    class クラス名:
        def __init__(self, 引数2, 引数3,..): 
            初期化メソッドのブロック
    #クラスの生成(ここで、number, name, heightはインスタンス変数)
    class Costomer:
        def __init__(self, number, name, height):
            self.number = number
            self.name = name
            self.height = height
    #インスタンスを生成        
    taro = Costomer(101, "佐藤太郎", 180)
    print("{}: {} {}".format(taro.number, taro.name, taro.height))
    #heightを変更
    taro.height = 170
    print("{}: {} {}".format(taro.number, taro.name, taro.height))
    
    #実行結果
    101: 佐藤太郎 180
    101: 佐藤太郎 170

    この場合、deの前にbmi = 22を追加すれば、インスタンス全てのbmiが22で共通になる。(p.276)また、インスタンス生成後にCostomer.bmi = 23を書き込めば、インスタンス全てのbmiが23に変更される。

    クラスの活用
    • クラスを定義しインスタンスを生成した後でも、変数やメソッドを追加できる。
    • クラス変数を定数として追加するときは大文字が好ましい。ex)Costomer.LIMIT
    • 変数やメソッドの名前の前に「__」をつけると外部からアクセス[できない]ようにできる。これをカプセル化という。カプセル化した変数に外部からアクセスするにはゲッターメソッド/セッターメソッドを用意する。(p.283)
    • 外部からアクセスして[欲しくない]変数やメソッドは、名前の前に「_」をつける。
    • property()関数でプロパティを使用すると、アクセッサメソッドを変数のように扱える。P.286
    • オリジナルな関数やクラスをモジュールとして保存でき、モジュール名はファイル名から.pyを取り除いた名前になる。当然、モジュール名.クラス名(–)の形式でクラスを利用できる。また、from–import文の使用もできる。(p.288-291)
    クラスを継承する
    class サブクラス名(スーパークラス名): 
        クラス本体
    • 組み込み型を継承することで機能を拡張できる