10/23 正当とは相対か絶対か
よいものがわかる理由をわからなければ,どこまでいっても騙されてばかりだ.
10/19
A random utility maximization (RUM) based dynamic activity scheduling model: Application in weekend activity scheduling
Habib, K. M. N. (2011)
Transportation, 38(1), 123-151.
この論文はすでに夏には読んでいて,ゼミでも発表したことがあるのだけれど,プログラミングと合わせてもう一回まとめる.
「代替選択肢として活動パターンを列挙するわけではなく,その形成過程をモデリングして,結果として活動パターンが生成される」というもので,非常に偉大である.
離散選択に関して代替選択肢を生成するのはそれほど難しいことではない(比較的)が,連続選択にすべての代替選択肢を出すというのは(なにせ連続なので)無理なのである.これを列挙せずに,最終的にパターンとして出るだけです,と考えたのは,とにかくすごい.最近行動モデル系だとどうしても計算負荷が重要になるということを実感して,その意味でもすごいのだけれど,それ以上に,構築ができるか否かという時点で,このモデルがすごい発想で成り立っているということを痛感しつつある.
10/20
Rの離散連続モデル推定コード(もらったもの)に解説をつけきって,数式を整理して,データとの対応をチェックして,資料に入れて完了.
10/21
「結構理解が進みましたね」うれしい.フレンチトーストふかふかの食べられて幸せ.
上の論文に関して,
スケールパラメタ
絶対的な値としてのの推定はできない.
効用や定数項と同じで,相対的に,他の値と比較してどうか,という判断しかできない.
そのため,基本的に1に基準化する.
10/22
論文.選挙.
The multiple discrete-continuous extreme value (MDCEV) model: Role of utility function parameters, identification considerations, and model extensions
Methodological
Volume 42, Issue 3, March 2008, Pages 274-303
Chandra R.Bhat
読み終わったらまとめようと思う.pptx鋭意作成中.
もったいないからゼミとかでいつか使いたい.
10/23
月曜日ですが台風でおうち待機.たんぱく質おいしい.
Pythonを使ってデータ編集.あとBhat(2008)を読み進めている.なかなか進まない.
データ編集,Rでもやったことがあるけれど,「今このデータがどういう形式で読み込まれているのか」というところが結構難しい(行列とか,リストとか,非数とか).その都度調べるしかない.のかな?
pandasを使ってデータを編集するのが手軽.import pandas as pdとするのが定石みたい(今回はしてないけど).ちょっとかわいい.
わたしはAnacondaを使って一括でパッケージとかも入れていて,PyCharmで使っているので,特にパッケージでは苦労せず.
きょうのコード Python
# dataedit
# パッケージpandasを使うのが便利
import pandas
# 書き込み先ファイル閉じないと回らないので注意
data2 = pandas.read_csv("data2.csv", encoding="utf_8")
# 文字コードのutf-8への変更は,メモ帳で開いて新規保存のときに文字コード指定が簡単
# print(csv)
data3 = data2[data2['A'] != "不明"]
data3 = data3[data3['A'] == data3['A'] ]
data3 = data3[data3['B'] == data3['B'] ]
data3 = data3[data3['C'] == data3['C'] ]
data3 = data3[data3['D'] == data3['D'] ]
data3 = data3[data3['D'] != "?" ]
print(data3)
# csvファイルとして出力
data3.to_csv("data3.csv")
A, ..., Dは列名.print(data3)は確認のため.
ちなみに一行目はカラムとして勝手にデフォルトで読み込んでくれるので,列名がちゃんとつくし,それを使ってデータの中の指定ができる.読み込まないでほしいor一行目がヘッダじゃないときは
pandas.read_csv("ファイル名.csv", header = None)
とすればよい.
文字コードを指定する
ここが違うと文字化けしたり読み込めなかったりする.ちなみに文字コードの名前は「UTF-8」ではなく「utf_8」なので注意.
文字コードの変換の方法はいくつかあるみたいだけど,windowsのわたしはcsvファイルを右クリック→プログラムから開く→メモ帳,名前を付けて保存→ここで文字コードを指定するというのがいちばん簡単でいいように思う.
pandasの使い方
いくつかみたけどこの方のがいちばん求めているものだった.
いろいろ載っているので上を見るのがおすすめ.
データを行で取り出したい
要するに横列でとりたいということ(上のきょうのコードでは使っていない).
(データ名)[始まり行番号:終わり行番号]
よくわからないけれど一行だけでは取れない?
データの列を取り出したい
(データ名)[”列名”]
でできる.複数列を取り出したいときは
(データ名)[ ['列名1', '列名2' ] ]
※Pythonでは"と'は意味に違いがない.
かっこが二重なのは,列名のリストを指定する形になっているから.
ある列が条件を満たす行だけ取り出す
たぶんわたしは今後もこれをよく使うと思う.
まず,
(データ名)["列名"] ==0 とか >= 80とか
とすると,その列の各行に対してT or Fが返る.これを利用する.
これがTなデータを抽出する,とすればよくて,
(データ名)[(データ名)["列名"] ==0 とか >= 80とか]
NaNを取り除く処理
data3 = data3[data3['A'] == data3['A'] ]
というのは,データ内に「NaN」()があるもの以外を取るための処理.PythonではNaNとNaNを比較する(==)とFalseが返る仕様になっているらしい.つまりここでNaNが入っていればFalseになる.これを利用して,NaNでないものだけを取っている.
パッケージのmathを使って,.isnan()メソッドを使っても判定はできるのだけれど,上でやったデータの取り出し方に適合させるやり方がちょっとまわりくどくなりそうだったので,使わなかった.
csvに出力
Pandas のデータフレームを CSV ファイルやテキストファイルに出力する – Python でデータサイエンス
書き込み先のファイルを開いていると書き込めなくてエラーが出るので注意.ほかは特に苦労しない.
おまけ
エクセルでの時間の扱い方
hour: miniteでの表示でも計算はできる.けど数字として説明変数に入れるにはよくないので,
=HOUR(K2)*60+MINUTE(K2)
(K2は計算結果が入っているセル)として,さらにセルの書式を「標準」にすることで分単位の表示に変換.
Rstudio文字化け問題
File -> Reopen with Encodingで UTF-8に変更.このとき「今後すべてに適用」みたいのにチェックをいれる.