ごはんと飲み物は紙一重

このブログはモチベーションアップのために情報工学関連について記事を更新していこうと思います。三日坊主にならないよう頑張ります。

GitlabのPushをslackに通知するまで【2017年10月18日時点】

気がつけば前回の更新化から2週間すぎていた・・・更新する記事は色々あったのにいいい

ところで、バイト先の方でGitlabのpush通知を設定するとのことだったので、

qiita.com

をみながら作業を進めようと思ったのですが、

「UIぜんぜん違うからスムーズに進まねぇ」

ということで備忘録代わりに書いていこうかと。

Slack側操作

  1. slackのAPIのサイトにアクセス

api.slack.com

今のUIには「Apps & Custom Integrations」がないので、
直接APIのサイトにアクセスする。

  1. 画面左メニューバーのLegacy custom integrations をクリック

f:id:ST_ha1cyon:20171018150903p:plain

  1. Post notifications to Slack の記事から「Set up an Incoming webhook」をクリック

f:id:ST_ha1cyon:20171018151048p:plain

  1. 「add configuration」から 設定を追加していく

追加したいチャンネルを選択して、

f:id:ST_ha1cyon:20171018151305p:plain

追加すると「Webhook URL」が出てくるのでURLをコピーしてSlack側の設定はおしまい。

GitLab側操作

  1. 連携したいプロジェクトからsetting→integration→ページ下部の「Slack notifications」を選択

f:id:ST_ha1cyon:20171018151839p:plain

  1. Activeにチェックを入れて、Webhookをペースト。

細かい通知の設定はここでやっておくといい感じになる。

  1. test settings and save configurationをクリックして、slackにテスト通知が来たら設定完了。

って感じです。簡単に設定できるのは非常にありがたいですが、UIがちょこちょこ変わるとこういうときに不便だなと思いつつ、最新の変化に対応するのがIT界隈にいる上での必須スキルなんじゃないかと。

もしまた更新があったらそのときは誰かが更新してくれるかコメントを残してくれるはず。githubとかでも同じことできそうだな。

ieLT秋の陣 in 琉球大学 に 参加してきました

LT大会にスピーカーとして参加してきました!

こちらです。本当は、

でPyConJPの報告会をする予定だったのですが、参加できず発表できないような形で、どうしても東京に行った話をしたいと思いLT大会で発表することに。

具体的にはPyConJPでいろんなことを学んだし、学生が参加することで得るものが多いからみんなもいろいろ動いてみようなって感じの内容でした。

発表動画については学内限定という形なので申し訳ないですが、発表原稿は上のスライドのリンク先のnotesに貼ってあるのでよみながら読んでいくとなんとなく雰囲気がわかるかと。

LT参加してみて!

相変わらず学内LTはいい意味で変態様がたくさんいらっしゃってとても楽しかったです。正直自分がLT向いていないなってのも思ったのもあって、実はスライドを完成した後リハーサルしたら発表に15分かかってしまい全然LTじゃないんじゃんというツッコミがw

これでPyConJPのアウトプットを一応やったということで一段落。前の記事で書いたFITの記事はPyConJPの印象がでかすぎて書ききれる気がしない・・・。今のところいい感じに継続してブログ更新できるからちゃんといろんなところをoutputしていこうと思います。めざせ三日坊主脱却←

DockerでPythonの開発環境を構築してみたくなったお話

タイトルの通りですが、改めてpyenv + conda の仮想環境による開発も悪くないなと思ったものの、docker使えるほうがよりチーム開発とかで役に立ちそうであったり、なにより立ち上げたり潰したりが楽と聞いて、そろそろ行動に移さないとなと思ってメモ代わりに記事にすることに。

環境構築環境

  • Mac OSX Sierra 10.12.6
  • fish shell 2.6.0
  • Python
    • pyenv + miniconda + condaによる仮想環境

docker の インストール

brew cask install docker

でインストール。まぁまぁ時間がかかる。インストール後は起動して設定をしてもらう。

fish から docker コマンドを実行できるようにする。

次にfish shellを使っていたためdockerコマンドが通常ならうまく動かないので、

をつかってdockerを使えるようにする。

fisher docker-completion

を実行して入れる。するとfishでもdockerコマンドが使えるようになる。やったね。

docker でコンテナ作成と jupyter の立ち上げ

あとはdockerのイメージを入れてみるだけ。今回はtestとしてdockerからjupyterを立ち上げてみることに。

docker pull jupyter/datascience-notebook
docker images jupyter/datascience-notebook

容量は5gbくらいでなかなか大きいのでpullする際にはご注意を。

さぁここから起動しようとするも詰まってしまった。

docker run -d --name jupyter-p 8888:8888 jupyter/datascience-notebook

1回目はうまくいくものの2回目以降エラーを吐いてしまう。どうやら同じコンテナを立ち上げようとして衝突しているみたい。そりゃコンテナ作ったのに同じの作ろうとしたら怒るわな。

というわけで改めてコマンドを調べなおして、コンテナを起動する。

docker start jupyter

これでコンテナが起動する。その上で、

docker exec -it jupyter /bin/bash/

すると無事中へ。中では環境構築されたコンテナがお出迎え。コンテナ内にて

jupyter notebook

すると、自分の環境でjupyterが立ち上がる。

f:id:ST_ha1cyon:20171003234659p:plain

とりあえず起動することができたので一段落。一通りの流れがなんとなくわかったので、後はローカル環境とのディレクトリの共有であったりもっと細かいところを探っていこうと思います。環境構築は闇深いけどできたときの喜びもひとしおですな。

参考サイト

https://unicorn.limited/jp/item/347
https://qiita.com/m-shimao/items/c83472850a69797d9679

MacOS Sierraにword2vecとfasttextを入れたお話

自然言語処理系もこれからやっていくことになりそうだったので、word2vecとfasttextの2つの環境構築をすることに。

とはいっても、pipで簡単インストールするだけなので、

pip install word2vec  
pip install fasttext

で良かったのですが、word2vecはインストールできたものの、fasttextが引っかかる。

エラー文を見ると、

gcc: error: unrecognized command line option '-stdlib=libc++'
error: command 'gcc' failed with exit status 1

どうやらオプション指定でlibc++ができないみたい。同じエラーで検索するとこんな記事が。

https://sites.google.com/site/jwko5615/c-tips/gcc

実際に関係あるかどうかは別としてclangでコンパイルする必要があると思ったので、シンボリックリンクを変更して、再度pip install fasttextしてみると。

Successfully built fasttext
Installing collected packages: fasttext
Successfully installed fasttext-0.8.3

おお。できた。目標は達成できたので満足。
ただもう少しコンパイラとか詳しくなったほうがこういうエラーを吐かれたときに理解しやすいんだなとか思う。clang?gcc?果たして何が良いのか・・・

ちゅらデータ株式会社に1ヶ月インターンしたお話

なんだかんだ夏休みが終わりを告げると同時にちゅらデータさんの方へのインターンも最終日を迎えていたわけですね。なので、大まかにやったこととか学んだこととかいろいろまとめようかなと。

インターンに行こうと思ったきっかけ

以前にちょこっと記事にはしたのですが、夏休み前に県外のインターンにデータ分析系のインターンを10件ほど応募したのですが、すべて落ちてしまいどうしようかと思っていたときに、PyData.Okinawaつながりでちゅらデータの社員さんの方から社長に私の名前を紹介してもらったらしく、直接社長さんから話がしたいということで会食をしてその場でインターンに参加できることが決まりました。

県内でデータ分析のインターンができるということで個人的にはすごく嬉しいのが半分、まさか自分の名前が少しでも沖縄のPython界隈で評価されているということが非常にありがたかったのが半分でした。

実際に内容を聞くとインターンというよりほとんどバイトのようn

ちゅらデータ株式会社について

そもそも社長さんと会食したのは8月前半で、会社が登記したのが8月の中旬だったので、完全に立ち上がったばかりのピカピカの会社でした。会食した際に「まだオフィスはない」って言われてびっくりしましたが・・・w

churadata.okinawa

会社としては DATUM STUDIO 株式会社の完全子会社ということで、案件とかは県外と全然差はないような感じだったので、県内でレベルの高い案件をできるという素晴らしい環境でした。

インターンの内容

内容は、

・実案件を統計解析や機械学習技術を利用して解決して、具体的なソリューションの提案・導入・実装を行う

もので、長ったらしいので要約すると、

データサイエンス技術でいろんな会社の問題解決しようぜ!

というものでした。

問題解決のモデル提案やデータに対する基礎分析など、会社目線で学ぶことができとてもよいものでした。

インターンを通して

社長や社員さんと近くで作業をしたりいろいろ教えてもらいながら思ったことは、

大学生として授業で学んでいるのは触り程度なんだな

ということでした。どうしても学年が低い間は基礎しか学べないので、ちょっと大げさな気もしますが、実際に会社として業務としてデータ分析などをする際に意識しなければいけないことや、こういう方法を使うことでこういう結果をもたらせるから有効な手段であるなど、よりコアなことを実業務を通して学べました。

特にちゅらデータ株式会社には、データ分析のプロフェッショナルがいて、教わる相手が常にいるという状況が非常に大きく自分自身が大学でやってきたことはまだまだちっぽけなものだったということを感じさせられました。非常に悔しかったですが←

このインターンを通して技術的な面、会社から見たデータ分析の面、データ分析以外の面、多くのことを学ばせていただきました。ありがとうございました。特に社員さんや社長さんがとても話しやすい方々であったためいろいろな話をすることができましたし、良い意味で変なストレスを抱えることなくデータ分析業務に集中することができました。(こういう雰囲気の会社がもっと増えてくれればいいなぁなんて)

インターンを終えて

実はインターンは終わりました、なんと10月以降もバイトとして雇っていただけるということなので、この先も様々なことが学べるということで非常にありがたく思っています。

なのでインターンとしては終わりましたが、ちゅらデータ株式会社さんでこれからも学ばせていただけるということで改めてよろしくお願いします!

matplotlibで複数の棒グラフを並べて出力するのに苦戦したお話

明日はインターンさせていただいているちゅらデータ株式会社での勉強会があり、今週は私が発表担当なので資料を作成することになっていたので資料を作成していたのですが、意外に突っかかって2時間ほどかけてしまったので、備忘録代わりに記事にしようかと。

何が言いたいかというと、

f:id:ST_ha1cyon:20170928225033p:plain

こんな感じで複数の列データを同じx軸上にプロットしたいというわけです。 調べていると幾つかソースは出て来るもどうもうまくいかない・・・うまく行かなかったときのソースが以下・・・

plt.figure(figsize=(20,8))
plt.xlabel("payment")
plt.ylabel("count")

x = np.arange(0,30000,1000)
y1 = np.array(user_num6) # user_numは数値が格納されたリスト
y2 = np.array(user_num7)

plt.bar(x ,y1 , width=400, align="center")
plt.bar(x ,y2 , width=400, align="center")

plt.xticks(np.arange(0,30000,1000), np.arange(0,30000,1000))
plt.legend(loc="best")

その結果がこちら

f:id:ST_ha1cyon:20170928225304p:plain

同じ列上に棒グラフが重なって意味がわからない!!どうしてこうなるんだ!!まだ夜の21時だっていうのに解決策が見つからずイライラ。資料作成は仕事終わりにやるものではない・・・

そしてようやくできた正しいソースがこちら。

plt.figure(figsize=(20,8))
plt.xlabel("payment")
plt.ylabel("count")

x1 = np.arange(0,30000,1000)
x2 = np.arange(400, 30400, 1000)
y1 = np.array(user_num6)
y2 = np.array(user_num7)

plt.bar(x1 ,y1 , width=400, align="center")
plt.bar(x2 ,y2 , width=400, align="center")

plt.xticks(np.arange(200,30200,1000), np.arange(0,30000,1000))
plt.legend(loc="best")

どうやら一つの軸に2種類のグラフをプロットしているわけではなく、自分の手でプロットする軸を変更して2つ目のグラフをプロットして、それにともなってグラフの目盛りも1つ目と2つ目の間になるように変更しているみたいですね。

ずっと前者のほうだと思っていたのですっかり意味がわからなかったわけでした。なんでもモジュールの関数だよりにしていた自分を反省・・・こういう困ったときに色んな考え方ができるようにならないといけないなと思った23時でした。

P.S.グラフはようやく完成しましたが、資料は完成していないのでもう少し作業です(シクシク

XGBRegressor()でfeature_importances_が使えなかった話。

怒りに身を任せてブログを書いています。

というのも、インターンにてeXtream Gradient Boostingを使用するためにpythonにてxgboostを入れていたのですが、学習後に説明変数の重要度を確認すると、

AttributeError: 'XGBRegressor' object has no attribute 'feature_importances_'

ん?インターン先の社長さんの方では普通に動いているのだが・・・。とりあえず原因を探ってみる。

はじめは単純に参照ミスじゃないか、それとも学習前に入力するパラメータに抜け落ちがなかったか等探してみるもない。コードミスもなかった。

その次にpythonの持つdir()関数にてモジュールの持つローカルスコープのリストを返すようにして"feature_importances_"を探すも心当たりがありそうなところには見当たらない。

もしやここまでくるとpyenvとかcondaによる仮想環境が原因になってるんじゃないかと。
そう思って時間が惜しかったこともあり即決断でcondaとpyenvを削除することを決意。あっという間に削除。その上で改めてanacondaをインストールしもう大丈夫だと思ったが大丈夫じゃない。

環境のせいでもない。くそったれ・・・

と思っていたところに、上司の方が助けてくれることに・・・

2人がかかりで、原因を探っていると、1つ目の記事が・・・

stackoverflow.com

この記事は1度見たような気がするが数時間悩んでたこともあったのと英語読みたくねぇっていう怠惰な感情がスルーを決断していたらしいがこの記事にすべてが載っていた。

要約すると・・・

pipでいれた?ああ、あっちのほうはバージョンが古いのさ!githubからいれたら大丈夫^^

まぁとにかくpipだろうがcondaだろうがgithubの最新バージョンとは違うバージョンであることがわかった。

pip,conda : 0.6a2
github : 0.6

一応違いはあった。こんなところを見逃すあたり環境構築の闇を感じる。

というわけでpipやcondaで入れたxgboostを綺麗さっぱりアンインストールし、

github.com

上記のページをみながら Make & install すると無事xgboost 0.6 がインストールされ、

f:id:ST_ha1cyon:20170926200859p:plain

feature_importance_が出力されましたとさ。めでたしめでたし。

できればインターン中にここで時間を食いたくはなかったのですが・・・同じ状況になった人へ是非参考になればと思い忘れないうちに記事に。

一番はpipとcondaにさっさと最新バージョンが入ってくれることなんですがね💢💢