3/22のつめたい夕餉(即席版)
今日がお休みだったので4連休、健康的に遊び呆けた前半戦でした。後半もたぶんそう
具体的にいうと昨日は崎山蒼志、今日はニトロデイと若いミュージシャンのライヴを立て続けに浴びた、
ついつい成熟のこととかに思いを馳せてしまう。
あと服代を計5万くらいやらかした。でもまだやらかせると思っている。
3/22の朝御飯のおとも
放送大学 動物の科学 第7章・第8章
第7章は動物の表現型可塑性とその進化。わかりやすいとこだと成虫になる季節によって色柄の変わるチョウとか。
アブラムシが化け物めいている。
春夏はメスの単為生殖によってのみ殖える。その際、餌となる農作物が足りないようだったら羽根つきの個体を産んで、他に移れるようにする。
秋になると卵の姿による冬越しの準備として卵が産める雌と、有性生殖に必要な雄が産まれる。
敵に回したくないタイプの生き物だが実際農業的観点から見たらがっつり害虫なので世知辛い。
.
第8章は動物の神経細胞のかたちとはたらき。だいたい脳の話。
脊椎動物の脳はその系統によって多様な形を呈するが、部位の並び方や基本の構造には共通点が多い。
吻側から順に、終脳→間脳→中脳→橋→小脳→延髄→脊髄。
あとのことはこないだ見ていた生理心理学の第3回の方が詳しいかも。
ニューロンと活動電位について。
エンジリッシュ
210問。単語80問、イディオム90問、フレーズ40問。
3/22の晩御飯
こないだ頼んで余してたピザを解凍。
分身の手段をご存知の方はコメント欄まで。
1/1 - 1/31の読書感想文
先週末-今週頭にかけてあまりに鼻水と頭痛がエグく、生活が破綻しかけましたわたしです。
内科で診てもらってもどうにもで耳鼻科にかかりなおしたら、風邪か花粉による鼻づまりからの副鼻腔炎というコンボが決まっていたことが判明。
これからは目には目を歯には歯を鼻には鼻をといった受診スタイルを心がけていこうと思います。
記事タイトルは誤植ではない、そうだったらいいのにな。
上記事に挙げた以外で、今年の1月に読んだ本の記録となります。
おしながき
いかにして問題をとくか / George Polya 訳:柿内賢信
グラーフ・ツェッペリン 夏の飛行 / 高野史緒
逆数宇宙 / 麦原遼
史上最強図解 よくわかるフロイトの精神分析 / 久能徹 太田裕一
やがて秋茄子へと到る / 堂園昌彦
続きを読む3/11のつめたい夕餉 放送大学 入門微分積分(第9回) / SkillHub いちばんやさしいWebデザインの基礎入門 レッスン1〜3
3月の方が師走感あるよ
3/11の晩御飯のおとも
放送大学 入門微分積分(第9回)
積分定数の意味(積分は微分の逆演算であり、対応する原始関数は多数考えられるためその不確定さをここに集約する)とか、各種関数の積分法とか、
未知の定数が含まれる式の積分のやり方(その定数が正である場合、0である場合、負である場合に分けてそれぞれ考える)とか。
以下適当に確認するのに良さそうなページ。
積分公式の効率のよい覚え方|数学|苦手解決Q&A|進研ゼミ高校講座|ベネッセコーポレーション
SkillHub いちばんやさしいWebデザインの基礎入門 レッスン1〜3
とりあえず用語とか概念知るところから始めなきゃなって思って探していて見つけたサービス。会員登録不要?
実際世に出てるWebサイトを例にとって確認する形で進行。
レッスン1: 構造
階層型: 階層が深くなると情報も詳細になっていくよう展開する
ファセット分類型: どのファセット=切り口からでも情報へのアクセスを可能とさせる
ポータル型: 様々なサイト同士をリンクする
ハブスポーク型: ひとつの拠点から複数のコンテンツを伸ばす
直線型: 目的地へとまっしぐらに誘導する
レッスン2: レイアウト
トップページ、一覧ページ、詳細ページ、フォームページからなるWebサイトがあったとして。
トップページ: そのサイトの内容がすぐわかるファーストビューを用意。
ビジュアルを押し出すかコンテンツを押し出すか広告を押し出すかはそのサイトの機能によりけり。
一覧ページ: 必要な情報(例. 美容院→店舗名、電話番号、住所、営業時間等)を配置、ここの情報だけである程度選択肢を絞れるように。
絞り込みのためのメニューや並び替え機能を設けると、さらにその検討を助けることができる。
詳細ページ: 情報自体の細かさだけでなく、その情報を見たユーザが次に取るであろう行動(例. 応募、購入、お気に入り追加等)を予測してコンテンツの配置をする。
フォームページ: ユーザが入力する手間を極力省けるように工夫(キー入力ではなく選択式、最低限必要な入力欄の可視化)
レッスン3: ナビゲーション
グローバルナビゲーション: どのページにいても表示されるメニュー。そのサイトの構造がわかるようにつくる。
その設計を考えるにあたっては、階層型、カテゴリ別、対象者別といった項目の分け方があること、
また人間の視線には決まった動き(アルファベットのZのような流れ)があるということを意識する。
ローカルナビゲーション: 各ページごとに設置するメニュー。
横並びにしたり、グローバルナビゲーションのドロップダウンメニューとして配置したり、ハンバーガーメニューのように畳み込んだり、
展開する端末のことも考えるとよい。
パンくずリスト: サイトの階層構造をユーザが把握できるように並べられたメニュー。
ステップナビゲーション: 登録や購入など、段階のある活動においていまどの地点にいるのかをユーザに示す。
そのほか、ユーザの行動を導く方法としては関連コンテンツの表示、特集ページの設置といった手段も。
そのほかかじったもの。
エンジリッシュ
https://e-lish.io/desk/user/detail/3231
70問。単語:イディオム:フレーズ = 3:3:1。
アメリカ版 大学生物学の教科書 第2巻 分子遺伝学
6.5: 細胞の減数分裂
染色体の数が増えるほど遺伝に多様性が生じる、ヒトは23対の染色体を持つため、単純な独立組合せだけを考えても通りとなる。
組合せ?ってなったけどこの独立試行のことだってことでいいのかな?
6.6: 細胞死
ネクローシスとアポトーシス。前者は損傷や栄養素の不足などによって、後者は不必要や個体への悪影響が予測されることによって。
3/11の晩御飯
納豆ご飯とお味噌汁、3割引で60円台になったキャベツメンチ×2。
3/8のつめたい夕餉 Flaskクイックスタート
3/8の晩御飯のおとも
Flaskクイックスタート
3/4の夕餉の続き。
今回ほとんどチュートリアル通りなのでさくっと、起動も前回同様python3.7 start.py
で。
ファイルアップロード
enctype="multipart/form-data" 属性をHTMLフォームにセットするのだけ忘れないでください。
そうしないとブラウザがファイル通信できなくなってしまいます。
読み切るよりも先に手を動かすのはやめようと思いました(なりました)。
start.py
from flask import Flask from flask import render_template, request from werkzeug import secure_filename app = Flask(__name__) @app.route('/upload', methods=['GET', 'POST']) def upload_file(): if request.method == 'POST': f = request.files['the_file'] f.save('アップロード用ディレクトリへのパス' + secure_filename(f.filename)) return render_template('upload.html') if __name__ == '__main__': app.run(debug=True)
upload.html
<!doctype html> <title>Upload from Flask</title> <form name="upload" action="/upload" method="POST" enctype="multipart/form-data"> <p>Please select the file to be uploaded.</p> <input type="file" name="the_file"><br> <input type="submit" value="upload"> </form>
アップロード前
アップロード後
指定したディレクトリにファイルがアップロードされました!
なおファイル名の日本語部分は検閲により削除
ちなみにここでimportされているWerkzeugはFlaskの構成ライブラリのなかでも主要なひとつで、
Webアプリケーションをつくるのに便利な機能が詰まっているものなのだそう、WSGIに準拠。
今回はクライアント側で名付けられたもとのファイル名によってアプリケーションに悪影響及ばないように色々退けてくれる(つまりさっきの検閲により削除の検閲元)、
secure_filenameが使われています。
.
※参考(にしたい)リンク達
enctype="multipart/form-data"関連
enctype='multipart/form-data'ってなんだ? - MUGENUP技術ブログ
Werkzeug関連
Werkzeug Tutorial — Werkzeug Documentation (0.14)
Web Server Gateway Interface - Wikipedia
WerkzeugでFlaskを使ったPythonのWebAppをプロファイリングする
「werkzeug」でWSGIアプリをつくろう! — PythonMatrixJp
WerkzeugとJinja2の力を融合させたやつがFlaskみたいな感じなのだろうか。超魔導剣士ブラックパラディン的な
リダイレクト及び例外の発生
start.py
from flask import Flask from flask import url_for, render_template, abort, redirect app = Flask(__name__) @app.route('/') def index(): return redirect(url_for('to_abort')) @app.route('/abort') def to_abort(): abort(401) @app.errorhandler(404) def page_not_found(error): return render_template('page_not_found.html'), 404 if __name__ == '__main__': app.run(debug=True)
page_not_found.html
<!doctype html> <h1>がんばれ!メロディー</h1>
この状態でhttp://127.0.0.1:5000/にアクセスすると、http://127.0.0.1:5000/abortにリダイレクトさせられた挙句に401 Unauthorizedのエラーが吐き出されます。鬼畜みたいな作例だ
また、/abortじゃなくて/aboutだったわとURL打ち直しても今回はabout.htmlを用意していないため、404 Not Foundのエラーとなるのですが、
URLは据え置きのままに表示が上記のpage_not_found.htmlの内容に置き換えられると、つまり独自のエラー画面を配置できるというわけですね。
余談ですが柴田聡子さんのがんばれ!メロディー、とても聴きやすくなっていいですね、っていうかアルバム名あまりにもずるい
セッション
前回ちょっと調べていくうちに足を踏み入れてしまったあたりだ。復習も兼ねて。
start.py
from flask import Flask from flask import url_for, render_template, request, session, redirect, escape import os app = Flask(__name__) @app.route('/') def index(): if 'username' in session: return 'Logged in as %s' % escape(session['username']) return render_template('index.html') @app.route('/login', methods=['GET', 'POST']) def login(): if request.method == 'POST': session['username'] = request.form['username'] return redirect(url_for('index')) @app.route('/logout') def logout(): session.pop('username', None) return redirect(url_for('index')) if __name__ == '__main__': app.secret_key = os.urandom(12) app.run(debug=True)
index.html及びlogin.html→前回と同じにつき割愛
/indexにアクセスすると前回と同じフォームが現れます。
このログインのほうのフォーム埋めてloginボタンを押すと、
遷移先のページでもusernameが保持されていることがわかる。まあ今回index.htmlにリダイレクトしてしまっているので遷移感薄いですが……。
この状態だといくら/indexにアクセスしても"Logged in……"のメッセージが出てきてしまうので、/logoutにアクセスしましょう。また最初のフォームが現れてくれます。
(ログアウトボタン作るの忘れていたのは内緒)
.
セッション使うときには秘密鍵の設定が必要みたいです。
今回はFlask.secret_keyにos.urandomで作った乱数ぶっこんで設定。
あとはこまごまだったり仕組み自体の理解が追いつかなかったり流石に眠かったりなのでここまで。
日本語訳されてるバージョンのクイックスタートだいぶ古いバージョンみたいでされてないバージョンは記法もPython3系であったし紹介されている昨日もとてもとてもなのとに気がついてしまったけどたぶん夢なので寝ます。
.
シンプルイズ奥が深い、いやたぶん見通しがいいからこそ奥まっているその様を把握しやすいのだろうか。
Djangoとか魔境めいたとこあるから……。
そのほかにかじったもの。
エンジリッシュ
https://e-lish.io/desk/user/detail/3231
今週全然手付かずなの、グラフのおかげでもろにバレる。
でもランクインしていたのでハッピー、総ユーザ数は知らんが
今日は単語70イディオム60フレーズ30。
アメリカ版 大学生物学の教科書 第2巻 分子遺伝学
カラー図解 アメリカ版 大学生物学の教科書 第2巻 分子遺伝学 (ブルーバックス)
- 作者: デイヴィッド・サダヴァ,クレイグ.H・ヘラー,ゴードン.H・オーリアンズ,ウィリアム.K・パーヴィス,デイヴィッド.M・ヒリス,石崎泰樹,丸山敬,浅井将,吉河歩
- 出版社/メーカー: 講談社
- 発売日: 2010/05/21
- メディア: 新書
- 購入: 8人 クリック: 120回
- この商品を含むブログ (23件) を見る
ブルーバックスのすごいやつ。
第6章 染色体、細胞周期及び細胞分裂の6.3節まで。
細胞分裂のうち有糸分裂の仕組みについて。
3/8の晩御飯
お昼たくさん食べたのでソイジョイとおもちでおしまい。
3/4のつめたい夕餉 Flaskクイックスタート / 放送大学 入門微分積分(第05回)
昨日買うたTIVOOがかわいい。音も良い。
3/4の晩ご飯のおとも
Flaskクイックスタート
Django Reinhardt聴きながらFlask導入してるhttps://t.co/7feoom3cs5
— 夜戦 (@1plus1plus1plus) March 3, 2019
これを言いたかったそれだけではじめたFlask。
いやうそデコレータの記法ちゃんとわかりたかったからがほんと
まだ全然その目的にまで理解を深められていないけれど、ルーティングとか機能ごとにファイル分けなくても、
実行するPythonファイルそのものを中心に組み上げていけるようにもなってるのが面白いなあって思ってます。
あといちいちサーバ再起動させなくてもデバッグ動いてくれててなんか認識したら止めてくれる(要設定)のとかもちょっとうれしい。
.
クイックスタートを中心に据えてぼちぼち試し、リクエストオブジェクトの項まで。
とはいえ想定する挙動をいまいち把握しきれておらず、
具体例試してるひとの記事とかパクりながら機能を把握しようと試みている。
難しい記法があるわけではないんだと思う(Python2系で書かれていることにちょっと気をつければ多分大丈夫)けどどうにもそそっかしく……。
そんなわたくしでも、とりあえず決まったusernameとpassword打ち込んだらログインできるフォームを実現するまではできました。
.
start.py(名前はflask.py以外ならなんでも良いらしい)
from flask import Flask from flask import render_template, request, session import os app = Flask(__name__) # app.routeでルーティングの制御をしている? @app.route('/') def index(): return render_template('index.html') # methodsで宣言したリクエストしか受けないことに注意 @app.route('/hello', methods=['GET', 'POST']) def hello(): if request.method == 'POST': name = request.form['name'] else: name = 'no name' return render_template('hello.html', title='flask test', name=name) @app.route('/login', methods=['GET', 'POST']) def login(): error = None if request.method == 'POST': if request.form['username'] == 'yasen_chang' \ and request.form['password'] == 'yasen': name = request.form['username'] session['logged_in'] = True else: error = 'Invalid username/password' return render_template('login.html', name=name, error=error) if __name__ == '__main__': app.secret_key = os.urandom(12) # サーバ起動 app.run(debug=True)
HTMLまでもがめっちゃ雑だけど許されたい。
HTMLファイルは今回だとstart.pyと同階層にtemplateってディレクトリ構えてその中に放り込んでおけばOK。
index.html
<!doctype html> <title>Index from Flask</title> <form action="/hello" method="POST"> <p>hello</p> <input name="name"> <input type="submit"> </form> <form name="login" action="/login" method="POST"> <p>login</p> username:<input type="text" name="username"><br> password:<input type="password" name="password"><br> <input type="submit" value="login"> </form>
hello.html
<!doctype html> <title>Hello from Flask</title> {% if name %} <h1>Hello {{ name }}</h1> {% else %} <h1>Hello World!</h1> {% endif %}
login.html
<!doctype html> <title>Login from Flask</title> <h1>Login {{ name }}</h1>
この状態でpython3.7 start.py
みたいにPythonファイル実行し、
http://127.0.0.1:5000/ にアクセスするととりあえず下記のフォームが出てくる。
上図のように入力した状態でhelloの方のsubmitボタン押すとこんな感じ、
loginの方のsubmitボタン押すとこんな感じ。
たいした挙動でなくとも、リクエスト内容に応じた表示がなされるとじんわりうれしい。
※参考にした記事などなど、まとめてて気がついたけどassert文のあたり立ち返れてないなあ
[Python] assert文で超お手軽テスト - Qiita
はじめての Flask #2 ~POSTを受け取ろう~ - Qiita
ちょっとPython --Flaskでlogin!|donguri|note
.
もうちょい続きがあるようなのでちゃんと咀嚼しながら仕組みもわかっていきたい。
放送大学 入門微分積分(第05回)
微分法の基本公式。だいたいネイピア数がすごい。対数もすごい。
媒介変数表示の微分、媒介変数tを介してxとyとがあるとき、xとyそれぞれをtについて微分してただけなんだけどなんであれで円について考えていけるのかあんまりわかってない。
とりあえず曲線を表現しやすくなるものであると把握。
そのほかのつまみぐい。
エンジリッシュ
https://e-lish.io/desk/user/detail/3231
日付変わっちゃったからうろ覚えだけど40問くらい、単語問題。
3/4の晩ご飯
納豆ご飯とインスタントなお味噌汁、卵が新鮮なやつだったのでまずまず幸福。
コードを書いた1日は早い。
2019年2月のわたしのミュージック。
自分が何にどう関心示したかの記録、記憶力の減退が激しいため。
続きを読む3/2のつめたい夕餉 Udemy キカガク 人工知能・機械学習 脱ブラックボックス講座 - 中級編 - (セクション7・8)
外科の予約を寝過ごし歯医者で昼寝、帰るやいなや3時間床で気を失う……もう寝ん
3/2の晩ご飯のおとも
キカガク 人工知能・機械学習 脱ブラックボックス講座 - 中級編 - (セクション7・8)
https://www.udemy.com/share/1000yeBEsYcFtTTXo=/
こないだ見終わったものの、演習部分手を動かしてなかったので復習&Corabolatoryの練習も兼ねて。
内容としては、重回帰分析によるデータ解析を、より詳解していくための手法(外れ値の処理・スケーリング)についてでした。
以下講義メモ(演習部分に関しては基本Corabolatoryへ、ちょっと細かい話のみこちらにメモ)。
3σ法
正規分布で表されると仮定されたデータにおいて、
平均値から±3σの範囲に含まれる値についてのみを捉え、
そこから外れた値を外れ値として検出するデータ処理手法。
σ: 標準偏差。値のばらつきの度合いを示す
※平均値ではなく中央値からの範囲をとったものはHampelの判別法という。
平均値や標準偏差が外れ値の影響を受けることを考慮した手法。
外れ値検出 (Outlier Detection) もしくは 外れサンプル検出 (Outlier Sample Detection) ~他の値・サンプルと大きく異なる値・サンプルを見つけよう!~
3σの範疇に入る値は、そのデータの99.7%程度になるとされる。
スケーリング
変数xの値がとるばらつきは、その変数が何を示しているものであるのかについても変わってくる。
例. 物件の家賃を決める要素 広さ: 0-50平米 駅からの距離: 0-1000m 治安: 0か1(良いか悪いか)
→これらのスケールを統一しなければ、どの変数の重みwが大きいのか、どの変数が重要なものなのか捉えづらくなる。
Standard Scaling(データの標準化)
変数xについてStandard Scalingを行う際には、
xからそのデータの変数全体の平均値を引き、それを標準偏差σで割って求める。
→平均0、標準偏差1の状態に、各変数xの値を調節している。
※σ = ±1の範囲に入る値はデータ全体の68%ほどであるため、1より大きくなる値が検出されることもある。
最大値1ではないことに注意。
外れ値除去・スケーリングを考慮した重回帰分析の演習
外れ値除去(3σ法の適用)においてサンプルが減りすぎてしまう場合の対処
サンプルが減りすぎてしまう場合、以下のような要因が考えられる。
3σ法は正規分布を仮定したものであり、それに従わないデータではうまくいかない
平均の数が多い
今回の場合では14個の変数について3σ法を適用している、つまりデータ全体においてカットされた範囲は0.03 * 14。
→見たいところを絞る必要が生じる場合もあると認識しておく。
.
具体的な対処方法は以下のように。
外れ値を取り除く(今回はこれ)
外れ値を平均もしくは中央値で補完
主成分分析を使用し、潜在変数に変換した後に3σ法を適用
主成分分析: 多次元のデータの共通となる要素を探り、合成して次元を落として行う分析手法?
主成分分析(1/4) :: 株式会社アイスタット|統計分析研究所
過学習
学習済みのモデルを構築し、訓練データと検証データとでそれぞれ決定係数(Xとyの相関)を測定すると、 検証データで値が下がることがある。
→過学習(オーバーフィッティング)が発生している恐れがある。
重回帰分析では過学習を避けることができないため、データのクレンジングで対応。
他の機械学習手法では、ハイパーパラメータというパラメータで人間側が調整をかけるため、その値を調整しながら過学習を避けるようにしていく。
Standard Scalingによるデータの前処理
今回の場合、scikit-learnのStandardScalerを使用し、訓練用のデータでスケーリングの学習(平均と標準偏差の計算)を行っている。
重回帰分析の場合、スケーリングで精度が変わるような手法ではないため、検証結果自体は変わらない。
→各変数の重みを確認するのに使う。
そのほかつまみぐい。
エンジリッシュ
https://e-lish.io/desk/user/detail/3231
150問。単語70/イディオム50/フレーズ30。
3/2の晩ご飯
AOSANのパン。シンプルなコッペパンが本当に美味しかった。