今日から4日間は普通に過ごす

こんにちはRockinWoolです。最近は仕事でもマークダウンを使用しているので、少々使い方に幅がでてきたかな・・・という感じです。マークダウンって凄い楽なので良いですね〜。さて、今日はPythonやCに慣れる日と決めていたので早速実況しながら色々やって行こうと思います。

久しぶりにPythonに触らなければしぬと思った

2020年8月某日こんにちは。最近仕事にばっかり注力していたRockinWoolです。仕事辞めたいといつも思っているのに、それが人生の時間で一番大きな割合を占めているのがしょっちゅう許せないですよね。そういうわけで、前回の投稿から現在までの間で色々勉強のスタイルを模索して、結果としては出社前に一時間程度勉強してから出勤するのがアタマが冴えてベストという答えになりました。これを習慣付けて、パワーパーソンになるべく修練を積んでいこうと思ってます。 さて、今回は前回までの’Pythonで学ぶネットワーク’ではなく、最近にわかに話題らしいGinzaについてです。「まえがきで散々勉強勉強言って置きながら全然アンタの専門ちゃうやんけ」って言われそうですが、やりたかったんだもん。仕方ない。 Ginzaについては次のサイトに詳しく書いてあります。自然言語処理ライブラリGiNZAをインストールして簡単に動かすまでの手順 そもそも自分がGinzaについて知ったのは完全に偶然です。先週、自分の部署に初めてとなる後輩新入社員がやってきたので、最近興味あることを聞いてみたらIBMのWatsonって答えたんですよね(本当はこの回答は3番目くらいに飛び出した内容で、ドローンとかそういうやつのほうが興味ありそうでしたけど)それでWatsonに興味を持ったんですけど、WatosonはIBMの登録がいるとかなんとかで、なんか面倒だなあって思ってしまったんですよね。それで、来たようなやつで自由に使えそうなやつ無いかなあと思っていたらGinzaにたどり着いたってわけなんです。GinzaはMITライセンスらしいので安全ですね!(ライセンスについては全然知らない) それでは今回も実況しながら進めて行こうと思います。まず、Ginzaはpipしか対応していないっぽいので(conda install Ginzaってやったけどダメだった)新たにAnacondaの環境を作成することにします。詳しいことはこのページでも見れば良いと思います。環境名はGinzaを実行する用としてGinpyにしました。 一応、環境一覧をinfo -eで確認してから、Ginpyに移動します。 ではGinpyにGiNZAを入れていこうと思います。コマンドは以下の通りにしました。 とりあえず、これでGiNZA自体を入手することは成功したので、所有欲の半分は満たされました。次は支配欲を満たすために実際に使っていくことにします。 まずは形態素解析から。形態素解析は説明するよりも見るほうが早いと思うので説明は省きますが、高校時代にこれがあればもうちょっと国語に興味が持てたかなあと思います(多分そんなことは無い)適当な作業ディレクトリに移動して以下の流れでファイルを作って、コードを書いてみます。\ すると、上手く動きはするのですが、警告が! ぱっと見、バージョンが新しいから危ないよ。コマンドを打って調整してね!って書いてありそう(適当)なので、コマンドを打ってみる…が全然ダメだし、もう普通に動いているから問題ないやってことで進めていきます(諦め) 先程のGintes1.pyを実行すると以下のような表示が出力されます。 ここで一言、すげえと出てしまいました。ワーカホリックとかも辞書登録されているのでしょうか?かなり正確に結果が出ていることがわかります。これらの関係は画面出力でより簡単に理解できるみたいです。 あと個人的に気になったのは2つの文章を見比べて類似度とやらを出してくれる機能。具体的に何をやっているのかは専門家ではないので知らなくていいかなあ。 上を実行すると結果は0.46384519507135974って表示されます。半分くらい似ている・・・らしいけど、なにが半分似ているって根拠なんだろう?文章の中の各言葉間の類似度を計算することもできるらしいです。 ここで問題発生。最初に作ったAnacondaの環境にはpandasが入ってなかったようなので、急遽conda install pandasで追加しました。最終的にはが出力されて単語ごとの類似度もわかります。すごいですねえ。

コロナ禍の中で: Pythonで学ぶネットワーク分析

こんにちは。RockinWoolです。最近は、このコロナ禍の間になんとしてでも成長しておかないと後の人生に響きそうだなあと思って研究や仕事に頑張っています。ただ、仕事を頑張りすぎると学問から遠ざかってしまって感覚を忘れてしまいそうなのが最悪ですね。ということで今日も勉強という名のプログラミングで進捗を生み出していました。 さて、今日のテーマは Pythonで学ぶネットワーク分析 これは自分の研究範囲の一つである複雑ネットワークとpythonの解説をしてくださっているらしい本なので、早速いつもどおり実況しながら進めていきます。第一章一部:ネットワークの概念について簡単に説明してくれていますね。複雑ネットワークにおける特徴量,アルゴリズム,モデル,プロセスの定義も簡単にしてくださっています。自分だとアルゴリズムとプロセスの研究者になるのかな? 第一章第二部と第三部:ネットワーク分析ツールの情報比較をしています。早速自分が使い倒しているnetworkxについての解説がありますね。ここで一つ知らない単語が。ハッシュ可能ってなんだ?ってなって調べました。 https://www.it-swarm.dev/ja/python/python%E3%81%A7%E3%80%8C%E3%83%8F%E3%83%83%E3%82%B7%E3%83%A5%E5%8F%AF%E8%83%BD%E3%80%8D%E3%81%A8%E3%81%AF%E3%81%A9%E3%81%86%E3%81%84%E3%81%86%E6%84%8F%E5%91%B3%E3%81%A7%E3%81%99%E3%81%8B%EF%BC%9F/1071742522/ ふーん。なんとなくだけど、データの代入の話みたいですね(理解力皆無)。とりあえず、networkxを使えば、ノードの情報に画像みたいな代入可能な任意のオブジェクトを突っ込めるということみたいですね(多分)他に知っているツールはigraphくらいでした。というかigraphってpythonで使えたんだ・・・(Rだけだと思っていた)可視化ツールの方はいつもお世話になっているmatplotlibが出てきていますが、もう一つ見慣れないBokehというものが紹介されていますね。内容よりもその名前が気になってしまいました。(ボケーってw)。ここでもまた一つ知らない単語が!インタラクティブな可視化ってなんでしょう? https://www.weblio.jp/content/%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%A9%E3%82%AF%E3%83%86%E3%82%A3%E3%83%96 これは調べてみたらいつも仕事で使っているような内容で絶望。対話型とか双方向会話とかの話ですね。ネットワークを描画した後に修正できるのだとしたらmatplotlibよりも優れている部分がありそうですね。今度使ってみよう! 第一章第四部:Pythonについての概説が書いてありますね。ここに書いてあったライブラリは全部つかっていました(笑)最近アツいのはここでもしょっちゅう使っているscipyか、あるいはいつものnetworkxですかね?そういえばmatplotlib.pyplotのcolormapを最近いじり始めて楽しいのでそれでもいいかなあ。そういえばnetworkxは人生初コントリビュートしたいと思っているプロジェクトなので、自分で不具合を見つけたいなとは思っています!コントリビュートの方法を誰か教えてくれませんか?(チラッ) 第一章第五部:JupyternotebookとAnacondaが出てきました。実は自分はAnaconda+VScode派なのでJupyter notebookはdockerコンテナで環境を固定するときにしかあまり使ってないんですよね。とはいえ、この本ではJupyterNotebook推奨だというならば使うかな・・・と思っていたら・・。 第一章第六部:Colaboratoryについての説明がありました。へー最近ではこんな便利なものも使われているのか!でもこの作者には申し訳ございませんが、自分は自作PC(組み立てだけだけど)が趣味なので自分のAnaconda環境で良いという気はします。ただ!こんな簡単に環境設定できるならば学部生時代はもっと苦しまずに勉強できたと思います。(工学部や情報学部あるあるだと思いますが、高校まで5教科7科目しかやってなくて大学最初のC言語で詰んだ人間です。まあ、その時に本気で泣きながら一人で先生の提示したC言語基本問題300問を2週間くらいかけて解いたのがきっかけでプログラムの世界にはいったのかもしれませんが:隙あれば自分語り)\ とこのあたりまで読んだところで裏で回していたプログラムも終わったみたいなので、今日はここまでにします。それではまた!

充実したGW(研究生活)を送っています

2020年5月某日こんにちは。研究に勤しむRockinWoolです。今週はプログラミングに次ぐプログラミングの生活を送っているので非常に充実しています。この調子で頑張ってクソみたいな社会から独立した科学者になるぞ〜!ということで今回は今週の出来事をひたすら書いていこうと思います。今回は技術の話は薄めなのでいつも通り興味の無い方は早めにブラウザヴァっくをよろしく! これに関しては自分の問題なのかもしれませんが、朧な記憶をたどるdocker-composeを唱えたときになぜかsnap install dockerで一緒に入ってくる予定だったdocker-composeが存在しなくてapt-getかなんかで入れ直したことが原因だと思うんですよね。sudo apt install docker.iosudo apt install docker-composeで解決しました。 こちらは単純に新しいものを使ってみようというやつです。感想は「以外と使いやすい!」画像とコメントをきれいに配置することに関してはWordやExcelをはるかに凌ぐ使いやすさでした。ところで、全然関係ない愚痴になっちゃうんですけど、自分の教授とこういうものを遊びながら試して覚えるのと、会社で先輩とか上司からこういうものを指示されながら習うのだと全然習得スピードが違う感じがするのはなんでなんでしょうね?やっぱり自分は会社というものに向いていないのかな?色んな人が色んなふうに存在しながら話をしなければならない空間がとても辛くて気持ち悪くて逃げ出したくなるんですけど、普通の人ってなんで普通に過ごせるんだろう? こちらは上とは逆に、昔作った自分のプログラム等を修正したり拡張したりしています。昔の自分が作ったプログラムが難解だったり間違っていたりするのを見るたびに成長したんだなあと思います。たしかLinusの言葉だったと思うんですけど、「1つのプログラムは1つの機能だけを持たせなさい」ってやつがあったと思うんですよね(すごくうろ覚え)一年前の自分は1つのプログラムにすべての機能を入れてしまおう!って感じで作っていたみたいで今の自分からすると「分解!分解!分解だぁ〜!」ってなります。あとは自分でプログラミングするのってとても大切ですね。自然とその部分はコピペ部分よりも可読性が高くなるんですよね。あと仕様ライブラリのreferenceを読むのもとても大切。昔は使えたnetworkxのG.self_loop()が今は使えなくてnx.self_loop(G)としなくちゃいけなかったんですが、某キータ君のデータは古かったり間違っていたりして使えなかったんですよね。なので自分で頑張って英語を読みました。 上つながりなんですけど、自分の夢は海外で研究者になることなので英語を喋れなければだめです。しかし、全然喋れない。しかも聞き取れない。これはまずいので修行しようと思っていろいろ聞くところからはじめました。 ということで、スーパー意味の無い記事かもしれませんが最近の自分をメモしました。いつか自分が見直して、こんなんだったんだなあと言えるようにがんばります。

ヴォロノイさんのネットワークについて

2020年4月某日※前回の画像から。コンテナからターミナルをホストの画面に表示する様子 こんにちは。RockinWoolです。東京のコロナは収まってきましたが、自分の身近では感染が広がっている気がするので気を引き締めてGEEKをしていたいですね! さて、今回は結構マイナーな話になってしまうと思いますので、全然興味ないと思ったらすぐに退避してください。今回作成するプログラムは、簡単にいうと2つのネットワークを作成するものです。一つ目はVoronoi図と呼ばれるものです。これはxy平面上にランダムにn個の点をばらまいて、2点間の距離が等しくなるところに境界線を引いていく・・というものになります。これを簡単に実装するにはpythonのscipyライブラリ内にあるscipy.spatialを活用すればそれほど難しくありません。二つ目はこのVoronoi図からもう一度Voronoi図を作成すした図です。まったく意味がわからないと思うのですが、これにより領域同士がどのように隣接しているのかを表現できるのではないか・・・?と期待してのものです。それでは早速やっていきます。まず、単純なVoronoi図を表示する部分はこのようにしました。 多分こんな感じで大丈夫だと思います。これを実際に走らせるとこんな感じの図形が出てきます。 ちなみに最後のshow_pointsをなくせば、voronoi図の境界の交点に点がプロットされます。次に作成する図はこの点がどの領域と隣接しているのかを利用して作成します。ちなみに今回使用していませんがVoronoiライブラリにはほかにもいくつか便利なものがあるので、ここにメモって置きます 次にVoronoi図の領域間の隣接関係をネットワークに直します。以下のようにコードを書くとこのような図が出力されます。 ここで使用したfigure_out関数は本当に適当にmatplotlibで書けば良いと思います。 こんな感じで図が出力されました。 ということで今回の実験は終了です。ここまで見てくださってありがとうございました。

ようやくコンテナから画面をとることに成功した話

2020年4月某日RockinWoolです。こんにちは。コロナ怖いですね。自分も結構自粛してますが、なんとなく胸が狭まっているような感覚があるんですよね。まあ気のせいだといいなあ さて、今回はタイトルの通りDockerコンテナからGuiアプリなどを起動した際にホストコンピュータの方に表示させる方法をついに確立したので、よろこびそのままここに書き込むことにしました。ちなみに今回も本当の目的は別にあって、その途中で無理に凝った結果生まれたものになります。しかも本当の目的ではDocker使う必要はどこにもなくて、本当に時間を無駄にしてしまったなあという感じ。挙句の果てに、いつも通りの「寝てデバッグ」が発動して、5時間頑張るよりも8時間寝る方が解決につながってしまって本当に虚無な時間を過ごしてしまったなあ・・・と。 それでは前置きはこの辺りにして、説明に入って行こうと思います。今回は某VIMゴリラさん(自分が勝手に呼んでいる)のツイッターを参考にしました(ソースは後で付記します)それを自分なりにアレンジして以下の3つのファイルを作りました。 Dockerfileはコンテナの設計図のようなものと認識しております。今回はGUIというよりかは単なる端末であるxtermを内部で起動できるように作りました↓ USERを足しているのは、xhostかなんかがroot権限者だと怒ってきたからだったと思います。やっておいて損はないはずです。docker-compose.ymlの方は2つ注目すべき部分があります。1つ目は環境変数$DISPLAYをホストと同じものに設定している部分。2つ目は/tmp/.X11-unixディレクトリを共有している部分です。この二つを設定するとホストの画面出力を共有できるようになります。(重要なのはその中のソケットファイルなんだけど、話が長くなるので割愛) 最後になりましたがxhost_setup.shは単にdocker-composeを自動化するものに近いです。自分がdocker-composeになれていないというのが原因です。ちなみにdocker-composeで単一のコンテナを起動したのは今回が初めてだったりします。それとこのスクリプトではついでのようにxhost+でホスト側の画面をコンテナと共有できるようにしていますが、セキュリティ的にはまずいそうなので、適当なときにxhost-するべきなのかもしれませんね。 これらを用いて実際に起動するとこんな感じになります・・・というのは次回にします。ここまで見てくださってありがとうございました。