田崎統計力学

お正月に実家に帰って見つけた統計力学1(田崎晴明著)の教科書を持って帰ってきて読んでいます。

統計力学〈1〉 (新物理学シリーズ)

統計力学〈1〉 (新物理学シリーズ)

 


これ、学部時代にもちょっとは読んでいるはずなのですが、今読むとめちゃくちゃ面白い。この本を読んでいて、なんで学生当時に、複雑系とか非線形科学スルーして素粒子宇宙論に進んじゃったのかと、悶々としながら読み進め、そろそろ1が終わりそうです。
(素粒子宇宙論がどうのこうのという話ではなく、進む専門分野をもっと広く検討していれば、企業の収集するデータで面白い複雑系の研究が将来できるようになることにも、早くから気付けたんじゃないかなぁという妄想の話です。それでも多分当時は素粒子物理に進んだと思いますが。。)
 
特に、最初〜4-1「平衡状態の本質」あたりまでは、統計力学の精神がわかりやすく解説してあり、その考え方自体は熱力学への応用のみをスコープにしたものではなく、理論構築のお手本として純粋に読書感覚で楽しめました。大量のwebデータから何かしらのダイナミクスを研究したいと企んでいる今の自分の状況にマッチしていたというのが大きいかもですが。自分の抱えている問題に対して、独自の統計力学を構築してみたいと思う反面、統計力学の熱力学への応用ほどマクロとミクロがくっきり分けられるケースは、生物が構成物として登場する現実世界の系ではほとんどないため、マクロな理論構築のために、ミクロな世界の描写をどこまですればいいのかが難しいんだよなぁと思いつつ、本の中で綺麗に導出されていくモデルを眺めています。
ちなみに、「新ネットワーク思考」や「バースト」の著者のバラバシなんかは、このマクロな性質の見つけ方が上手く、去年はバラバシの論文も読み漁っていました。
 
田崎統計力学は有名な教科書なので、学部時代に目を通している人からすれば、今更何を言っているんだということになるんですが、改めて読んで感激したのでメモっておきます。どうせまた忘れちゃうと思うので、1読み終わったら骨組みをまとめておきたい。あと2もポチってます。グランドカノニカル分布だけ読んで終わるかも。

統計力学〈2〉 (新物理学シリーズ)

統計力学〈2〉 (新物理学シリーズ)

 
新ネットワーク思考―世界のしくみを読み解く

新ネットワーク思考―世界のしくみを読み解く

バースト!  人間行動を支配するパターン

バースト! 人間行動を支配するパターン

 

CPUの創りかた

CPUの創りかた

CPUの創りかた

 
最近は、これ読んでます。
表紙はふたむかし前くらいの萌え絵ですが、かなり評価は高く良本らしい。
コンピュータの中のブラックボックスを一部分でも理解したいと思う人にはかなりおすすめです。
 

まだ読んだのは数章だけですが、面白いです。
純粋な読み物としてもいいですし、実際に部品とテスターを買ってきて、CPUを作ってみても面白そう。
 
本中にも少しコメントされていましたが、こうやってCPUを自分で創り、連続値を持つアナログな電流を操ってデジタル信号を具現化し、それで実際に計算するという体験を通して、アナログな実世界(リアルワールド)と抽象的なデジタル世界を繋ぐ装置としてのCPUを実感できるのでしょう。
 
一通り本を読んだあと暇があれば工作もしてみてもいいなと思いながら読み進めてます。
ちょうど秋葉原に行く機会も増えたことですし。
ただ、この本に出てくる、74HCシリーズってICは今も売っているものなんでしょうかね。。。
実際のお店で探すのが楽しみです。
 
あと、今現役のチップセットの内容なんてとても理解なんてできっこないのに、今後技術がさらに進歩していく中で、だれがどこまでの範囲で中身を理解して、改良していくのか、そのプロセスが純粋に疑問だったりします。

リアルワールドと抽象世界を繋ぐ仕組みを体験して実感するということは、今後の人生の中で必ず役に立つ貴重な体験になるはずです。
 

PandasのDataFrame関連でよく使うTips

自分のためのメモ。
主にデータ分析用途でサクッとDataFrameにデータを格納して、いろいろいじりたいときに使う前処理や統計値確認メソッド。

Nullがあるか確認して適当に埋める

# df全体にあるnullの数をカウント
df.isnull().sum()

# 特定のカラムにあるnullの数をカウント
# XXXにカラム名
df.XXX.isnull().sum()


# dfの中のNullを0に変換
df = df.replace(np.nan,0)

# dfの特定のカラムのNullを0に変換
# XXXにカラム名
df.XXX = df.XXX.replace(np.nan,0)

 

ざっくり統計値を確認

文字列と数値のカラムが混ざったりしていても、適当に考慮して省いてくれたりするので、手早くざっくり見たいときには重宝します。

df.describe()

 

特定のカラムの値でGroup Byして、集計関数を適用

こちらも、集計できないカラムは適当に省いてくれます。
sqlでできればそっちの方が早いし、そうすべきなのですが、手元にすでにDataFrameとしてあるデータをちゃちゃっと見たい時ってありますよね。

# 見たいカラムをXXXとして、

# 要素数のカウント
df.groupby('XXX').count()

# 合計
df.groupby('XXX').sum()

# 先ほどのdescribe()もあります
df.groupby('XXX').describe()

# その他 ここら辺になるとsqlで計算しよろって感じになりますが
df.groupby('XXX').first()
df.groupby('XXX').last()

# 複数のカラムでのGroup Byもできます
df.groupby(['XXX','YYY']).count()

 

jupyterでのDataFrame表示を省略させない

# 表示するカラム数をoptionメソッドで指定します
pd.options.display.max_columns = 300