ぴあぴあゆーとぴあ

雑記ブログ

オランダ留学~VISA,部屋探し編~

はじめに

9月のはじめから,オランダのデルフト工科大学さんの方へ留学させていただいております. こちらでは研究室に席をいただいており,隔週くらいの頻度でこちらの教授とミーティングさせていただいております. 雰囲気的には交換留学生に近いかもしれません. こちらに来るにあたって,色々調べたことをまとめようと思います.

VISAについて

ヨーロッパのほとんどの国では,シェンゲン協定を結んでいます. そのためヨーロッパ間の国の行き来では基本的に入国審査がそれほど厳しくなく,自由に行き来できるそうです. それに関連してシェンゲンビザというのがあるのですが,日本人は電子上の手続きなどを一切取ることなく,こちらのビザでシェンゲン協定国を周ることができます. ただし,シェンゲンビザでは「あらゆる180日においてシェンゲン協定加盟国に90日以下の滞在」が許可されており,シェンゲン圏に90日滞在するとその後90日はシェンゲン圏へ入国することができないようなので注意が必要です. 自分はこちらのVISAで滞在させていただいております.

これ以上の期間滞在する場合は,研究者の場合はオランダに来てから研究機関を通して移民局に滞在許可を取ったりするようです.

シェンゲン協定 - Wikipedia

部屋探し

オランダではDUWOという企業が部屋探しに関するサービスを提供しています. 日本で言う所のmini miniやsuumoみたいなものですね. 自分は大学からDUWOを紹介してもらい,そちらで部屋を契約しました. Airbnbなどの部屋と料金を比較しましたが,DUWOで借りた方がやすかったです. またレンタルで食器やフライパンなどの料理器具,布団やベッド,共用の洗濯機(1回2ユーロ)なども提供されるため,非常によかったです.

https://www.duwo.nl/en/i-rent/

おわりに

オランダは外国にしては珍しく,トイレが綺麗なところがなにより嬉しいですね. マクドナルドや駅などへ行くと,トイレの前に募金箱のようなものがあり,そこにお金を支払ってから使うようになっています.

今回はこのくらいで締めようと思います. 次は観光や食事,文化,大学の雰囲気などについて書くかもしれません. デルフト工科大学はとても綺麗で良いところです. それではまた.

クックパッドのR&Dインターンシップへ行ってきた話

はじめに

時が経つのは早いもので,前回記事を書いたのが1月1日ですね... 友人がブログを書いていたのでそれに触発された形で書いてますw 題材はクックパッドR&Dの5日間のインターンシップへ行ってきたのでその感想です.

インターンシップの内容

こちらについては他のインターン生が分かりやすく書いてくれているので,簡単なまとめと個人的な所感を書こうかなと思います. jin-t.hatenablog.com techlife.cookpad.com

画像分析

菊田さんという物理出身の方による,最近のニューラルネットワークの軽量化やアーキテクチャの話がメインでした. また自動微分についても,実際に手計算で解いてみるというのをやりました. 情報系ではこういった手計算をやろうという方が珍しい(?)気がするので,とても良いなと思いました. やっぱり手計算楽しいですね. お話を聞いていて,ベクトル解析やら関数解析やらそっち系の知識が欲しいなと思いました. 十分応用的な分野なのですが,もうちょっとアルゴリズムとか機械学習とかそういうのよりピュアっぽい数学も触りたいですね.

自然言語処理

実務で自然言語処理というのはやはり難しいんだなぁと感じました. 講師の方は原島さんという博士課程を卒業してすぐにクックパッドに入社されて7年目(6かも)の方で,クックパッドをR&D部門が立ち上がる前からずっと支えられている方みたいです. 講義ではテキストファイルをCUI上で集計処理したのですが,久々な体験で面白かったですね. また他のインターン生がxonshを使っていて,真似して使って見たらめっちゃ便利でした. 最終日の発表で,レシピのデータについて機械翻訳をやられているインターン生の方がいて,こんな1日で精度よくできるものなんだなぁと面白かったです.

MLOps

MLOpsとは「Machine Learning Operations」の略だそうで,機械学習を用いたサービスを開発する上での,運用部分のことを指すそうです.メルカリさんやクックパッドさんがこれ関係のイベントを開催されてるみたいですね.具体的には実験環境をDockerで管理したりだとか,flaskで簡単な機械学習を用いたwebアプリケーションを作成しました.Dockerは開発者にとっては慣れるまで大変そうですが,ユーザーにとってはかなり嬉しいものだなと実感しました.自分もそういったサービスを一個くらい作成して,githubで公開したいですね. 講師の方はSparkの勾配ブースティングの実装部分にコントリビュートしたこともあるということで,そういった方のお話は聞いたことがなかったのでとても貴重な経験でした.有名なプロジェクトにコントリビュートを経験すると,開発経験としてすごく良いのだろうなと伝わってきました.やってみたいですね.こういった方がいらっしゃるのはweb系の企業ならではかなと思います.

最後に

講師の方が三者三様別の強みを持っておりキャラも違うけど,面倒見の良さが伝わってきて,多様性のあるすごく良い組織だなと感じました. 最終日の懇親会では講師の方以外ともお話させていただきましたが,みなさんお話が面白かったです.

社風がかなりオープンで,とても素晴らしいと思いました. 菊田さんも仰られていたのですが,外での発表をかなり意識されて資料を作成されているのを強く感じました. こんなところで働きたいですね. また風土として,外での発表活動などを評価する組織というのは素晴らしいですね. 他のインターンシップについてもtwitterをやっていると話が流れてきますが,インターンの内容をブログにまとめて資料まで公開されている企業さんはそれほど多くないのではないでしょうか.

今回はこのあたりで記事を終わりたいと思います.

今年を振り返って

お久しぶりです.

最近は留学が終わって,卒業旅行に追われておりました.
そこそこの進捗を出しつつ,年末で論文もある程度書き終わりました.
卒業要件は満たしたかな,といった進捗であります.

さて今年も終わりなので,今年やって来たことを振り返ろうかなと思います.
主に技術的な話がメインです.

少しだけ自己紹介をしておくと,自分は愛知の情報工学科の学生で,現在学部の4年生です.
そこそこプログラミングが好きで,学部3年までは大学でロボコンをやっておりました.
www.youtube.com
簡単に紹介すると,こういうことやってる部活です.
メンバーには迷惑をかけつつも,良い経験をさせてもらったと思っています.
技術的なこともありますが,マネジメントを少しやらせていただいて, メンバーで開発することやスケジュール管理が勉強になりました.

来年からは同じ大学の院へと進みます.

2016年9月〜2016年11月頃まで

この頃は学部の3年でした.
一昨年8月頃までは,上記の部活動をやっており,
それが終わったあとは,何をやっていこうかと,悩んでいたのを覚えています.
9月,10月は映画をたくさん見たり,営業系や思考法の本を読んだりして過ごしていました.

そこでぼんやりと,もっと数学をやりたいとか,いろんなところへ行って見たいと思いました.
情報工で数学がやりたいなら機械学習か統計分析かなとか,ぼんやり思ってましたね.

具体的には,留学と企業インターンとデータ分析系をやりたいと思ってました.

2016年11月〜2017年1月頃まで

この頃には,大学で研究室配属がありました.
機械学習系の研究室か,海外交流がさかんな研究室のどちらにするか悩んでいました.
最終的には,機械学習は自分で勉強しようと考え,海外交流がさかんな方の研究室を選びました.
おかげさまで,今年には学士という身分でありながら,3ヶ月という期間留学をさせてもらいました.
詳しくは後述

また東京でインターンシップを探していました. 内容はプログラミング(非web系)が出来たらなんでも良いと考えてました.
なるべく長期でやりたい,学部で就職するつもりがない,という条件で探していました.

2~3月

機械学習やデータ分析に役立ちそうなことを調べていました.
本を読んだり,twitterで界隈の人に聞いたり,そんな感じですね.
生態学データ解析 - 本/データ解析のための統計モデリング入門
岩波データサイエンス
O'Reilly Japan - ゼロから作るDeep Learning
TJO氏やsammy_suyama氏,nardtree氏などには感謝です.

また研究室に配属されて,研究室で専門にしていることも勉強してました.
ゲーム理論とかマルチエージェントとかその辺の分野です.

3月には東京に住み込みで,1ヶ月間インターンシップを行いました.
人工知能(AI)開発、ディープラーニング実装、機械学習、データマイニングコンサルテイング | エッジコンサルティング株式会社
人材系の企業で,求人情報や求職情報から,データの傾向の変化を抽出するというタスクでした.
ほとんど一人で作業しており,基本的にルールベースでの分析だったため,それほど大したことはしてないです.
pythonmySQLを用いたり,日報を書いたり,初めてのインターンだったため,楽しかったです.

またインターンとは別に,いろんな人に会いに行ったりして,刺激は多かったですね.
また東京へ行きたいです.

4~8月

院試の勉強を行なっていました.
また,留学用の奨学金の申請や,受け入れ先の研究室とメールをしていました.
院試が8月末で,そのあとすぐに留学する予定だったので, 落ちていたらニートだなと思って過ごしてましたねw

他には,研究室の自動交渉エージェントの国際競技会に参加していました.
ANAC2017 - Eighth Automated Negotiating Agents Competition
結果として,決勝リーグに進出することができ, 人工知能系のトップカンファレンスであるIJCAI2017に参加させてもらいました.
一応自分が開発したエージェントについて,発表の時間をいただいたのですが,グダグダすぎて申し訳なかったです.
英語をもっと頑張ろうと思いました...

9~11月

オーストラリアのウーロンゴン大学へ留学していました.
ほとんど初めての海外ということもあり,刺激的で楽しかったです.
日曜日には観光や,教会へ行っていました.
また研究室は,自分以外全員博士後期の学生で,レベルが高かったです.
与えてもらってる環境に対して,アウトプットが追いついていなくて,我ながらひどいなと感じてましたねw

むこうでは卒業研究をやっており,自動交渉の環境作成と,機械学習技術を用いた自動交渉エージェントを作成していました.
GitHub - TomoyaFukui/Jupiter: Use Genius agent in Python
エージェントの作成自体は,試行錯誤しているものの,まだ成果が出ていない状態です.
DQNを用いたエージェントを作成しているのですが,パラメータの調整とか基礎知識の不足が感じられます.

12月

3月にインターンシップをさせていただいたご縁で,これに参加させてもらっています.
人工知能専門の教育と仕事紹介のワンストップスクール | AIジョブカレ
初心者向けの内容で,sklearnの使い方や,一通りの分析の流れが分かって面白いです.
実務的な話が多いかなといった印象です.
自分で本を読んで勉強できる方や,深い数学を知りたい方には必要ないかもしれません.
価格のわりには,とても良いかなと思います.

またピコデバイスさんで,データ分析業務をさせていただいております.
http://www.pico-device.co.jp/
こちらの企業には,皮膚ガスの測定という,人間の皮膚から出る化合物の量を測定する機械があります.
あんまり詳しく語れないですが,そのデータを分析させていただいてます.
業務的には,pythonでデータをplotlyで可視化したり,ランダムフォレストを使って特徴量の削減,分類といったことをしています.
今まで勉強してきたことができて楽しいです.

また卒業論文を書いていました.
上述の自動交渉環境についてまとめています.
できたら,強化学習を用いたエージェントについても書きたいのですが,そこまでいけるか怪しいですね.

終わりに

そこそこ色々やれて楽しく充実した1年でした.

機械学習についても,確率統計やベイズ的なアプローチから,ランダムフォレストやニューラルネットワークのアプローチまで,色々勉強できました.
諸々ちょっとだけ触った感触から,ベイズが一番楽しかったので,この方向性でなにかできないかなと考えています.
ガウス過程が勉強したいのですが,カーネル法のあたりの話でちょっとつまづいております.
これから仮想通貨の価格予測でも,適当にやろうかなと思ってます. また深刻な数学力,英語力不足を感じたので,そっちもやりたいですね.

結構記事が長くなってしまったので,今回はこんな感じでお開きです.
良いお年を

オーストラリアから帰ってきました.

恥ずかしながら帰ってまいりました. ずっとブログを更新していなかったですが,12月1日には日本へ帰ってきてました. 最近は卒業研究に追われています. 今回は帰国前にシドニー周辺で観光していたので,その辺りの日記です.

シドニー周辺

ブルーマウンテンやダーリングハーバー,シドニー立海洋博物館,カジノなどいろんな場所へ行きました. 帰りには香港国際空港を経由したので,中華料理も食べてきました.

終わりに

今回は短いですが,こんな感じで... 最近技術系の記事を書いていないので,その辺を書いていきたいですね... jupiter notebookやらpandasやらsklearn,tensorflowやら使い始めたので,その辺りでなにかしらアウトプットできたらな,と思います.

GPU版TensorFlowの環境構築

前回に引き続いて、pythonの開発環境について書いていこうかなと思います。
今回はTensorFlowの導入について書いていきたいなと思います。
と言っても、ほとんどは引用ですが。。。

マシンのスペック

筆者は研究室のGPUを使わせてもらってます。
製品一覧| UNIV|大学・研究機関向けオーダーメイドPC
詳しくはあんまりわからないのですが、MAS-XE5-SV1U/4X K80搭載モデルと同等のもののようです。
OS Ubuntu 14.04 x86_64
CUDA V8.0.44
cuDNN 5

tensorflowの導入

上記のマシンにGPU版Tensorflowを導入しました。
Python: Keras/TensorFlow の学習を GPU で高速化する (Ubuntu 16.04 LTS) - CUBE SUGAR CONTAINER
基本的には上記のページと公式サイトを見ながらやっていくだけです。
引っかかった部分としては、「pip3 install tensorflow」をしたあとに
URLを指定して「pip3 install --upgrade 'URL'」とするのですがcuDNN5対応のURLが見つからなくて苦労しました。
cuDNN6へアップグレードするのが良さそうなのですが、共有のGPUでその辺をいじるとめんどくさそうだったため一旦諦めました。
公式ホームページをもうちょっと探して見たらところ下のURLにありました。
Download and Setup  |  TensorFlow

tensorflowの性能比較

GPU版と、筆者の持っているmac book pro(2.8 GHz Intel Core i7)でMNISTの学習時間を比べて見ました。
https://raw.githubusercontent.com/fchollet/keras/master/examples/mnist_cnn.py
使用したプログラムはこいつです。kerasですがバックエンドはtensorflowです。

CPU

Using TensorFlow backend.
x_train shape: (60000, 28, 28, 1)
60000 train samples
10000 test samples
Train on 60000 samples, validate on 10000 samples
Epoch 1/12
2017-10-26 15:09:42.378154: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.2 instructions, but these are available on your machine and could speed up CPU computations.
2017-10-26 15:09:42.378197: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX instructions, but these are available on your machine and could speed up CPU computations.
2017-10-26 15:09:42.378206: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX2 instructions, but these are available on your machine and could speed up CPU computations.
2017-10-26 15:09:42.378213: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use FMA instructions, but these are available on your machine and could speed up CPU computations.
60000/60000 [==============================] - 96s - loss: 0.3160 - acc: 0.9054 - val_loss: 0.0741 - val_acc: 0.9760
Epoch 2/12
60000/60000 [==============================] - 94s - loss: 0.1083 - acc: 0.9682 - val_loss: 0.0501 - val_acc: 0.9835
Epoch 3/12
60000/60000 [==============================] - 101s - loss: 0.0821 - acc: 0.9750 - val_loss: 0.0439 - val_acc: 0.9856
Epoch 4/12
60000/60000 [==============================] - 100s - loss: 0.0695 - acc: 0.9787 - val_loss: 0.0387 - val_acc: 0.9870
Epoch 5/12
60000/60000 [==============================] - 97s - loss: 0.0598 - acc: 0.9815 - val_loss: 0.0389 - val_acc: 0.9871
Epoch 6/12
60000/60000 [==============================] - 100s - loss: 0.0549 - acc: 0.9837 - val_loss: 0.0322 - val_acc: 0.9889
Epoch 7/12
60000/60000 [==============================] - 108s - loss: 0.0490 - acc: 0.9852 - val_loss: 0.0306 - val_acc: 0.9900
Epoch 8/12
60000/60000 [==============================] - 97s - loss: 0.0441 - acc: 0.9872 - val_loss: 0.0334 - val_acc: 0.9894
Epoch 9/12
60000/60000 [==============================] - 98s - loss: 0.0422 - acc: 0.9872 - val_loss: 0.0286 - val_acc: 0.9902
Epoch 10/12
60000/60000 [==============================] - 98s - loss: 0.0406 - acc: 0.9882 - val_loss: 0.0283 - val_acc: 0.9903
Epoch 11/12
60000/60000 [==============================] - 98s - loss: 0.0381 - acc: 0.9885 - val_loss: 0.0288 - val_acc: 0.9898
Epoch 12/12
60000/60000 [==============================] - 97s - loss: 0.0361 - acc: 0.9889 - val_loss: 0.0271 - val_acc: 0.9908
Test loss: 0.0271335351378
Test accuracy: 0.9908

real    20m0.348s
user    98m0.099s
sys 14m46.822s

GPU

Using TensorFlow backend.
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcublas.so locally
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcudnn.so locally
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcufft.so locally
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcuda.so.1 locally
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcurand.so locally
x_train shape: (60000, 28, 28, 1)
60000 train samples
10000 test samples
Train on 60000 samples, validate on 10000 samples
Epoch 1/12
I tensorflow/core/common_runtime/gpu/gpu_device.cc:885] Found device 0 with properties: 
name: Tesla P40
major: 6 minor: 1 memoryClockRate (GHz) 1.531
pciBusID 0000:81:00.0
Total memory: 22.38GiB
Free memory: 949.94MiB
W tensorflow/stream_executor/cuda/cuda_driver.cc:590] creating context when one is currently active; existing: 0x5440c20
I tensorflow/core/common_runtime/gpu/gpu_device.cc:885] Found device 1 with properties: 
name: Tesla P40
major: 6 minor: 1 memoryClockRate (GHz) 1.531
pciBusID 0000:82:00.0
Total memory: 22.38GiB
Free memory: 960.94MiB
I tensorflow/core/common_runtime/gpu/gpu_device.cc:906] DMA: 0 1 
I tensorflow/core/common_runtime/gpu/gpu_device.cc:916] 0:   Y Y 
I tensorflow/core/common_runtime/gpu/gpu_device.cc:916] 1:   Y Y 
I tensorflow/core/common_runtime/gpu/gpu_device.cc:975] Creating TensorFlow device (/gpu:0) -> (device: 0, name: Tesla P40, pci bus id: 0000:81:00.0)
I tensorflow/core/common_runtime/gpu/gpu_device.cc:975] Creating TensorFlow device (/gpu:1) -> (device: 1, name: Tesla P40, pci bus id: 0000:82:00.0)
60000/60000 [==============================] - 8s - loss: 0.3210 - acc: 0.9032 - val_loss: 0.0768 - val_acc: 0.9752
Epoch 2/12
60000/60000 [==============================] - 5s - loss: 0.1149 - acc: 0.9661 - val_loss: 0.0543 - val_acc: 0.9824
Epoch 3/12
60000/60000 [==============================] - 5s - loss: 0.0842 - acc: 0.9750 - val_loss: 0.0441 - val_acc: 0.9852
Epoch 4/12
60000/60000 [==============================] - 5s - loss: 0.0710 - acc: 0.9788 - val_loss: 0.0426 - val_acc: 0.9851
Epoch 5/12
60000/60000 [==============================] - 5s - loss: 0.0622 - acc: 0.9815 - val_loss: 0.0371 - val_acc: 0.9871
Epoch 6/12
60000/60000 [==============================] - 5s - loss: 0.0554 - acc: 0.9835 - val_loss: 0.0331 - val_acc: 0.9882
Epoch 7/12
60000/60000 [==============================] - 5s - loss: 0.0513 - acc: 0.9848 - val_loss: 0.0347 - val_acc: 0.9875
Epoch 8/12
60000/60000 [==============================] - 5s - loss: 0.0480 - acc: 0.9858 - val_loss: 0.0325 - val_acc: 0.9887
Epoch 9/12
60000/60000 [==============================] - 5s - loss: 0.0448 - acc: 0.9871 - val_loss: 0.0339 - val_acc: 0.9889
Epoch 10/12
60000/60000 [==============================] - 5s - loss: 0.0424 - acc: 0.9875 - val_loss: 0.0309 - val_acc: 0.9901
Epoch 11/12
60000/60000 [==============================] - 5s - loss: 0.0379 - acc: 0.9884 - val_loss: 0.0329 - val_acc: 0.9896
Epoch 12/12
60000/60000 [==============================] - 5s - loss: 0.0380 - acc: 0.9883 - val_loss: 0.0302 - val_acc: 0.9904
Test loss: 0.0302223094942
Test accuracy: 0.9904

real    1m14.527s
user    1m37.863s
sys 0m22.903s

感想

CPU版では20分かかった処理が、GPUでは1分ちょっとで終わってますね。
これは色々捗りそうです。
なんだかんだ3日ほどかかって環境構築が終わり、ほっとしました。
次はjupyter notebookについて記事を書くかもです。

Pythonの開発環境などについて色々

最近卒研でPythonを触っています。
備忘録代わりに色々まとめようかなと思います。

開発環境

基本的にatomvimプラグインを入れて開発しています。 ただ既存のatompythonコードのハイライトが、アノテーションに対応していなかったので、MagicPythonのプラグインを入れて居ます。
これもあんまり好きじゃないのですが、とりあえずこれを使って居ます。
以下の環境を基本的に参考にしました。 おかゆのAtomのパッケージのメモ - ゆくゆくは有へと

Pythonの小ネタまとめ

筆者はもともとC++を触って居たのですが、
pythonコードを書いてて「これはPythonだとどうやるんだろう」と気になったことをまとめようと思います。

抽象クラス関連

親クラスにgetterだけ実装して、子クラスにはsetterみたいなのだけ実装したい場合、 親クラスと子クラス両方で使う変数には「__(アンダーバー2つ)」付けずに実装しなければならないようです。 これでは、子クラス内の変数が隠蔽されません。
これを解消したく色々試した結果、以下のようなコードになりました。

from abc import ABCMeta, abstractmethod

# 抽象クラス
class Animal(metaclass=ABCMeta):
    @classmethod
    @abstractmethod
    def __init__(self):
        self.__voice = ""
        pass

    def get_voice(self) -> str:
        return self.__voice

    @classmethod
    @abstractmethod
    def set_voice(self, voice: str):
        self.__voice = str
        pass

# 抽象クラスを継承
class Dog(Animal):
    def __init__(self):
        self.set_voice("woof")

    def set_voice(self, voice: str):
        #super().voice = voice
        self._Animal__voice = voice


if __name__ == "__main__":
    print(issubclass(Dog().__class__, Animal)) #true
    print(isinstance(Dog(), Animal)) #true
    dog = Dog()
    print(dog.get_voice()) #woof
    #print(dog.voice) # error

set_voice関数で無理やり親クラスの内部変数にアクセスしています。
推奨されない感がすごいですね。。。これ以外の実装方法が思い浮かびませんでした。
良い案求めてます笑
以下のサイトを参考にしました。
PythonのABC - 抽象クラスとダック・タイピング - Qiita
これちょっとQiitaにでも上げて、意見を求めてみようかしら Pythonの親クラスにgetter、子クラスにsetterを実装する。 - Qiita
[加筆]qiitaに書いてみたところ、そもそもアンダーバー2つをそこまで使わなくても良いらしい
たしかにそんな気がする
紳士協定的にアンダーバー付いてるのにアクセスする方が悪いのスタイルで、アンダーバー1つを変数につけるのが正解っぽい。

コーディング規約

結構適当な人間なので、また読み返す
pythonのコード書いてると、スネークケースだらけになるのは私だけでしょうか。
pep8に準拠する - Qiita
Pythonのコーディング規約PEP8を要約してみる(1) - Qiita

可変長引数

*だとタプルになって、**だと辞書オブジェクトに格納されるようです。
qiita.com

XMLファイルの操作

PythonでXML解析 - code snippets

デコレータ関連

デバッグが楽になりそう
自分はgetterじゃなくて@propertyでクラス変数を取得するのがあんまり好きくないので、@propartyはあんまり使ってないです。
リストオブジェクトとかをgetterで返すときはちゃんとdeepcopyしないとバグの温床になりやすいので注意してます
Python デコレータ再入門 ~デコレータは種類別に覚えよう~ - Qiita

matplotlib

基本的に下のサイトを見て、詳しく知りたくなったら、関数名でググります。
最初から公式サイト見た方が速いことも。
matplotlib - Python学習講座
リアルタイムな描画
matplotlibでリアルタイム描画 - Qiita matplotlibによるリアルタイムのグラフ表示 - Qiita

その他参考サイト

Pythonを書き始める前に見るべきTips - Qiita

終わりに

とりあえずこんな感じで。
pep8関連は結構放置しているので手をつけねば、と思ってます。
今度の記事で卒研用に作成した実験用のpythonコードでも説明したいなと思ってます。
githubで公開でもしたいですね。

オーストラリア留学 荷物編

前回の記事から1ヶ月くらい経ってますね
時間が経つのは早いもので。。。

今回は荷物や着いてからやっておいたら良いことを書いておこうと思います。
オーストラリアは治安が良くてスリなどもないです。

着いてからやると良いこと。

英語

英語が出来るかどうかで、生活の自由度が結構変わるかもです。
自分は英語力的に、同世代のネイティブの会話に参加するのは厳しいです。
なんとなくの会話の流れや雰囲気はわかるんですけどね。
最近は英語の勉強がてら、fuller houseというドラマをNetflixで見て、シャドーイングしてます。
余談ですけど、シャドーイングできるようになると、英語が聞き取れるようになるから不思議ですね。。。
fuller houseはアメリカのドラマですが、留学先の国のドラマを見てから行くと、独特の発音がわかっていいかもしれません。
ネイティブの会話についていこうと思ったら、こういったドラマを初見である程度聞き取れるくらいの能力は必要な気がしています。

あと、オーストラリアでは現地の大学や教会、図書館などで無料の会話イベントを催しています。
インド人やらタイ人、シリア人など様々な方が居て面白いです。
そういったイベントでは、気軽に話せて良いですよ。

持ち物

安く済ませたいなら荷物はなるべく色々持って来た行った方が良いです。
オーストラリアには基本的に百均がないので、特にフォークとかナイフといったものでも一本300円くらいしたりします。
菜箸が個人的に欲しいのですが、売ってなくて困ってます。
といっても、荷物が多いと大変なので、ある程度妥協するのがいいかなと思います。

逆に衣服類は日本と価格があまり変わらないようです。
消費財が基本的にこちらだと高い気がします。

携帯

自分はvoda phoneのsimを使っています。
35日間有効、9GBで40$というものです。空港に自販機で販売されていたものを購入しました。
期限が過ぎたりデータが足りなくなった場合、ウェブサイトからクレカで課金することにより、リチャージ出来ます。
ググればまとめたサイトも出てくるので、そちらをどうぞ。
もう少し安いものもあるようですが、自分は妥協してこちらを使い続けてます。

終わりに

今回の記事はここまで
また適当に追記するかもしれません。