慶應通信、経済学(総合科目)の対応覚え書き
慶應通信の総合科目、社会科学分野の経済学に関する覚書。といっても読んだ本と個人的なその進め方の記録。
取り組んだ時の状態
- 夏スクで総合科目の経済学は履修した
- 需要と供給、なんとなーくそれを導く話の流れは知ってるつもり
- 上級財と下級財?ああ、なんか線の移動の仕方が違うんでしょ?
という程度。むかーし大学生だった頃は物理学科だったし、経済学は高校時代の政治経済の授業の記憶がかすかに存在するかしないか…程度。
で、夏スクの経済学を受けて「あー、そんなんありましたねー。縦軸に価格だっけ?横軸に価格?」くらいの記憶からレポート作成開始
読んだもの
まずは教科書のフォントがなんか古くてすげぇ難しく書いてある。これ、最初に読んだらダメな教科書だわ。ということで近くの図書館に走り、ミクロ経済学関連の書籍で「入門」って書いてあるものを何冊か。(ミクロ関連書籍なのはレポート課題がミクロ分野だったから)
この時の決心(?)から、結局経済学の教科書はほぼ開かなかった。
『心と体にすーっとしみこむミクロ経済学』
市野泰和『心と体にすーっとしみこむミクロ経済学』中央経済社、2015年
もう何もかもがわからないと思ったから雰囲気が優しそうなコイツをチョイス。結果としては、表現が優しく、身近な例で考えさせようと丁寧に説明をしてくれるので基礎固めの基礎固めには丁度良かった。
数学的に考えなきゃいけないところも、「左から積み上げる」とか、「あ、なるほどね」と思えるようなわかりやすい説明が大変助かった。でも、レポート課題の革新に迫れるようなレベルじゃなかった。残念。という訳で次の本。
『ミクロ経済学の第一歩』
基礎固めの基礎固めが終わってたからだろうか。思ったよりちゃんと読めた。というかこれもそんなに難しくない。初学は有斐閣はストゥディアあたりから手を出すのがやはり無難なのか。
この本だとミクロの一分野であるゲーム理論も言及されていたり、比較的ミクロのメジャーな話題は全部触れてくれているし、まだ読みやすい。レポートの課題の革新には迫れない(肝心な説明がわかりやすさ優先でボヤけてる感じ)けど、とっかかりが見えたのがこの本。レポートの結論を引き出す準備の本って感じだった。まだレポート書けず。次の本。
『マンキュー経済学Ⅰ ミクロ編(第3版)』
N・グレゴリー・マンキュー『マンキュー経済学Ⅰ ミクロ編(第3版)』 東洋経済新報社、2013年
お金が無かったので中古でひとつ前のマンキューを購入。マンキュー読んだよ!ってTwitterで言ってた人が居てなんかカッコよかったから買ってやった。
届いて分厚さにひるむ。が、文章はとてもフランクで読みやすい。これを始めて読む段階だと章末問題は取り組む余裕が全くなかった。だけど一通り読みとおすのを目標にして頑張って読んだ。
マンキュー読み終わったあたりで、「あ、経済学の教科書ってだいたい同じ順番で同じようなこと説明するね?」なんて気付き、知識が若干体系的になってきた感じがした。でも当時のレポート課題の部分はさらっとしか触れてくれておらず、なんかまだ違った。でも書けるかな?と、思ってこの段階でレポート初稿発射。惨敗で帰宅してくる。うむ。次、なんか読んでフォローしよう。次の本。
『経済学・入門(第3版)』
塩澤修平『経済学・入門(第3版)』有斐閣、1996年
よく「塩澤」って呼び捨てにされている鉄板教科書。この本あたりから数式と微分がわっさわっさ出てきてちょっとひるむ。でも、数式を日本語に読み替えて読むというか…数式慣れする良い準備体操にもなるし、数式がわかると言葉での理解よりも直感的に扱うことが出来る気がした。
で、レポートはこの本までで合格出来た。といっても、添削してくれた先生が「この要素とこの要素が足りないよ」「でもそれ説明するならこれもそれも」って要素を詳しく教えてくれたので、それを参考文献で確認しながら組み立てた…って印象だったけど。
まとめ
総合科目、社会科学分野の4単位はデカい。あと、ここでちゃんとレポやっておかんとやっぱり専門科目のミクロとかマクロやるときに苦労する。(というか僕は大分苦労した)
読書期間が3週間くらい、レポ書きでトータル2週間くらいかかったかな。全部定価で買ったら…12,770円。図書館大事。すげぇ大事。この科目で図書館のありがたみが本当に良くわかりました。今までただ空気吸いに行っててすみませんでした。
慶應通信、wordでレポート作るときのショートカットやらなんやら
意外とググっても出てこなかったので、備忘録替わりに。でもwordの文書に数式放り込みまくると何故か固まる(おま環か?)し、コピーしようもんなら間違いなく固まる(これも?)からMicrosoftさんなんとかしてくらはい。
覚えているとちょっと楽なショートカット
コマンド | 効果 | 備考 |
---|---|---|
上書き保存 | Ctrl + s |
なんなら1文書くごとに押す(僕は) |
文字数カウント | Ctrl + Shift + g |
そろそろ文字数いったかな?あ、まだ? |
数式挿入 | Shift + Alt + - |
論理学とか数学系で大活躍。詳細は後述 |
数式挿入中の記号のショートカット
論理学で使うようなヤツ
表示 | 入力 | 意味 |
---|---|---|
→ | -> | ならば。やじるし |
⇒ | \Rightarrow | このやじるしは強い |
¬ | \neg | 違う、そうじゃない |
⋀ | \wedge | 「かつ」ってやつ |
⋁ | \vee | 「もしくは」ってやつ |
∀ | \forall | 「すべての」って意味 |
∃ | \exists | 「存在する」って意味 |
論理学のレポを書いた(まだ合格していない)程度だけど、これくらいの入力が使えると楽だった。
経済学とかで使うようなヤツ
表示 | 入力 |
---|---|
xに下付きのa | x_a |
xに上付きのa | x^a |
∑ | \sum |
…結構使った気もしたけど、この程度しか使ってなかった。まぁ複雑な記号入力するときはリボンから引っ張ってきた方が早いしねぇ。
経営数学で使うようなヤツ
行列
wordで行列を打ち込むときはちょっと気合が要る。打ち込みと結果の例としてはこんな感じ。
- 最初に
(\matrix (
を打ち込む。最初の(
が行列の左括弧になる。そして、\matrix
と打った後のスペースで\matrix
は■
に変化する。 - その後、
(
に続いて行列の成分を打ち込んでいく。
- 上例を実際に打ち込む。行成分は
&
で繋ぎ、列成分は@
で繋ぐ。 - 上例であれば、以下のような打ち込み。
a_11&a_12&a_13
までが1行目、その後@
で繋いでa_21&a_22
a_23が2列目、
a_31&a_32&a_33`が3列目
上付き文字の特殊型
上の画像みたいな、なんとかバーとか、なんとかハットとか。リボンから持ってくるの面倒臭いヨーって方はこの方法が良いと思います。
ただ単に\hat
って打つと
こんな感じ(よくわからん)。通常であればこのあとに左カーソル入れてから\beta
とか打ち込んでβハットを完成させるんだけど、スペースを1回余計に押すだけでだいぶ快適に打ち込める。
こんな感じ(センタードットは半角スぺース)。これだけ打つと自動的にβの上にハットが移動する。先のYバーであれば、Y\bar
ってこと。これ、便利。
数式の改行
こんな感じで数式の中で改行したくなったら、改行したい場所を右クリックして、「任意指定の改行を挿入」を選ぶ。で、改行された後で、Tab
を何回か押すとちょうどよい位置まで動かせる。
数式に番号を付ける
レポート書いてると数式に番号付けて説明したいな~…なんて時がたまにある。そんなときは数式入力モードにして、以下のように入力しましょう
ここからエンターを押すと…
どーん。ページ右端に指定した番号が出るようになります。
こんな風に色々設定できるよ
手書きレポート用紙転記用の原稿用紙設定
手書き科目はwordで原稿用紙設定にして文字を打ち込んでから、その画面を見ながら写経すると良い。記号とか段落とか、どこで文字数間違えたかが凄くわかりやすくなる。
レイアウトタブの原稿用紙設定をクリック
罫線の「スタイル(S)」を、マス目付き原稿用紙に設定し、文字数×行数を20×20に設定する。罫線の色を青にすると手書きレポ用紙っぽくなったりする
これで設定完了。あとは画面に映された原稿用紙通りに写経すればおっけー。手書きレポの際はこの機能が便利。地学で大活躍だった。
ワープロ印刷設定
最近はweb提出可能科目も増えてきたので意外と印刷しなくてもなんとかなるのですが、なんだかんだ印刷させられたりする。という訳で設定はこちら。
おわりに
これからレポート書く度に「お、これいいじゃん」なんて思いついたら追記していきます。あとはなんか面白いのとか便利なのないかなー。
慶應通信、地学。手書きレポートへ立ち向か…う。
はじめに
本記事執筆時点で、私は絶賛地学の写経RUSH真っ只中です。地学は4単位の総合科目なので単位数的には非常においしい。しかし、しかし、だ。全部で4回もレポートを出さなきゃならないし、そのレポートは全部「手書き」だ。最初に「お、地学とか面白そうやんけ!レポート書いたろ!」なんて人の心を折りに来てる感が凄い。
だから今回、立ち向かいながらちょっとでも楽になるように、ちょっとでも楽しくなるように試したことのうち、役に立ったことを記しておく。
スポンサーリンク
レポートの作り方
まだ第1回と第2回しか提出していないけれど、そんなに「えぇ!?」なんて問題は無い。教科書を読めばレポートが書き始められるので、内容はそこまで入り組んでない。そして指定の教科書が市販本なのだけど、装丁が素敵なので持ってるだけでちょっとテンションが上がるのもまた良し。んであとは実家の片隅とか倉庫を探してみて、高校の地学の教科書があったのなら引っ張り出しておきましょう。副読本があるとレポートはもっと書きやすい。指定の教科書はこちら。
個人的に利用した参考文献がこちら。
とりあえず打ち込む
テキストエディタでもwordでもなんでも良いので、回答を作成する。wordが便利かな。文字数カウント簡単だし。地学レポは1回あたり2,000文字以上の制限があるので、ちゃんと文字数は意識して書いておきましょう。小問4つくらいで構成されているので1つあたり500文字くらい。ちなみにwordの文字数カウントは、画面下部左側に出ていたり、文字数カウントツールを利用することで把握できます。
この画像はword左下部で、7,747文字ってなってます。だけどこの文字数にはタイトルや参考文献の文字数も含まれてるので、もし部分的に文字数カウントをしたい場合はその範囲だけ選択すれば大丈夫。
あとは[校閲]のタブに存在する「文字数カウント」というボタンを押すともうちょっと詳しい文字数カウントを見ることが出来ます。
この画面で文字数カウントをクリックすると…
こんな感じ。段落69個だから、一段落平均で見るとちょっとコマ切れすぎかな…。
wordでちょっと写経が楽になる(?)設定
前項の要領で文章作成が終わったら、写経が楽になるように、wordの設定を触ります。
1. 設定の場所
[レイアウト]タブ
2. 原稿用紙設定
ここを設定することで、原稿用紙の設定ダイアログが出ます。
3. スタイルの変更
スタイルをマス目付き原稿用紙に変更すると、実際の原稿用紙が画面に出現します。
4. 色の設定
お好きな色で結構です。が、水色を選択すると慶應通信手書きレポ用紙に似るのでちょっとテンション上がる。
5. 用紙サイズ設定
A4、印刷方向は縦で(これはデフォルトでそうなってると思う)
こんなとこでしょうか。で、前項で終わった文章をそのままこの設定のwordにぶち込みましょう。するとあら素敵。半角は2文字で1マス、句読点が末尾に来たらそのまま末尾に句読点を配置…といった原稿用紙での一般的なお約束を押さえた上で表示してくれます。ここまで終わったらお好みで、文書を印刷したり、PC画面に写したりして…ひたすら写経です。
細心の注意を払うなら、このwordによって生成された原稿用紙を確認しながら鉛筆で下書きして…というところでしょうが、手書きレポならそのまま書き始めても大丈夫だと思います。間違ったら直せば良いし。
この手法の良いところは、「原稿用紙に書き入れるルールは全部wordが勝手にやってくれる」です。思った以上に「数値は2桁で1マス」とか「末尾にカッコ追加」とか面倒なもんなんです。あとは、ちゃんと誤字無く写すことが出来ているかどうかも、原稿用紙だからこそわかりやすい。(間違えたらズレてるのがすぐわかる)
写経のお供
しかしそれでも写経は辛い。とても辛い。だってもう画面に完成しているものをわざわざ「手で!」「紙に!」「書き写す!」から。だからちょっとでもテンションが上がる小物を用意して取り組むと良い。
万年筆
この「万年筆」という三文字。使ったことが無い方は何かもうハイソサエティな何かを感じるのでとても敷居が高いような気がしてしまうが、字がうまくなくても使ってよいし、そんな高いものを使わなくても全然良い。「コンバーター」というインクを吸うパーツを買って、「あらこの色素敵」なんていう色のインクを別で買えばもっともっと良い。素敵な文房具を使って、素敵なインクでの写経はなんだか崇高な儀式のようでち心が洗われるようです。(と、思い込めば多少は苦難も和らぐ)
パイロット 万年筆 コクーン ブルー 細字 FCO-3SR-L-F
- メディア: オフィス用品
パイロット 万年筆インキ iroshizuku INK-50-TY ツキヨ
- メディア: オフィス用品
月夜が良い色なのですよ…w
修正テープ
素敵な文房具でサラサラと書き進んでいてもふとした瞬間にミスをすることもあるでしょう。句読点を1文字飛ばしてしまい、原稿用紙見本と1文字ズレて凄くブルーになることもあるでしょう。そんなときに、この小さい修正テープがあればもう大丈夫。修正テープ使って落ちた!なんて噂も聞いたことがあるけれど、大丈夫。私、統計学のレポは修正テープだらけになりましたが通りました。
甘い物
よくレポートの神様へのお供え物は甘い物が良い…なんて言いますが、自分へのご褒美も大事です。問題1つ分書き終わった、1枚書き終わった、そんな区切りが出来たらとりあえず甘い物食べておきましょう。頭がスッキリするし、手の疲れが少し取れる気がします。多分。
飲み物
飲み物はなんでも良いけれど、コーヒーはおすすめしません。コーヒーは色が濃いのよ。すぐしみこんで色が落ちなくなるのよ。ちょっとこぼすだけでせっかくの手書きレポ全部が悲劇に見舞われる可能性があります。リスクマネジメントしましょう。コーヒー飲んでもよいけど、レポート作ってるテーブルとは別の場所で。
ちなみに前項の甘い物でシュークリーム、飲み物にユンケルを摂取するとシュンケルという技になるそうです。検索していくつか記事を読みましたが、あまりにも強い諸刃要素があるので…オススメが全くできない。
終わりに
そう。文字なんて書いてればいつか終わるんすよ。でも、ちょっとでも快適に、テンション高めに終えたいのが人間なんすよ。万年筆良いよ、万年筆。ボールペンとか投げ捨てちゃえ。
最後の追記
無事に4回分、合格を頂くことが出来ました。利用した参考文献は上に挙げた1冊と、旧・地学の教科書。(僕はサボリ学生なので、廃止科目になってしまった地学の教科書が配本されていたのである)でも、旧・地学の教科書はそんなに使わなかったかな…。いずれにせよ、手書きレポの再レポはなかなか心が折れそうなのでこれにて一安心。さーて、次は何の科目やりましょうかね…。
でも、word原稿用紙の設定と、万年筆は個人的にもメガヒットだと思う。うまくいった。手書きの代替レポなんかでも活躍してくれそうなので、覚えておこ。
プラチナ万年筆 万年筆 プレジール 細字 ブルー PGB-1000#56-2
- メディア: オフィス用品
慶應通信、統計学レポート作成に際して
今回、ゴールデンウイークを利用して無事に統計学のレポートを全て提出することが出来たので、Tipsという程のものじゃあないけれど、個人的に感じた疑問や感想などを書き連ねておく。
スポンサーリンク
統計学に関して
自然科学分野の科目で、4単位。単位数が多いし経済学部だと必修科目となっているので、「お、これ必修だし単位多くてお得そうやんけ!やったろ!」なんて感覚で教科書を手に取ると、まずはその教科書の大きさと分厚さに軽く眩暈を覚える。そして「いや、教科書はこんなもんでも、レポートはそうとは限らんだろ。」とか言いながら別冊のレポート課題を見ると絶望する科目。さらに絶望させられる理由として、統計学のレポートは全4回で構成されていて、全部出さないと科目試験を受けることが出来ない仕様。だからただなんとなく「やったろ!」感でこの科目を選択しようとする人間の心を全力で折りに来てるような印象を受けるけど、実はレポート1回分あたりの範囲はそんなに広くなかったりする。
んで、数式いやー!って人も、数式アレルギーを治すには良い科目かもしれない。数学の基礎や微分・積分よりは。一旦この科目をレポートを乗り切ると、世の中の数字の意味がなんとなくアレルギー前提じゃなくなるので、なんか心が平和(に、なった気がする。僕はw)だからこれが終わって覚悟が出来たら数学のレポに進もうかと思います(白目)
学習に必要なもの
とりたてて学習に必要な特別なものは無い印象だけど、
このくらいはあると取り組みやすい。電卓は関数電卓を持っている人はそれでも良いと思う。試験では使えないので自己学習用限定になっちゃうけど。
パイロット 万年筆 コクーン チタン 細字 FCO-3SR-TI-F
- メディア: オフィス用品
シャープ 関数電卓 68関数機能 ライン表示 スライド式ハードケースタイプ EL-501JX
- 発売日: 2011/08/25
- メディア: オフィス用品
学習開始~レポート作成まで
レポート分量に関して
ちなみにこの記事を書いている現在僕はまだ全4回のレポートを出し終わった「だけ」という段階だけれど、1回あたりのレポート分量は手書きレポート用紙6枚~8枚くらいの分量だった。1枚あたり400文字びっしりと文字を描き込んだ6枚~8枚じゃなくて、数式や図・表が入ってそれくらいの分量なので、そこまで「多いわ!」って感じもしない。でもレポートを終えて見返すと「やったったなぁ…」という程度の量にはなるので妙な満足感が得られるw
レポートの範囲
ちなみにそれぞれのレポート範囲としては、1回あたり4章分~5章分くらい。教科書が全20章で構成されているので、純粋に各1/4ずつくらいが範囲。ところどころ数式オンパレードで嫌になりそうになるけれど、「発展項目」と書いてあるところは試験範囲外(注:2020年 通信教育課程 科目要綱確認時)となっているので、読み飛ばしても大丈夫。ざっくり読むならレポート1回の範囲あたり2時間~3時間くらいで読むことは可能。(統計学をどっかでやってたよ!とか、素養がある方はもっと早いと思う。当然だけど)
学習の進め方
んで、教科書を読み終えたら章末問題に取り組む。これも「発展問題」って書いてある問題はやらないでスルーした。似たような問題が並んでいる場所もあるので、几帳面に全部やらなくても比較的大丈夫かな?というような印象。だけどこの科目、手を動かすと覚えるね。いや、なんでもそうなのかもしれないけどw
個人的に使った参考書とか
ちなみに「教科書がデカくて分厚い=分量が多い」という訳ではなくて、この教科書の場合は「丁寧に書いてあるから分厚い」だけなので、読めばだいたいなんとなく理解は出来ると思う。でもちょっとなんかわかりにくいなぁ…なんて人に向けて、僕が購入して良かった参考図書としては…
まずはこの一冊から 意味がわかる統計学 (BERET SCIENCE)
- 作者:石井 俊全
- 発売日: 2012/01/01
- メディア: 単行本
このあたり。僕が読んだ順番は「教科書」→「はじめての統計学」→「意味がわかる統計学」だったけど、統計学に初めて触れる人とか、数式いやあああ!って人とか、もう忘れたなぁ…なんて人は「意味がわかる統計学」→「教科書」&「はじめての統計学」くらいの順番が良いかも。「意味がわかる統計学」は言葉が感覚でわかりやすく丁寧に書いてあって読みやすかった。でも各種数式が教科書とは違う記号、違う書き方になっている部分があるので、あくまでの「学習のベースは教科書で、補助教材、なかでも導入用として割り切って使う」というのが良いと思った。
レポート作成時に感じたこと
僕はOne Noteに手書きでレポート問題を解く→(レポート用紙白黒コピーに鉛筆で下書き)→レポート用紙に万年筆で清書って順番での作成だった。その問題を解いていく中で、Excelはやっぱり偉大。レポートや章末問題などの勉強にはExcelがあると楽というか個人的には必須。先にもちょろっと書いたけど、電卓「だけ」では対応が面倒なので、関数電卓を持っている人はあると良い。ちなみにExcelでお世話になった関数は下記の通り
Excelでお世話になった関数たち
sum
みんな大好きsum関数。ただ合計するだけなのに何故こうも愛おしいのか。よく「すm」って打ってから半角に切り替えることになる。
average
平均を出す関数。average関数では「空白ノットイコール0」という概念だけ覚えておきましょう。空白をゼロとして取り扱って算出する場合は、sum関数とcounta関数とか使って自力で除算しましょう。
power
べき乗関数。Excel詳しいつもりだったけど今回初めて知った関数。この関数、便利だね。章末問題やレポート問題でめっちゃ活躍する。
exp
eのべき乗を求めるときに使う。ポアッソン分布のときくらいしか使わないけど、たまに使ったような印象。
その他
標準偏差を求める数式なんかもあるけど、数式を覚えて根本的な出し方を忘れてしまうのでおすすめが出来ないかも(というか僕が使っててワケがわからなくなったからだけどw)
レポート用のグラフ作成
以前の記事で、Pythonのmatplotlibを使って描く手法を記事しましたので、よろしければご参照下さい。僕はたまたまPythonの勉強を並行してやっていたのでこの手法を取りましたが、Excelでも十分に書くことが出来ます。教科書の付録で凄く丁寧にグラフ作成方法を乗せてくれておりますので。
レポート清書~試験まで
で、清書。清書の際にひっかかるのは「1マスに1文字じゃなきゃいかんの?」ってのと、「図のコピーておま、印刷せないかんやんけ。どのくらいのサイズがいいのかな」くらいでしょうか。
1マスに一体何文字書けば良いのか問題
結論としては、マス目を無視して数式を2行に渡って書いてみたり、1行に詰め込んで書いたりしたけれど、問題無かった。いや、文字はちゃんと1マス1文字に収めたけれどw あとは分布表のどこを読み取ったか描いて。って問題の対応に「手書きでやるべきか、Excelで表を作って貼り付けるべきか…」ってだいぶ悩んだ。最終的に僕は手書きでやった。Excelでやると印刷サイズ気にしたり、ハサミでカットしたり貼り付けたりと工数が無駄に増えるのよね…。
清書に使う表とかグラフの印字~貼り付け
印字用ファイル作成~印字
家にプリンターが無い方はコンビニプリントが便利。フルカラー1枚60円なので、ちょっと割高に感じるけど…結構素敵な画質で印刷してくれた。白黒で済むものは白黒で印字するとコストカットできるね。あとは会社のプリンタをこっそり使うとか。で、この項の問題はそこじゃないんだよ。このグラフ、プリンタで印刷したらどれくらいのサイズになるんだろう問題が問題なんだよ。
ちなみに初回レポ分に関しては、
- 会社のプリンターで完成品を印刷
- 切ってみて、レポートに合わせてみて大きさ確認
- 大きさを調整して、再度印字
- 切ってみて、レポートに合わせて大きさ確認
なんていう会社の備品無駄使いパターンで乗り切ったけれど、これはなかなかスマートじゃない。後ろ暗いし。だから次のレポでは、
- Excelで作った表をpdfとして保存
- pdfをAcrobat Readerの物差し機能を使って採寸
- 採寸結果をレポート用紙に定規あてて雰囲気確認
- 再度調整して、pdfで採寸
- 調整終わったらpdfファイルから印字!
という手法をとってみた。するとどうでしょう。想定サイズの7割くらいの図が印字されたんですけどwwwwwwってなった。もう面倒だからそのまま使ったけど、これちゃんとdpiとか計算せんといかんね。皆様は気を付けましょう…。
と、思ったけど実寸で印字する方法があるらしい。
やったことないからわからんけど、こんなんで出来るのか…もっと早く調べてみれば良かった。
切り取り、貼り付け
いやー。なんかハサミ使って枠線通りに何かを切り取るとか久しぶりにやったよ。で、この際にExcelに表を図で印刷する人は「枠線」の設定をしておくと切るラインが明確になって良いね。切りやすかった。で、切り取った後の糊付けは、テープのりだと紙がべろんべろんにならなくてスマートだけど、消費量が激しいのでそこまでこだわらなくても良いかもと思った。でも普通のノリでレポートがちょっとブワブワになるのでなんかどうでも良い美意識がオレの邪魔をした。
現段階のまとめ
で、ここまで終わったらあとは投函!試験対策等に関しては記事を作成されている方もたくさんいらっしゃるので、そちらを参考にどうぞ。私は無事に単位が取れてからこの記事に追加することにします…w
【2020年5月18日追記】 あろうことか、参考資料の題名が違ってました…ということで、こっそりと差し替え。
慶應通信の統計学レポートを作るときに必死こいて調べたmatplotlibを使ったグラフ作成の覚書
なんでわざわざmatplotlibでグラフ描くの?と、問われれば「なんかカッコイイと思ったから」以上の答えが用意できていない。そしてさらに、僕はPythonをマスターしたエンジニアでもなければなんでもない。だから内容はおそらくPythonエンジニアの方々からしたら鼻くそみたいなレベルのものなのであろう。それにまだまだレポートが全部終わった訳ではないので、この記事の内容で全部グラフ描けるぜ!という次元には至らない。でもこのまま統計学で作成するレポートでmatplotlibを使った軌跡は自身の備忘を目的としてここに残しておこうかと思う。大学のレポートとかをPythonが得意な訳でもなんでもないけどmatplotlibで描いてみようとか考えたすげぇ特殊なケースの人が居るかもしれな…居ないか。でも、でもね!階級幅が違うヒストグラムを描くのであれば絶対matplotlibのが楽だから!絶対!w
スポンサーリンク
普通のヒストグラムの書き方
matplotlibでヒストグラムを描くのはそう難しくない。あるデータの集合A_histがリストで存在するとすると、
# 必要なものをインポート import matplotlib.pyplot as plt # グラフ描画のおまじない fig = plt.figure() ax = fig.add_subplot(1,1,1) # A_histのリスト内容をヒストグラムで描画、線は黒 ax.hist(A_hist,ec='black')
これだけ。でもこの描画方法だと、
- 区間が自動で切られてしまうので、階級図が与えられている時に使えない
- 実数でしか描けないので、正規化(%表示)するのにまた違うリスト作らなきゃいかんやん
といったあたりが課題として挙げられる。なので、まずは正規化する方法に関して。
正規化したヒストグラム
正規化するのに別に違うデータを用意しなくても大丈夫。さっきのヒストグラムのコードにdensity=True
って追記するだけ。
追記前 ~ before ~
ax.hist(A_hist,ec='black')
追記後 ~ after ~
ax.hist(A_hist,ec='black',density=True)
これだけで、勝手に割合計算して正規化されたヒストグラムが完成する。あら便利(Excelも簡単に正規化出来るけどさ)
軸をパーセント表記にしたいんだよ!
前項までで正規化したヒストグラムは完成したが、実はひとつ足りない。縦軸の数値が小数点表記なのだよ。正規化したんだから、パーセント表記じゃなきゃダメでしょ!という訳でそちらの対応。対応方法は、ちょろっとコードを書き足すだけ。
# 必要なものを追加インポート import matplotlib # A_histのリスト内容をヒストグラムで描画、線は黒 ax.hist(A_hist,ec='black',density=True) # Y軸をパーセント表記に ax.yaxis.set_major_formatter( matplotlib.ticker.PercentFormatter(1.0) )
追加でimport matplotlib
を行ったのち、yaxis.set_major_formatter()
を使ってY軸をパーセント表記に変えている。多分このyaxis
をxaxis
にしたらX軸が変えれるのかな?変えたことないからわからんけどw
階級幅が違うヒストグラム
ただし、このヒストグラムでは階級幅が異なる階級表からヒストグラムを作ることがうまくできない。だってmatplotlibでヒストグラム作ると適当(いい意味でも悪い意味でも)な階級幅でいい感じに作ってくれちゃうから。なので、階級幅を自分で定義したヒストグラムを作るにはどうすれば良いのか。それは…
binsを指定してやれば良い
これだけ。だけどここに行き着くのに散々ネットの海を彷徨ったよ…。実際のコードはこちら。
# 階級幅をリストに格納する。 # 下のリストは、50-53,53-61,…,72-80という階級幅を表す edges = [50,53,61,64,65,69,72,80] # ヒストグラム描画コードにbinsを渡す ax.hist(A_hist,bins=edges,ec='black')
と、こうなる。普通のヒストグラム作成のときにもbinの数を指定する際にとか使ったよね。このパラメータ。
Excelのデータラベル的な文字を付ける
Excelでグラフを描くと、右クリック一発で「データラベルの作成」が選べて、グラフの上端にその数値が出たりなどなど、素敵な処理が簡単に出来る。ではmatplotlibでそれは出来るのか。答えは…
出来る。けどちょっと面倒くさい
となる。まぁ結局やることはplt.text
を使って直接文字を打ち込むだけなんだけど。ちなみにこのplt.text
は覚えておくと便利なのでちょっとだけ解説。
plt.text(x座標,y座標,'表示させたいテキスト')
これだけでグラフの任意の場所にテキストを表示させられる。だから本項の目的であるデータラベル的な文字列表示も、位置さえ分かれば自由自在ですよ。位置さえ分かれば…。という訳で、位置の特定に進む。
位置の特定は、ax.hist()
の戻り値を使うことで可能。ax.hist()
は3つの戻り値を返すので先ほどのコードをちょっと変えてやる。
n, bins, _ = ax.hist(A_hist,bins=edges,ec='black')
これはax.hist()
から貰える戻り値を3つの変数に格納している。最後の_
は使わないから「使わないぜこの変数!」という硬い意思が見え隠れする変数名にしておいた。で、n
は「n番目のbinはこの高さよ」というリストを返してくれて、bins
はbinsそれぞれの左側のx座標と右側のx座標をリストで返してくれる。だから、先に使ったedges
のリストで説明すると…。
edges = [50,53,61,64,65,69,72,80]
というリストで描いたヒストグラムにおけるbins
の戻り値リストは、
- 1番目の左側のx座標
- 2番目の左側のx座標(=1番目の右側のx座標)
- 3番目の左側のx座標(=2番目の右側のx座標)
- …
- n番目の左側のx座標(=n-1番目の右側のx座標)
- n番目の右側のx座標
というものになる。で、データラベル的なものはbins
の上、真ん中あたりにテキストを表示させたい訳なので、
n番目のbinsのデータラベルとしてテキストをプロットするx座標は、bins
のn-1番目とn番目の平均を取った数値
という結論に至る。んでy座標はそのままヒストグラムの高さのちょっと上なので、ヒストグラムのnのリストに格納されているY座標の数値にちょっと数値を足してやることにする。だから実際のコードは…
### グラフ描画しつつ、戻り値を取得 n, bins, _ = ax.hist(A_hist,bins=edges,ec='black',density=True) ### 前の行で取得したbinsを使って平均算出 xs = (bins[:-1] + bins[1:])/2 ### 繰り返し処理を使ってテキストを表示していく ### shareのリストは全体の何パーセントかの数値が格納されている ### 表示テキストはパーセント for x, y in zip(xs, n): plt.text( x, y + 0.005, '構成比\n {:.1%}'.format(share[z]), horizontalalignment='center' ) z = z + 1
最終的に出来上がったヒストグラムはこんな感じ。(レポートで使ったグラフなので、数値はボカしてあります…)何か疑問が発生する度にググってみては失敗して、ググってみては失敗して…を繰り返したので、いっそ手書きでヒストグラム作った方が楽だったんじゃいないのかという説すら自身で否定できなかったw
いつまでこの熱が続くかなぁ…Excelに逃げちゃいそうだなぁ…。
シナジーがあるとは思えないけどシリーズになりそうな慶應通信 × Pythonシリーズはこちら。
Pythonによるデータ分析入門 第2版 ―NumPy、pandasを使ったデータ処理
- 作者:Wes McKinney
- 発売日: 2018/07/26
- メディア: 単行本(ソフトカバー)
kcc-channelのレポート提出状況確認をPython使って自動化して、なんか楽になった気がするけど毎日結果が通知されて自分を追い込むドMプログラムを作った件
慶應通信の一番楽しい時間
慶應通信では、適宜学習レポートを提出することで学習を進めていくことになる。(厳密に言えばレポートを出して、試験を受けて単位が貰えるので試験までがワンセットだが)そして、そのレポート提出は郵送やらWEB提出やら色々と手法はあるが、結果確認はkcc-channelというWEBサイトで確認することも出来る。郵送でレポートを提出すると、「まだ提出状況には乗らないかー」「お!載った!添削中になった!」「あー、まだ添削中かー。早く結果出ないかしらー。」なんて形でちょっとドキドキしながら毎日覗くことになったりする。最近気づいたが、実はこの期間が一番楽しい。何故かって?そりゃアナタ。添削結果が「合格」なら喜びは最高潮だがその後の科目試験どうしよう…とか新しい不安が発生することになるし、もしそのレポートが「不合格」ならもうコメントもなかなか辛辣なものがついてたりする訳ですよ。そりゃあ自分の勉強不足が原因な訳で、先生は何一つ悪く無いけど、辛辣すぎるコメントが付いた日にはもう仕事のテンションも上がらいし、レポートの再提出とか二度としてやらねぇ!ってくらいに腹が立ったりもする。だから、レポートを提出して、kcc-channel上のレポート提出状況が「添削中」ってなってる期間が一番楽しい。
でもなんか、毎日思い出してブラウザ起動して、kcc-channelにアクセスして、レポート提出状況をクリックしなきゃならんのはなんか面倒でもある。という訳で、流行りのPythonさんを利用して自動化してみた。
で、結果として毎日通知が来ることで「ああああレポート提出しなきゃ」って自分にストレスを与え続けるドM行為。
スポンサーリンク
状況確認
使用武器(エモノ)
にわかPython学習者なのでAnacondaを突っ込んだ結果僕のPCに入っているものと、pipコマンドを使って導入したselenium、あとは適当にググったら出てきたseleniumでChromeを動かす為のChromeDriver程度。
標的
https://kcc-channel.keio.ac.jp:10443/up/faces/login/Com00501A.jsp
jspページなのが曲者。最初はページ末尾を見ただけでもう辞めようかと思った。
対応方針
通常であれば…
- ログイン
- 「テキスト科目」にマウスを乗せる
- 「レポート」にマウスを乗せる
- 「レポート提出状況照会」をクリック
- 対象発見!
という5stepで完遂する。そもそもChromeにIDとパスワードを覚えさせておけばChrome起動(1clikc)、ログインボタン押下(1click)、マウスオーバーマウスオーバーからのボタン押下(1click)の合計3clickで閲覧可能であり、そもそも自動化する意味無いんじゃないのってくらい楽だけどやりたいことをやる訳で、目をつぶる。そ、それに自動化が目的だからむなしくないもん!
ゴールイメージ
ただ定期的に確認するだけ、というと本当にGoogle Chromeのスタートページをkcc-channelにしてアクセスするのが最高効率になってしまうので、せめてその毎日の2~3clickだけでも減らす。そんでもって、何か目に付く場所に通知が来ればベスト。という訳で最終出力先はslackに決定。つまり・・
- 定期的に結果確認(1日1回)
- 確認結果はslackで自分宛のDMとして飛ばす
といった形か。ではプログラムへ。
だらだらとコードを描いてみる
必要ライブラリのインポート
seleniumを使ってChromeを動かす。そんでもって、json使ってslackにDMで飛ばす。あ、slackのWebhookは別途取得しておく必要があります。
import time import datetime import numpy as np import requests import json import locale from selenium import webdriver from selenium.webdriver.chrome.options import Options from bs4 import BeautifulSoup
なんか無駄な物がたくさんありそうだな。こうやって見るとrequestsは使ってないような…まぁいいか。
seleniumを使ってページアクセス~ログイン突破まで
# headlessモードの追加 options = Options() options.add_argument('--headless') # page表示、0.5秒停止 driver = webdriver.Chrome("c:/driver/chromedriver.exe", options=options) driver.get('https://kcc-channel.keio.ac.jp:10443/up/faces/login/Com00501A.jsp') time.sleep(0.5) # userID,Password入力 id_box = driver.find_element_by_name("form1:htmlUserId") id_box.send_keys('xxxxxxxx') # ここにIDを入力 ps_box = driver.find_element_by_name("form1:htmlPassword") ps_box.send_keys('yyyyyyyy') # ここにパスワードを入力 time.sleep(0.5) # log-in click login_send = driver.find_element_by_name("form1:login") login_send.click()
自分用でググりながら適当に作ったプログラムなのでセキュリティとか一切の配慮が無い。kcc-channelにログインする為に必要な情報は平文でそのままぶち込むノーガード全力テレフォンパンチ。
この部分で行っていることは、
- seleniumを使ってChromeを起動
- headlessモードを指定することによってChrome操作画面をオフ
- kcc-channelのid入力スペースとパスワード入力スペースをfind_element_by_name を使って検索
- そこにsend_keysメソッドを使ってそれぞれのぶち込んで、なんとなく0.5秒待ってみる。
- find_element_by_nameを使ってボタンを探して、ログインボタンをクリック
といったこと。一生懸命ソースコードを覗いて探した結果をまとめておくと、
場所 | name |
---|---|
ID入力部分 | form1:htmlUserId |
PW入力部分 | form1:htmlPassword |
ログインボタン | form1:login |
こんな感じ。idが設定されていれば楽だったんだけど、idは存在せず。残念。
ここまでのコードを実行することで、kcc-channelにログイン出来たことになる。さて次、レポート提出状況のページ表示~情報取得へ。
レポート提出状況表示~ページ内容情報取得まで
前段でkcc-channelにログイン出来て、内部的にはトップページが表示されている状況。ここからレポート提出状況のページにアクセスし、表示されたページをスクレイピングする。が、ちょっと問題が。jspページだからhtml取得してスクレイピングできない。なので、execute_scriptメソッドを使ってアクセスすることにする。
# execute_scriptを使って直接script実行 time.sleep(0.5) driver.execute_script("clickMenuItem(30201,0);")
これでレポート提出状況のページにアクセスすることが出来た。で、ここからログイン時と同じようにfind_element_by_nameを使って抽出箇所を特定しようかな…という訳でまたhtmlソースとにらめっこしてみると面倒なことが発覚。
nameにめっちゃたくさん”:”が使用してあってfind_element_by_nameメソッドでうまく指定できない
なんだよもう…かっこいいname属性付けるのは良いけどさ、わかりにくいよ…もう。という訳で路線変更してxpathを使って探すことにする。
# xpathで要素を指定 xpath_Nm = "//*[contains(@id,'htmlListKamokSikenNm')]" # 科目名 xpath_Uk = "//*[contains(@id,':0:htmlListUketukeDate')]" # 受付日、:0:を加えて最新だけ抽出 xpath_Bk = "//*[contains(@id,':0:htmlListHensouDate')]" # 返却日、:0:を加えて最新だけ抽出 xpath_Hk = "//*[contains(@id,':0:htmlListHyoka')]" # 評価、:0:を加えて最新だけ抽出 # xpathを利用して対象要素を抽出 Nm_elems = driver.find_elements_by_xpath(xpath_Nm) #科目名 Uk_elems = driver.find_elements_by_xpath(xpath_Uk) #受付日 Bk_elems = driver.find_elements_by_xpath(xpath_Bk) #返却日 Hk_elems = driver.find_elements_by_xpath(xpath_Hk) #評価
これで科目名、受付日、返却日、評価の最新情報を特定して抽出することが出来たので、整形してslackにぶん投げる。(とはいえ、これはあくまで簡易的なものなので、各科目の一番上の情報しか取得できていない。)
取得情報まとめ~平文化・整形まで
前工程まででxpathで検索・抽出した結果が出に入ったので、slackにぶん投げられるように平文化、整形を行う。
# 使用listの定義 kcc_columns = ['科目名','受付日','返却日','評価'] kcc_Nm = [] kcc_Uk = [] kcc_Bk = [] kcc_Hk = [] kcc = [kcc_Nm,kcc_Uk,kcc_Bk,kcc_Hk] # 抽出結果をそれぞれリストに格納 for k in Nm_elems: kcc_Nm.append(k.text) for i in Uk_elems: kcc_Uk.append(i.text) for j in Bk_elems: kcc_Bk.append(j.text) for l in Hk_elems: kcc_Hk.append(l.text) # seleniumで起動したブラウザを閉じる driver.close() # Numpy使って行列入替、listへ変換 kcc_list = np.array(kcc).T.tolist()
ここまででそれぞれの結果を定義したリストにぶち込んで、さらにリストの入れ子にすることで全部の情報をひとつのリストにまとめることが出来た。でもこのままだと行列が逆なので、ちょっと小細工して行列変換しておく。あとは整形してslackにぶん投げるだけ。
# 現在日時を取得(いつ取得したデータか表示する為) locale.setlocale(locale.LC_CTYPE, "Japanese_Japan.932") dt_now = datetime.datetime.now() dt_ymd = dt_now.strftime('%Y年%m月%d日 %H:%M:%S 時点の情報です\n') # slackへの表示イメージ # ------------------------------------- # ◆ 経済学(科目名) # 受付日:2020/01/19 返却日:2020/02/07 # 評価:不合格 # ------------------------------------- # 取得したリストを平文化 result_kcc = dt_ymd + "--------------------------------------\n" for i in range(0,len(kcc_list)): result_kcc = result_kcc + '◆ ' + kcc_list[i][0] + '\n' result_kcc = result_kcc + '受付日:' + kcc_list[i][1] + ' 返却日:' + kcc_list[i][2] + '\n' result_kcc = result_kcc + '評価:' + kcc_list[i][3] + '\n' result_kcc = result_kcc + '--------------------------------------\n' result_kcc = result_kcc + 'kcc-channel \n' result_kcc = result_kcc + 'https://kcc-channel.keio.ac.jp:10443/up/faces/login/Com00501A.jsp \n'
ここまでやると、何月何日に取得したデータです!ってのを先頭に表示しつつ、末尾まで確認した後にリンクをクリックすることで詳細情報へ…という流れにすることが出来る。何度かslackにリストのままぶん投げてみたり、pandas使ってDataFrameで投げたりしてみたけど表示出来なかったので(当然)、新しい表示用の変数を定義して、リストからひとつずつ整形してテキストにしてぶち込んでいった。なので、このあたりを整形するとお好きな形で出力できます。
slackぶん投げ~フィナーレ
あとはもう単純で、slackの設定から手に入れたwebhookURLを使って、slackへ。
# slackに結果を飛ばす # webhook URL SLACK_URL = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' #ここにwebhookURLをぶち込む # slackに飛ばす関数の作成 def send_slack(): content = result_kcc payload = { "text": content, "icon_emoji":':snake:', } data = json.dumps(payload) requests.post(SLACK_URL,data) send_slack()
これでコードは完成。あとはタスクスケジューラに設定すれば起動する度でも、1日の決まった時間にでもslackに通知飛ばしてくれますヒャッホー
あとがき
結局、誰しも毎日普通はブラウザを立ち上げる訳で、そんなに苦ではないのですよ。でもなんかPython使って自分の身近なことを一つでも自動化してみたくてやった。すげぇ時間は失われたけど結果楽しかったからおkってやつっすよ。あとはxpathとかよくわからんかったけどなんとかなったし、selenium使うとweb関係は結構幅広くいろんなことが出来るんだなぁ…って勉強になった。
え?慶應通信の勉強しろ?いや、はい、おっしゃる通りで…明日から真面目にやります。明日から。
退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング
- 作者:Al Sweigart
- 発売日: 2017/06/03
- メディア: 単行本(ソフトカバー)
Pythonデータ分析/機械学習のための基本コーディング! pandasライブラリ活用入門 impress top gearシリーズ
- 作者:Daniel Y. Chen,吉川 邦夫,福島 真太朗
- 発売日: 2019/02/22
- メディア: Kindle版
マクロはもう古い! Excel x Python 最速仕事術
マクロはもう古い! Excel x Python 最速仕事術
金宏和實(2019)
雑なあらすじ
- Pythonを使ってExcelの処理をやってみる
- Pythonのプログラムレベルとしては、「初心者ターゲットの本はもうおなか一杯だけど、中級者というのは憚られる…」という人向けの印象
- 現場で使えるか、使えないかと問われたら「これやるならExcelでやります」という印象
スポンサーリンク
読むに至ったきっかけ
何度かPython絡みの読書結果を記事にしているので繰り返しにはなるが、「僕はプログラマーなんて上等なもんでもなくて、ただの職場によくいるExcelオジサン」である。そしてExcelオジサンといっても素晴らしい活躍が出来るという訳でもなく、いわゆる一般的な関数使って一般的なモノを作る程度のレベルなので、Excelで何か講釈が出来るレベルではない。だけどこのままExcelオジサンで居続けるのは時代から凄い勢いで置いていかれそうなので、何か世間で流行っているプログラミングを学ぼうではないか。じゃあ本もいっぱい出てるしPythonで。という訳。で…
- プログラミング超初心者が初心者になるためのPython入門(1)
- ビジネスPython超入門
- 独学プログラマー
- 退屈なことはPythonにやらせよう ーノンプログラマーにも出来る自動化処理プログラミング
といったあたりの本を読破。写経したのは「ビジネスPython」と一部の「退屈なことは~以下略」くらい。それでもなんとなく、Pythonのコードを見れば何をやっているのかはわかるようになったし、嫁さんに「今日ゴハン何合炊けばいいかな?」なんて聞かれる度にいちいち考えるのが面倒だったので『今日ゴハンを何合炊けば良いか計算機』を作るに至った。(ちなみに内容が陳腐なので公開はしない。もちろんだ。)
でもここまでで、「自分の仕事の効率化」には何も至っていないことに気付き、急速にPythonを学ぶ意欲が失われていった。つまり僕は、仕事の道具としてのPythonに興味があったらしい。Excelオジサンで居続けるのは嫌だ!なんて思いながら、Excelオジサンの毛が生えたヴァージョンになりたかったらしい。で、なんか軽い傷心とともにAmazonでPython本を検索して眺めていたら…なんだよこのどストライクタイトル。ExcelとPythonだってよ!(゚∀゚)キタコレ!!
内容に関して感じたこと
結論から言うと、タイトルはどストライクだった本だけど、開いてみれば僕のニーズとはマッチしなかった。だってExcelで処理すればすぐ終わることを、Pythonでコード書いて対応する!ってことに終始していたから。また、この本に最初に登場するコードはExcel伝票をCSVに出力するコードなんだけど、これを初心者が買ってたとしたら多分心が折れる。だから僕みたいな「Excelはそこそこ使えると思うけど、なんか頭打ち感強いからPythonとか手を出してみました。職場でパフォーマンス上がるかしら?」なんていうふわふわした考え方でPython本の1冊目として購入した人はもう二度とPythonのコード、というかプログラミングの世界に足を踏み入れないかもしれない。(いや、言い過ぎかもしれないけど、個人的にそう感じた)
あとは蛇足だけれど、途中途中に挟まれる寸劇が痛すぎて読み切れなかった。Pythonを学び、総務部として活躍をはじめRPA担当にまでなるセンガク君。凄い、凄いよ君は。
終わりに
本の内容は僕には全く合わなかったけれど、ExcelにPythonが搭載されるかも?なんて噂も聞こえてきたりする昨今。こういった先見の明がある本を手に取って、今現時点で大流行りのPythonさんとビジネス最前線で戦い続けているExcelさんがどのようにクロスオーバーするのか、という点に関して思いを馳せながら読むのは良いかもしれない。
だけど、「Excelの延長線上でPython使って見てスーパーマンになりたい!」なんて思っているExcelオジサンは読まなくても良いかもしれない。この本をその突破口にするのは並外れたインスピレーションが必要だ。サンプルプログラムはExcelで簡単にできることを、わざわざPythonでやっています!という印象から抜けきらない。だからもし、もしそんな理由からこの本を手に取った方は、一度Excel上でのスキルを磨き上げることをメインにした方が投資対効果は高いと思うし、それでもまだPythonなんだ!っていう方は「退屈なことは~以下略」のが良いと思います。僕のようなExcelオジサンですらこの本を読んでいると「あ、これとこれとこれを組み合わせて、あれが自動化出来そうだぞ」とか考えが膨らませやすいので。
プログラミングって道具なんだよなぁ。何か強烈にその道具を使ってやりたいことがある訳じゃなくて、今ある道具(例えばExcel)に結び付けようとする行為はなんかこう、釣り竿にキーボードくくりつけて振り回しているようなもんなのかもしれない。僕の考え方がイカンな。
- 作者:金宏 和實
- 発売日: 2019/11/22
- メディア: 単行本
退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング
- 作者:Al Sweigart
- 発売日: 2017/06/03
- メディア: 単行本(ソフトカバー)
独学プログラマー Python言語の基本から仕事のやり方まで
コーリー・アルソフ(2018)
雑なあらすじ
- Pythonを解説の道具とした、「プログラマーとしての生き方」の入門書
- Pythonを学ぶ為「だけ」に買うとちょっとガッカリするかもしれない
- 趣味で学ぼうという人間向けではなく、「プログラマーになりたい」と思い立った人の為の本
読むに至ったきっかけ
僕はプログラマーでもないし、プログラマーを目指している訳でもない。なんとなくPythonに出会い、なんとなくPythonの勉強を始めてみたそこらへんにいるExcelオッサンである。VBAは嫌い。で、なんとなく読んできた本の遍歴と本書の感想は以下から。
プログラミング超初心者が初心者になるためのPython入門(1)
最近、ちょっとした危機感からPython本に手を出し、その流れで購入した。最初に手に取ったのがこれ。当時はPrimeリーディングで無料だった。(Primeに入っているとたまにこういう出会いがあるので解約が出来ない弱い僕)
Python2.xxを使ったPython入門書で、簡単な環境構築から構文まで、サラッと書いてある。「これ、何に役に立つのかな?」などと考えながら読むと多分詰まる。というのは凄く簡単な内容の本なので「ほぉ。そうかい。理解したよ。で?」となってしまうから。だから頭を空っぽにして、「へー、そうかいそうかい。最近良く聞くPythonってヤツはこんな感じなんだね。」ってなテンションで読み進むと気楽で良い。書いてあるコードも難解なものなんて何一つないので、サクッと打ち込んでみてサクッと動かして、「へぇ!」という楽しみ方がオススメ。で、僕の場合はこの本で「なんかやれるかな?仕事で使えたりするかな?」なんてちょっと前向きになれたので、次の本に進むことになった。
ビジネスPython超入門
これは先日、記事にしたPython本。詳しい感想はその記事に譲るけれど、「へー!こんなコトできるのね!面白いじゃん!…仕事にどう役に立つかはわからんけど。なんか役に立つかも…な?」というもの。
- 作者:中島省吾
- 発売日: 2019/06/06
- メディア: 単行本(ソフトカバー)
この本の良いところは、AtomっつーイカしたEditorとAnacondaっつー便利なディストリビューションの導入方法が冒頭で解説されていて、「なんかAtom開いていると高まるー!」的な刷り込みをしてくれるところ。実際Atomの画面は超素敵だし。(会社でもこっそりインストールしてやった。テキストエディタだから許して!)
で、その次に触れたのが本書「独学プログラマー」
独学プログラマー
これはもうなんていうか、名前がイカしてる。プログラマーって職業に僕はかけらも触れたことが無いけれど、きっと彼らはプログラマーになるまでの教育において凄まじいまでの数学と論理的思考能力が叩き込まれ、挙句コンピュータサイエンスの波をうまく乗りこなせるようなヤツらじゃないと出来ないもんだと思っていた。それが「独学」で良い?カッコ良すぎワロタだわ。
独学プログラマー Python言語の基本から仕事のやり方まで
- 作者:コーリー・アルソフ
- 発売日: 2018/02/24
- メディア: 単行本
でも読み進んでいくうちに「あ、これオレちゃうわ」とは思ったのもまた事実。というのは僕はPythonを学びたかった人で、仕事に役立ててみたかった人だったから。だからPythonを学ぶツールとしてこの本を手に取ったのだけれど…これはPythonを仕事に役立てたい!なんて思っている人向けの本ではなくて、「プログラマーになりてぇんだよオレは!」って少しでも思っていて、「でもどうしたらいいかわかんないんだけどどうしましょうか!」ってなっている人向けの本だったということ。ただ、プログラミングって概念やそれを生業としている方々がどのようなツール、考え方をもって仕事をしているのかということを知ることは非常に有意義なことだと思った。Excel使える人が全員めっちゃ仕事出来るってワケではないのと同じように。
終わりに
大昔、BASICを触っていた他人のコードに触れたとき「あ、これオレ思いつかない。無理だ才能無いわオレwww」なんて思ってからプログラミングなんて触れてもいなかったけど(でも当時のセンター試験の選択科目はおいしく頂きました)、それはBASICの書き方しか知らなかったからで、誰かとコードを見せてレビューを貰ってみるとかそんなことはしたこともなかったし、するなんて思いつきもしなかった。それは木を見て森を見ずというか、結局狭い視野で狭いポイントしか見てなかったからなんだろうなぁ。とこの本を読み終えてシミジミと思った。いつか息子が「プログラマーになりたい!」なんて言い出したら買い与えることにしよう。
来るかな…。来ないかな…そんな日はw
今は「退屈なことはPythonにやらせよう ノンプログラマーにもできる自動化処理プログラミング」を読んでおります。いや、通しで2回は読んだんだけど、まだ読んでます。これの感想はまた今度にでも。
- 作者:金宏 和實
- 発売日: 2019/11/22
- メディア: 単行本
退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング
- 作者:Al Sweigart
- 発売日: 2017/06/03
- メディア: 単行本(ソフトカバー)
ビジネスPython 超入門
中島省吾 (2019)
僕は別にプログラミングが得意という訳でもなく、経験と言えば中学生の頃にBASICを触っていたこと。そして中学生~高校生くらいの頃に、HTMLをメモ帳に打ち込んで、自己満足全開の個人HPを公開していたくらいのもの。黒歴史はいっぱい作った。そんな人がなぜ急にPythonのかというと、Amazon Primeに加入することで無料でKindle本が数冊読める「Prime Reading」にPython本があったのだ。隙間時間でざっくりと読める程度で大した内容が書いてあったワケではないのだが、
- 最近、プログラミングの必要性が声高に叫ばれている
- 自分は比較的ITリテラシーが高い方だとは思っているけれど、それはこのむっさくるしい会社内だけの話
- このままExcelとWordしか使えないおじさんで死んでいくのは何か苦しい
といったあたりの不思議な動機というか焦りがある結果、タイトルがスパーン!と心に刺さったのかもしれない。で、大抵プログラミングを始めようと思うとその環境構築で痛い目を見てすぐやめてしまうのだが、今回のPythonは違った。環境構築がとにかく楽だった。だから読み終えて、少しちゃんと勉強してみたいなぁなんて思い、本書の購入に至った。
スポンサーリンク
僕のプログラミングに関する知識
冒頭でも少し触れたが、
- 大昔、BASICを触っていたことがある
- 大昔、HTMLを触っていたことがある
- CSSはちょっとわかる。けどちょっと。
- Java?Javascript?え?なんか違うの?
- VBA?あぁ、使ってるよ。Excelで動作記憶させたりとか多少打ち込む程度に。
という程度の知識。全くやったことない人よりは多少知識があると言っても怒られないのかもしれないが、これで知識がありまぁす!なんて言った日には本職の方々にボコボコにされることうけあい。というもの。だからこの記事で刺さって欲しい読者は、
「昔、ちょっとだけそういうのやったことあるけどさ、なんか最近…置いてかれてる?そんな感じしてさみしいときがあるのよね」
という感じか。
本の内容
先ほどの知識レベルの僕が読んで得た感想は、
- 基本的な構文、極一部の組み込み関数は何かわかった気になった
- WEBスクレイピングが動いた瞬間は感動する!やべぇこれ!
- 読了してみると、「あれ?これ仕事になんか生きる?」
といった感じ。
いや、決してダメな本では無い。冒頭のページにサンプルプログラムの公開アドレスも書いてあるし、(詰まらないけど)詰まったならそこからコードをDLして動かすだけ。環境構築に関してもしっかりと書いてあるので、指示通りにやれば大抵のことはなんとかなった。だけど、だけど。
それだけだった。
決してここから「仕事の自動化だぜ!」とか、「俺はバリバリとプログラムを書き上げるぜ!」には至らない。この本を読破し、実際に手を動かして得られるものは一部の組み込み関数の使い方、リストやタプルなどの概念、ふわーっとしたオブジェクト指向と簡単なモジュールの使い方。といったところ。だから、「プログラミング?と言われて拒否反応を出さない程度の人が、Pythonとはなんぞやwww触ってやろうかwwww」という程度のモチベーションで触り始めるにはとても良い本。ただし、「オレは●●がやりたい!」とか「自動化!自動化!」と息巻いているPython基礎知識保持者には向いていないのかな、という感じ。
本の内容、感じた難易度
第1章 Pythonプログラミング基礎の基礎
難易度:★☆☆☆☆
インストールからインタラクティブシェルを利用して「とにかくPythonを動かしてみる」章。サクサク進める。図も多くてわかりやすい。
第2章 データ型と変数
難易度:★☆☆☆☆
プログラミングという概念を知らなくても、Excelで文字列を数値に悩まされたことがある人なら「あぁ、そういうこと」という感じ。基礎を凄く丁寧に説明してくれているので、置いていかれる!などという感想はこの段階では皆無
第3章 プログラムの流れを制御する
難易度:★★☆☆☆
ここから自分のパソコンでテキストエディタを使ってコードを書いて、Anaconda Promptを利用してプログラムを実際に動かしていくことになる。簡単な計算プログラムが動くことになるので、初学者はここで「おぉ?」なんて小さな感動が。ただ、環境構築が思うようにうまくいかなかったり、たった一つのスペルミスでプログラムが動かずに、それに気づけずに「???」なんて事態も起こり始めるかもしれない。オレは起こった。
第4章 オブジェクトと繰り返し
難易度:★★☆☆☆
ここでwhileやらForやら繰り返しが出てくる。ifなどの条件分岐も現れてきて、「おお、なんかプログラミングっぽい!プログラミングっぽい!」ってちょっとテンションが上がる。ただ、「リスト」という概念はまだしも「タプル?」「辞書?」え?メソッドって何だった?と、ちょっと戸惑い始めるが、なんとなくプログラムが動くから「まぁいいか、全部わからなくてもなんとかなるやろ」という達観が襲ってくる。
第5章 関数の作り方と使い方
難易度:★★★☆☆
関数はわかるんだよ!Excelで散々見てきたしな!でもなんか関数にデータを渡す?え?「仮引数(かりひきすう)??位置引数(いちひきすう)??ちょちょちょ、え?なに?なんて?」と、知らない単語に圧殺されるような妙な感情が芽生える。だがまだ心は折れない。書いてある通りにコード打ち込めばええんやろ?ほら、動いた。大丈夫。まだオレ置いてかれてない!と、自己暗示開始。ん?スコープ?知らん。わかったわかった。この通り書けばええんやろ。うん。わかったわかった。状態。
第6章 組み込み関数とモジュール
難易度:★★★★☆
お!ついに出てきやがったなモジュールさんよ!待ってたぜ!ガシガシ使ってやるぜ!と、タイトルを読んだ段階ですげぇテンションがあがる。そしてページ一面に並ぶ組み込み関数。一気に萎えた。覚えられねぇし覚える気もないわ!わかったわかった。言われたままに打ちます。ええ、打ちます。ここらからちょっと飛ばし読みを始めたりする。「いや、わかってるから!わかってるし!心折れてる訳じゃないし!」自分の中の言い訳ボリュームも大きくなり始める。そしてカレンダーモジュールが動かずに容赦なく読み飛ばす。「きっとこれは何かバージョンが違うだけで、この通りに打てば、環境さえ整っていれば問題が無い。つまりオレはこれを理解した」とブツブツ言いながら。え?インスタンス?わかるわかる。知ってる知ってる。アレだよね。
第7章 WEBスクレイピング
難易度:★★★☆☆
第6章まででやや砕けかけている心が一気に奮起する。「そう!オレはこれがやりたかったんだよ!」なんて思っていたらHTMLとCSS、Javascriptの解説に入る。多分知らない人はここで心が折れる。が、辛抱して読み進めるとついにWebスクレイピングが!たかだか日経平均がAnaconda Promptに表示されただけなのにすげぇやり切った感が得られる。そして数分後に気付く。「あれ?これどうやって実務に活かす?」でもこの章はHTML等の知識がちょっとあるだけですいすい~っと進める。わからん単語は多くても言われた通りにやれば動くしw
第8章 機械学習に挑戦しよう
難易度:★★★★★
読めばなんとなーく、はわかる。が。Numpyあたりで行列・ベクトルの知識が必要になるし、「このコードは結局何がしたくて書いたの?」という感想だけが強くなりすぎて、頭が理解するのを諦めてしまう。確かに書かれている通りにコードを打てばなんかそれらしいものが出来るし、グラフ描画に成功した瞬間は「おお!ええやんええやん!」なんてちょっとテンションがあがったりもする。だけどもう手書き文字の画像認識あたりは打ち込んだコード、さらにその中のモジュールが勝手に動いているだけなので「えーと、僕は何をしたんでしょうか?」などという感想とともにすべてが流れ去っていく。そしてあとがきへと続き、何かやりそこなったような、燃え尽きそこなったような感触で読了
おまけ
特殊な製本がなされているので、どこのページでも本画像のように開いておいておくことが出来る。この仕様のおかげで本を見ながらコードを打ち込む時間がとても快適だった。この点はとてもすごく高くとてつもなく評価してあげたい。世の中の参考書類全部こうなれば良いのに。
終わりに
繰り返しにはなってしまうが、「Pythonに触ろう!」という動機においてはとても良い本。少し手が出にくいWEBスクレイピングや機械学習が目の前のパソコンで動くのはちょっと感動する。だけど、本のタイトルにある「ビジネス」は「ビジネスで役に立つ」ではなくて、「ビジネスライクにカバー」という意味かなぁと思った。次はアレだ。
退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング
- 作者:Al Sweigart
- 発売日: 2017/06/03
- メディア: 単行本(ソフトカバー)
これだな。期待大だ。これならきっと日常業務が爆ぜるはず!…爆ぜないかな。期待し過ぎかな。まぁちょっと買ってみよう。
- 作者:株式会社ビープラウド,リブロワークス
- 発売日: 2018/06/22
- メディア: Kindle版
- 作者:大澤 文孝
- 発売日: 2017/04/08
- メディア: 単行本
HHKB、チャタリング対策の終結点。
職場でのHappy Hacking Keyboard(以下「HHKB」)導入は、つまらないメール返信すら崇高な業務のような気にさせてくれた。そしてそのあまりに心地よい打鍵感から「何か!何かタイピングをする為の仕事は無いのか!」などとムラムラするハメになり、PDFスキャンデータしか残っていなかった某系統テナント向け定期建物賃貸借契約書のひな型をwordに打ち起こすという素晴らしくアホな偉業を達成する超偉大な手助けとなった。その契約書、1万字弱の非常につまらない文章であった。
しかし、その素晴らしい打鍵感、打鍵音で軽いトランス状態に突入した僕を一気に現実に引き戻すのが…チャタリンgggggggggggggggggggggggggggggggg
チャタリングである。
僕の持っているHHKBはBT接続タイプ。いわゆるHappy Hacking Keyboard Professional BTってやつだ。コイツを購入してからずーーーーーーっと同じ症状で何をやってもダメなので、せめてBluetooth接続機器を減らすことで何とかできないかと努力をしてみたのだが、やっぱりダメだった。
しかしこの度。そのチャタリング対策として完全・完璧なモノに行き着いた。
「Bluetoothのせいなら、Bluetoothを辞めればいいじゃない。」
「ケーキを食べればいいじゃない」(ケーキをたべればいいじゃない)とは、フランス語の語句 Qu'ils mangent de la brioche!(「ブリオッシュを食べればいいじゃない」の意)を踏まえた英語の慣用句 Let them eat cake を日本語に訳したもので、農民が主食として食べるパンに事欠いていることを知った「あるたいへんに身分の高い女性」(une grande princesse) マリー・アントワネットが言った台詞とされている。ただし、これはマリー・アントワネット自身の言葉ではないことが判明している。
スポンサーリンク
考え抜いた挙句の結論
当然、金銭的に余裕など無い。ましてやHHKBはキーボードというには高すぎる。「このキーボード30,000円近くするんだぜフォヌカポゥ」などと職場でのたまおうものなら、その時点で一生モノの渾名として「鍵盤基地外」「カタカタ魔人」良くて「キーボード変態」を拝命することになる。だからそうやすやすとラーメンの替え玉宜しく追加購入なんぞ出来ぬのである。だがHHKB BTをこの職場で使い続ける限り、チャタリングと戦い続けるハメになる。ブッダの苦行スイッチが入っていたとしても助走してキーボードを投げ捨てたくなるくらいの頻度で。
※最近ハマってた
で、解決をする為にはこのキーボードをBTで接続しないでなんとかするという手法しか残されていない訳だが、HHKB BTは有線接続には対応していない。いや、厳密にいえば有線接続は出来るのだが、これはあくまでも電源供給のみでBT接続を解除して有線で入力が出来るという仕様ではない。そう。だからもうここからはHHKB BTを改造して有線化するしか無いのである…!
HHKB の有線化
そんなこと出来るのかどうかはよくわからなかったが、とりあえず適当な検索ワードで調べてみると…
あ、なんかめっちゃ面倒で難しそう。すげぇ楽しそうだけど4時間かかるとかちょっと鬼だな。(ちなみにその4時間は静音化作業も含まれている)休日にどうしてもやることがなくて金が余ってたら視野に入るかもしれない。もしこの作業に興味が出た方がいらっしゃったら、「HHKB 有線化」とか「Alternative Controller for HHKB」で検索すると幸せになれるかもです。
これはアレだ。不器用代表で今まで生きてきた僕が手を出して良い分野の作業ではない気がする。エンジニアの方々向けというイメージが強い。つーかこれ作ってるの個人かよ!恐ろしい…マニュアルなんて無さそうだ…絶対僕には無理だ。という訳で断念。
迷える子羊に降りた天啓
電子工作的なものは不可能なので、もうやっぱりこのクソ高いキーボードをもう1枚買うしかない。幸い、有線タイプのHHKBはHHKB BTから比較すると20%ほどお安い。といっても24千円ほどするので「クソ高い」から「バカ高い」くらいのランクダウンしかしないが。となるともう、お金を貯めて買うしか選択肢が残されないことになる。生産性を高める為に購入し、フルサイズキーボードからも卒業して慣れ親しんだHHKBが…まさかチャタリングという悪魔の所業によって生産性を下げる要因として僕の前に現れるとは。あぁでも新品買うのにお金貯めるとかそう安いもんじゃないんだからまたずいぶん時間がかかる…ということはずいぶんと長い時間チャタリングと戦わねばならないじゃないか…なんて思っていたらつけっぱなしにしていたTVから天啓が。
「メルカリ♪」
そして購入へ…
そうだよ。中古で良いんだよ。キーボードなんだからキートップ綺麗にしたら大抵どうってことないし。(※いやもちろん色々な考え方があるので『嫌だ!』って人は世の中にたくさんいると思うけど)という訳でメルカリをiPhoneにインストールし、HHKBをお気に入り検索に登録。情報の更新がある度にプッシュ通知が届くように設定を済ませる。予算は15千円前後。使用感は「見た感じそれほど汚くない感じで、非喫煙者・ペット飼育者」という前提条件。色は…白も良いけど白はもう持ってるから黒。で、ただひたすら出物を待つ。出物はあるが金額が…とか、使用感が…色が…箱無しか…とか散々っぱら迷ったり買いそびれたりしたので、HHKBをお気に入り検索に設定してから実に1カ月以上迷った。結局。で、購入。13千円で黒、2014年製のそこそこ綺麗なヤツ。
買った後テンションが上がってしまったので赤と青のワンポイントキートップもAmazonで買ってやった。で、写真撮ってやった。どや。
結論
有線接続のHHKBは素晴らしかった。職場でのタイピングで1時間に1回、ひどいときは数回喰らっていたチャタリングが無いだけでこれほどまで快適になるとは。というかまたただのメール返信ですら崇高な業務なような気がするくらい楽しくなってきた。しかも赤と青のワンポイントキートップがめっちゃカッコイイ。ベタだけどめっちゃカッコイイ。めっちゃ所有欲満たされる。有線にして本当に正解だった。
これでHHKB BTは職場で必要がなくなった訳だけど…こいつは家でSurface Proの相方専用機として使うことにしよう。Bluetooth機器がそこまで多くない我が家、しかも僕の書斎であればそこまでチャタリングすることもあるまいて。Surface Proのキーボードはペラッペラでバインバインとしたリアクションがなんか苦手だったので丁度良い。慶應通信のレポート書いたりブログ更新したり、文字数をタイプする用事は尽きないかrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
家でもチャタリングからは逃げられないようである。頻度は少ないからもう諦めるけどさ。もう一台買うか。お金持ちになったら( ´Д`)=3
【2020年5月6日追記】おまけ
ちょっと前に、PFUさんから出ましたな。
HHKB Professional HYBRID Type-Sですって奥さん。チャタリングするのかどうかは知らないけれど、Bluetooth接続も出来るけどUSB接続も出来るよ!とか最高じゃないですか。チャタったらUSB接続すればいい訳で、追加のHHKBを買う必要は無いんだ!素敵!まぁ結局2台買って家と会社両方で使えている訳で、幸せなんだけど、幸せなんだけど…もうちょっと早く出してくれてたらもっと幸せだったのになー…。
いつか買おう。いつか。お金持ちになったら。
PFU HHKB Professional JP Type-S 日本語配列/白 PD-KB420WS
- 発売日: 2011/06/15
- メディア: Personal Computers
東プレ REALFORCE R2 テンキーレス 日本語配列 静電容量無接点方式 USB 荷重45g レーザー刻印 かな表記なし ブラック R2TL-JP4-BK
- 発売日: 2018/03/14
- メディア: Personal Computers