よしたく blog

ほぼ週刊で記事を書いています

社内もくもく会でKaggleをやってみた話

はじめに

社内でもくもく会の第三回・第四回を開催してみました。

今まではハンズオンのような内容をやっていたのですが、 今回は完全に自分のやりたい課題を持ってきて「もくもく」しました。

自分はKaggleをやりました。

Kaggleとは f:id:yoshitaku_jp:20180630152410j:plain

www.codexa.net

もくもく会

第三回では「タイタニックチュートリアル

第四回では「リクルートレストラン客数予想チャレンジ 」

をやってみました。

大切だと感じたこと

  • データの前処理

完全に整備されているデータばかりではない世の中なので、欠損しているデータもあります。 その欠損している部分に対して、何を当てはめるかが結構重要なようです。 チュートリアルの中では、全データの中央値や一番出現頻度の高いものを欠損値に当てはめていましたが、結構センスを問われるところになるんじゃないかなって思いました。 各値の出現回数を取得して、全体の個数から導き出される出現率をもとに、欠損値へ当てはめてみるとか…いろいろやり方はありそうです。

  • 扱いづらそうな値はどんどん置き換える

簡単なところだと性別ですよね。

["Sex"][test["Sex"] == "male"] = 0
test["Sex"][test["Sex"] == "female"] = 1

maleとfemaleを0と1に置き換えてます。文字列よりもゼロイチのほうが絶対に扱いやすい! 前の「データの前処理」と同じですけど、こういう細かいところも重要だと思いました。

  • 目的変数と説明変数をいじってみる

一通り、チュートリアル通りに実行したあと、 目的変数と説明変数を足したり引いたりしたらスコアが上にも下にも大きく変わりました。 実際のデータ分析でも自分の思ったとおりにやっていい方向に行くことはまず無いとおもったので、 試行錯誤しまくるってところですかね。 実際のコンペティションだと提出回数もランキング付で重要になりそうなので、難しいですが…

  • jupyter notebookが使えるようになる

たくさん使うと慣れてきました。 f:id:yoshitaku_jp:20180630152505p:plain f:id:yoshitaku_jp:20180630152501p:plain

まとめ

今回は社内もくもく会Kaggleタイタニックリクルートレストラン客数予想チャレンジを使ってみました。

ちょこちょことコードを書く機会が増えて嬉しいです。 頑張ります。

date型の列にnullが入っているときの検索方法

自分は頭が硬いなぁと思ったのですが...

SQLでdate型の列にnullが入っているものがあり、nullも含めて全件出したいなぁと思っていたんですが、

AND date BETWEEN '1900/01/01' AND '2999/12/31'

これでは、nullが検索結果に出てきません。

そのnullも含めて出したかったときは

AND NVL(?,1900/01/01') BETWEEN NVL(?,'1900/01/01') AND NVL(?,'2999/12/31')

と、nullの値を別のものに置き換えれば検索できました。

簡単なもので躓いたので、ブログに書いて供養

「検索結果をどう出すか」って言うことにおいては、 「検索結果に出てこないもの」を「どうやって検索条件内に入れるか」っていう考え方が一つ増えたいい機会でした。

brew upgrade --cleanupで幸せになる

 

先日、brew cleanupコマンドをすることで8GB近くも容量が空く事件がありました...  

その後はこまめに

brew update

brew upgrade

brew cleanup

 

とやっていたのですが、 brew upgradeの中にbrew updateが含まれていることを知り、さらにはbrew upgradeコマンドのサブコマンド--cleanupがあることまで知りました。

 

つまり

brew update

brew upgrade

brew cleanup

の3つが

brew upgrade --cleanup

で、できてしまうんですね。最高です。

 

今日もやります。容量が無いので。もう意味がないことを知りながら。

DjangoをHerokuにアップロードするまでの手順

ブログでのアウトプット習慣が染み付いてきてコード書きたい!!的な欲望が出てきました。そこで、目に見える成果としてWEBアプリケーションを作ってみることにしました。まずは公開する手順をさっさと身につけようと思い、Djangoをherokuにあげてみることにしました。これはその手順です。

ほぼこちらの記事通りにやりましたが、バージョンが違ったり、ところどころ躓いたところがあったので、 自分なりにアレンジしているところがあります。

qiita.com

TL;DR

  • Djangoをherokuにあげるよ
  • WEBアプリケーションを公開できるよ
  • やった気になれる(戒め

目次

  1. 前提条件
  2. Djangoのプロジェクトを作成する
  3. gitにプッシュする
  4. Herokuにデプロイする

前提条件

Djangoのアプリを作成する

仮想環境に入ります。 まずは、仮想環境を作成しDjangoをインストールする。

YOUR PC:workspace user$mkdir django_heroku
YOUR PC:workspace user$python -m venv django_heroku/
YOUR PC:workspace user$cd django_heroku/
YOUR PC:django_heroku user$ source bin/activate
(django_heroku) YOUR PC:django_heroku user$ pip install django
(django_heroku) YOUR PC:django_heroku user$ pip install django-toolbelt

プロジェクトを作成し、マイグレーションをする

(django_heroku) YOUR PC:django_heroku user$ django-admin.py startproject config ./
(django_heroku) YOUR PC:django_heroku user$ python manage.py migrate

サーバを起動する

(django_heroku) YOUR PC:django_heroku user$  python manage.py runserver
Performing system checks...

System check identified no issues (0 silenced).
June 16, 2018 - 07:19:32
Django version 2.0.6, using settings 'config.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

ブラウザを立ち上げて http://127.0.0.1:8000/にアクセスし、下の画面が出れば成功。(versionによっては違う画面が出ることがあるかも知れません

f:id:yoshitaku_jp:20180616162145p:plain

gitにプッシュする

vim .gitignoreでファイルを作成する

*.pyc
staticfiles
db.sqlite3

gitにコミットとプッシュする

git init
git add .
git commit -m "create Django app"

Herokuにデプロイする

foremanが最新バージョンだと動かないらしいので、0.61をインストールする

初心者がHerokuでハマったポイント - 暗号通貨.py

gem install foreman -v 0.61

Procfileファイルとrequirements.txtファイルを作成する

echo "web: gunicorn config.wsgi --log-file -" > Procfile

pip freeze > requirements.txt

vim config/settings.pyでsettings.pyの末尾に下記の内容を追加する

# Parse database configuration from $DATABASE_URL
import dj_database_url
db_from_env = dj_database_url.config()
DATABASES['default'].update(db_from_env)

# Honor the 'X-Forwarded-Proto' header for request.is_secure()
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')

# Allow all host headers
ALLOWED_HOSTS = ['*']

# Static asset configuration
import os
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
STATIC_ROOT = 'staticfiles'
STATIC_URL = '/static/'

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
)

vim config/wsgi.pywsgi.pyの内容を書き換える

"""
WSGI config for config project.

It exposes the WSGI callable as a module-level variable named ``application``.

For more information on this file, see
https://docs.djangoproject.com/en/2.0/howto/deployment/wsgi/
"""

import os

from dj_static import Cling #文を新しく記述する
from django.core.wsgi import get_wsgi_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings")

application = Cling(get_wsgi_application()) #文を変更する

Herokuアプリを作る

Heroku Command Line Interface (CLI) をインストールしていない場合、インストールする

brew install heroku/brew/heroku

devcenter.heroku.com

Herokuにログインしていない場合、ログインをする ユーザ名とパスワードは、Herokuアカウントを作成したときのもの

heroku login

Herokuアプリを作る

heroku create

Herokuの環境変数を設定する

heroku config:set DISABLE_COLLECTSTATIC=1

Heroku内でマイグレーションをする

heroku run python manage.py migrate

Herokuでアプリケーションが動いてるかを確認する

heroku open

画面が表示されれば成功

f:id:yoshitaku_jp:20180617141908p:plain

まとめ

  • Djangoをherokuにあげました
  • WEBアプリケーションを公開できました

これから開発頑張っていくぞ

おまけ

Djangoのバージョン確認方法

pythonコマンドで起動させて

>>>import django
>>>django.get_version()
'2.0.6'

3ヶ月続けた kakakakakku ブログメンティーを卒業しました

f:id:yoshitaku_jp:20180603231648j:plain

3月から5月末まで id:kakku22 カカカカック さんに技術ブログのメンターをお願いしていました。 2018年になって「アウトプットをする年にする」と自分の中で決めてから、週に一回ブログを書くことを目標として動いていました。しかし、一人でやっているうちに、「記事の質が低いのではないか」「構成が良くないんじゃないか」とか不安になることが多くなっていったんですね。そんなときに、カカカカック さんが「ブログメンティーを募集します」と呟いていたので、お願いすることにしてみました。

卒業するときに知ったのですが、カカカカック さんがブログメンターを始めてから3ヶ月続いた人は自分が初めてなんだそうです!長いことがいいことか悪いことかわかりませんが、初って嬉しいですね。笑 ここでは、良かったことや思い出に残っていることを書いてみようと思います。未来の自分自身のためにと、これからメンターをお願いしようかと思っている人たちのために、なにか参考になれば幸いです。

最初の質問

まずは自分が興味ある技術について質疑応答がありました。今、やり取りさせていただいたDMを読み返しながらかいていますが、自分はこんなことをやりたいと答えていたのかと面白くなります。 自分はこのようなものをあげていました。

  • ADRSIRの使い方
  • ADRSIRの公式ソースを直した
  • alexaとraspberrypiとADRSIRで音声でテレビを制御してみた
  • 機会学習をやりたいので、高校の数学をやり直した
  • AWS 認定ソリューションアーキテクトを受験した
  • Python 3 エンジニア認定基礎試験を受験した
  • 応用情報技術者試験を受験した
  • netkeibaからスクレイピングする
  • プログラマのためのdocker教科書を読んだ
  • データ分析構築基盤入門を読んだ

この内で書いたのは、2.3つぐらいですね。 書き続けているうちに、「こんなネタを書いてみたい!」といろいろ思うようになるので、最初は少なくても大丈夫だと思います。

yoshitaku-jp.hatenablog.com

yoshitaku-jp.hatenablog.com

未来の自分のためにブログを書く

記事の質に関するやり取りの最中でしたが、

基本的には「過去の自分」もしくは「学んだことを忘れた未来の自分」に教える目的でブログを書けば,おのずと質は上がります

とおっしゃっていました。
自分がブログを書き始めた理由は、すぐ忘れる自分のためと、自分が困ったときに助けられたインターネットに貢献して、別の誰かの助けとなりたかったからです。この認識・感覚があっていて安心しました。

人の記事に感謝する気持ちでシェアをする

これは自分が持ち合わせていなかった価値観です。読んで助かって「ありがとう」と思うことはもちろんたくさんありましたが、シェアをするっていう行動を起こしたことまではありませんでしたので学びがありました。また、同じメンティーの方とも、SNS上で仲良くなり嬉しかったです。自然とお互いがRTやいいね!をして、励みにもなりました。

たくさんポジティブフィードバックをいただける

これでもかってぐらい、ポジティブフィードバックをいただけます。笑 GoogleCloudPlatformのCloud Vision APIに関する記事を1つ上げたあとにたくさん褒め言葉をいただけましたし、その後に10記事分になるんじゃないかってぐらい、横と縦に話題を広げてくれました。技術探究心がすごいですね…自分もこれからがんばります。

yoshitaku-jp.hatenablog.com

ブログに関する質問に答えてくれる

Open Graph Protocol(OGP)なんてものは自分は全く知りませんでした。TwitterやFBなどのSNSにシェアしたときにサムネイルが出るアレですね。Wordpressを使っていたときはOGPの設定がプラグインを使って手動だったので、設定がうまくいってないと出ませんでした。そのあたりの質問とか調査にも協力してくれました。

f:id:yoshitaku_jp:20180607145128j:plain

cards-dev.twitter.com

課題点を聞いたらしっかり教えてくれる

3ヶ月目に入るときに、自分の課題点を聞いたらちゃんと教えてくれました。いつも褒めてくださって嬉しいのですが、ちょっと厳しい視点も欲しくなったときに包み隠さず答えてくださったのはすごく嬉しかったです。なので、自分のだめなところ改善したほうがいいところはガンガン聞いてみましょう!

僕は記事のPV数が弱いことが課題でした。もちろん、バズやPV数を稼ぐことが目的ではないですが、多くの人に届けることは必要です。よく書く記事の傾向としてIoTなどを扱っていたので少しニッチな分野だったかなと思います。Webアプリやフロント側、PythonRubyなど流行ってるプログラミング言語などに挑戦して扱っていけばよかったかなと思います。

書くネタをいただける

自分が興味ある分野に関することを提供していただけます。自分はJavaScriptを業務で扱っていたので、Learn to code - for free | CodecademyのReactの記事を書いてみることを提案してもらいました。実際にやってみたところ非常に面白く、ブログの記事もスラスラと書けました。自分の興味ある分野を広げていただいて感謝しかありません。

まとめ

好き勝手書いてきましたが、本当に楽しく過ごせた3ヶ月間でした。現在2700文字ぐらいですが、楽しく過ごせていなかったらここまでかけないと思います。社外にメンターがいるというのも非常に貴重な経験です。自分にサポートするメンバーが出てきたらどう接するかの学びもありました。 ブログでのアウトプットを通して、社内での信頼残高も上がりました(たぶん)。社内・社外問わずイベントに参加しインプットする姿勢、さらにはそれをアウトプットする姿勢が培われたのも自分の中で大きいです。感謝してもしきれません。これからも日々努力して成長していきたいと思います。 本当にありがとうございました。

5月を振り返って

f:id:yoshitaku_jp:20180607134902j:plain 5月の活動を振り返ってみます。

1月はこちら yoshitaku-jp.hatenablog.com

2月はこっち yoshitaku-jp.hatenablog.com

3月はこっち yoshitaku-jp.hatenablog.com

4月はこちらです yoshitaku-jp.hatenablog.com

週1回ブログを更新する

'#oss_gate のもくもく会で、Apache supersetのデモ環境を触ってみた

yoshitaku-jp.hatenablog.com

ラズベリーパイのカメラ設定

yoshitaku-jp.hatenablog.com

macからラズベリーパイのデスクトップ画面を操作するためにVNCを入れた

yoshitaku-jp.hatenablog.com

RPAだけじゃない?! / RPA勉強&LT会!RPALT vol2に参加してきた

yoshitaku-jp.hatenablog.com

NoSQLの基礎知識を読んだ

yoshitaku-jp.hatenablog.com

NoSQL キーバリュー型のまとめ

yoshitaku-jp.hatenablog.com

社内もくもく会でRedashハンズオンをやった話

yoshitaku-jp.hatenablog.com

CodecademyのLearn ReactJS:PartIを受講してみた

yoshitaku-jp.hatenablog.com

社内で読書会 #0 を開催した話

yoshitaku-jp.hatenablog.com

500ユーザ達成

f:id:yoshitaku_jp:20180607133803j:plain

ありがとうございます。 誰かの役に立てたなら嬉しい。

毎月ひとつ新しいことをやるプロジェクト2018年5月版:料理

全然やれませんでした。 自分のコンフォートゾーンの少し外ぐらいのことにチャレンジてみようと思います。 なにか案があったら教えて欲しい…

まとめ

  • 5月を振り返りました。
  • 6月ではてなブログに移りました。
  • 6月は方向性を決めてもっと成長するぞ

社内もくもく会でGoogle Cloud Platformを使ってみた話

f:id:yoshitaku_jp:20180603191537j:plain

はじめに

社内でもくもく会の第二回を開催してみました。 今回は機械学習・AIに関するものを自分が触りたかったので、そこからもくもく案を考えました。 AWSやGoogleCloudPlatform(GCP)、MSなど各ベンダーでサービスを提供していますが、どこのソリューションを使うかは、自社内で触る機会が少ないGCPで実行してみました。

使ったものはこちら 花のデータセットを使用した画像の分類

作業内容

サンプルコードを実行してデータを Cloud Dataflow で前処理してから、この変換後のデータを使用して Cloud ML Engine でモデルをトレーニングします。このトレーニング後のモデルを Cloud ML Engine にデプロイし、予測リクエストを送信してモデルをテストします。 このサンプル データセットに収録されているのは、ごく少数の画像(最大 3,600 件)です。機械学習技術を使用して正確な分類モデルを一から適切にトレーニングするには、これよりも多くのデータが必要です。ここでは、転移学習と呼ばれるアプローチを代わりに使用します。転移学習では、あらかじめトレーニングされたモデルを使用して画像の特徴を抽出し、これを使用して新しい分類器をトレーニングします。このチュートリアルでは、Inception という事前トレーニング済みモデルを使用します。

結論から言ってしまうのですが、このチュートリアルは途中でエラーを起こしてしまうので終わらせることが出来ませんでした。

実際の作業で詰まったところ

Cloud Shellはユーザで共有することが出来ない

ブラウザ上で、GCPの操作や開発が行えるツールがCloudShellです。SDK落としたり、ローカルで開発環境を開く必要もないので便利でした。ただブラウザが狭くなるのは…仕方ないか。

f:id:yoshitaku_jp:20180604141337j:plain

今回は一つアカウントを作り、そのアカウントを共有して作業をおこなう予定でしたが、CloudShellのセッションを取り合ってしまってうまく作業が進みませんでした。

クラウドでのトレーニングと評価のデータの前処理がうまくいかない

今回のもくもく会は7名ほどで実行したのですが、全員がこの項目以降進めなくなってしまいました。 エラーも「temp_location」が無いぞというエラーだったり、実行途中にCloudShellが落ちてしまうものだったり、原因がバラバラでつかめませんでした。

原因がつかめていない時点で、推測を書くのもどうかと思うのですが、メモとして書いておきます。 今回使用したcloudml-samples/flowers/ ですが、各ファイルの最終コミットが4ヶ月以上前のものばかりです。ドキュメントの整備・整合性を含め、GitHub上で整備されていないのかなぁと思いました。

まとめ

今回は社内もくもく会Google Cloud Platformを使ってみました。

今回の学びとしては、

  • ドキュメントはちゃんと整備しよう
  • 会を開催する前に実際に動かして、動くものか確認しておこう
    • 【注】今回は、ハマったときにみんなで話し合って解決したい思いもあって、事前に動かしておくことはやめておきました。

機械学習・AI分野に対する知見が増えなかったのは残念ですが、ブラウザ上でCloud Shellというものが扱えることが知れたのも良かったですね。 そこまで使いこなせているわけではないですがAWSに慣れると、GCPのUIや用語がわからなくて辛いです…

NoSQL カラム指向型のまとめ

はじめに

NoSQLの基礎知識について読んでいます。

yoshitaku-jp.hatenablog.com

NOSQLの基礎知識 (ビッグデータを活かすデータベース技術)

NOSQLの基礎知識 (ビッグデータを活かすデータベース技術)

今回はカラム指向形型についてまとめます。

カラム指向型とは

カラム指向型はキーバリュー型を拡張して、行と列の概念を持ったものです。もとから列が定義されているのではなく、複数のキーとバリューを、行キーと呼ばれる識別子でグループ化したものです。そして、グループ化されたここのキーバリューを「カラム」とよんでいます。

データモデル

カラムファミリー

行キーとカラムをまとめたものを、カラムファミリーと呼びます。 カラムファミリーは事前に定義する必要があります。しかし、カラム名は定義する必要がなく、データを挿入するタイミングで好きなものを指定することができます。

カラムを動的に追加することができる

カラム名に時間とともに変化するものを設定することもできる。さらに、リレーショナルデータベースと明確に違うところはデータの発生に応じて動的にカラムを追加することができる。

スケールアウトに適している

キーバリュー型と同様にスケールアウトに適しています。データを複数のサーバに分割して配置し、データを複製することが出、データ感の関係性を維持するリレーショナルデータベースをよりも簡単にできるからです。

まとめ

  • カラム指向型について学んだ
  • 行列の言葉が出てくるが、表の形式ではない
  • カラムの数を動的に増やすことができる
  • カラムの名前を時間のように常に変化するものを設定することができる

はてなブログにしました

6月からはてなブログにしました。

Wordpressではいろいろ勉強になりました。しかし、ブログを書く以外に整備・気にするところが多くてめんどくさくなってしまいました。笑 当たり前ですが、ブログを書こうと思ったときに手入れをしなければならないところが出てくると、集中できなくなってしまいますね。そこでいろいろな人が使っているはてなブログに移りました。これからもたくさんブログを書いて、アウトプットをして、誰かの助けになればいいと思います。もちろん自分自身のためにも。

これからもよろしくお願い致します。

社内で読書会 #0 を開催した話

今回はサクッとメモ書き程度の内容です。

社内の人と読書会をしました。 読書会とは、決められた期日までに自分が読むと決めた本を読んで、その感想を周りの人にLTする会です。 LTをして他の人とアウトプットを共有することで、聞いている方も効率よく情報をインプットすることができます。

開催するにあたって気をつけた点

  • お試し期間を設けて開催をする
    • いきなり沢山の人を呼んで失敗するのが嫌だった。
      • 身近なメンバーで実施して雰囲気を掴みました
  • 本を最後まで読んでいなくてもいい
    • 本を最後まで読んでいないとダメとなるのが嫌だった
      • ハードルを高く感じる人もいるのでやめてみました
  • ネガティブ・フィードバックはしない
    • ディスる風土を作りたくなかった -「こんな事も知らないのか」というのは絶対になしとしました
  • 自分が知っているノウハウも共有していく
    • 活気が生まれないのが嫌だった
      • 自分が知っていることをどんどんはなしてもらうようにしました

自分が読んだ本

DB周りの知識が薄いなと思っていたのと、インデックスについて多く語られている本を読みたかったので選びました。目からウロコなTipsが多いのでオススメです。また読んだ内容をまとめて発表したいと思います。

参考になった話

吉祥寺.pm14で聞いてお話の中で大変参考になるものがありました。

読んだ本についてesaでまとめて、毎日LTしあうなんてすごいな… esaにまとめることはブログで代用できそうだし、個人的に真似していきたい。チームにも浸透すると良いな。