こけこっこー

がんばる

pandasでデータフレームに対しパラメータを追加・削除する

データフレームに列や行を追加したかったら concat() 、削除したかったら drop を使います。 やってみましょう。

まず適当なデータフレームを作っておきます。

import pandas as pd
import numpy as np
df = pd.DataFrame(np.array([['a','b','c'], ['a','b','c'], ['a','b','c']]), columns = list("ABC"))

こんな感じになります。

   A  B  C
0  a  b  c
1  a  b  c
2  a  b  c

追加するようのデータも作っておきましょう

df_concat = pd.DataFrame(np.array(['d','d','d']), columns = list("D"))

Dの列を作りました

   D
0  d
1  d
2  d

さて、df にDの列を追加してみましょう。

df = pd.concat((df, df_concat),axis=1)

axis=1はこの場合列方向の削除を示します。 axis=0だと行方向です。 期待通りDの列が追加されました。

   A  B  C  D
0  a  b  c  d
1  a  b  c  d
2  a  b  c  d

Dを削除してみましょう。

df = df.drop('D', axis=1)

削除もできました。

   A  B  C
0  a  b  c
1  a  b  c
2  a  b  c

pandasでワンホットエンコーディング

機械学習ではしばしばデータの解析を容易にするためにワンホットエンコーディングという手法を使います。

例えば「性別」というパラメータがあればその中には「男性」や「女性」が含まれますが、 この「性別」を分解して「男性」「女性」をそれぞれ一つのパラメータとしてしまい、値を0, 1で表現するのが ワンホットエンコーディングです。

これはpandasで以下のように簡単にできます。

print(df_train.Sex.value_counts())
sex_dummy = pd.get_dummies(df_train.Sex)
sex_dummy.head()

1行目のprint()は Sex にどんな値が含まれるかを確認するためにやっているだけなので、 処理としては不要です。 ただ、確認しておくことで manmale を一緒に扱う必要がある場合などに気づけます。

2行目がワンホットエンコーディングの処理です。 get_dummies() を使うだけでよしなにやってくれます。

3行目は結果の出力です。処理としては不要です。

出力

f:id:monisoi:20171013083436p:plain

pandasでデータの欠損を確認する

機械学習において収集したデータを使おうと思ったとき、ほとんどのケースでデータに欠損があります。 そんなときは、もっともらしい値で穴埋めをするなどの対処が必要ですが、 それより前にどのパラメータのデータがどれだけ欠損しているかを確認したいです。

pandasなら以下のようにしてパラメータごとのデータ欠損数を出力することができます。 (サンプルのデータにはkaggleのtitanic問題を使わせていただいてます)

Titanic: Machine Learning from Disaster | Kaggle

import pandas as pd

df_train = pd.read_csv("train.csv")
df_train.isnull().sum()

出力

PassengerId      0
Survived         0
Pclass           0
Name             0
Sex              0
Age            177
SibSp            0
Parch            0
Ticket           0
Fare             0
Cabin          687
Embarked         2
dtype: int64

isnull() で欠損確認をして sum() で合計です。 pandasが思った以上に簡単にやりたいことを実現してくれるのでビビります。

pandasを使ってcsvの先頭を表形式でjupyterに出力する

kaggleの問題に取り組んでいるときなど、jupyter上でぱぱっとcsvの中身を見れると便利。

例えばタイタニックの生存予測のトレーニングデータcsvの中身を見たいとき

Titanic: Machine Learning from Disaster | Kaggle

以下のようなコードで表形式に表示できる

import pandas as pd

df_train = pd.read_csv("train.csv")
df_train.head()

出力結果

f:id:monisoi:20171012082643p:plain

head()の引数に数字を与えてやればその分の行数が表示されます。

カンバンでプライベートタスク管理

先日友人がプライベートでカンバンアプリを使っているのを見て、面白そうだと思い 自分も便乗してみました。

使用しているアプリ

Trelloを使っています。

trello.com

会社ではJootoというサービスを使っているのですが、プライベートでは違うものを と思いTrelloにしました。 どちらも使い勝手としては同じという印象です。

使い方

一般的なカンバンの使い方をしています。

ToDo, Doing, Done のリストを作成し、ToDoにタスクを追加していきます。 手をつけ始めたらDoing、終わったらDoneです。

ゴミ捨てとか洗濯とか、そういった家事タスクから、専門書をどこまで読む といったスキルアップタスクまでとにかくリストに追加します。

本を読む系のタスクだと章区切りでタスクにしてやると、短期間でDoneにタスクを 送れるので個人的にはやる気が出ます。

感想

プライベートでもタスクがはっきりとしている方がメリハリがつく気がします。 家事に対しても、タスクを放置せずに片付けようという気が起きたり起きなかったり。

Youtubeを使って学習効率を上げる

友人と一緒にYoutubeで動画配信やってます。
テック系の話題中心で、気になった技術を紹介しています。

www.youtube.com

モチベーション

  • 最新の技術に触れたい
  • 自分の活動を公開したい

最新の技術に触れたい

IT業界の技術は日々ものすごい速さで更新されていくので、実際に触れてみてインスピレーションを受けたり、開発に取り入れたりしたいものです。自分の引き出しが多くなります。

自分の活動を公開したい

自分の活動を公開することは現代のITエンジニアにとっては必須です。なんてったってこれで毎日食べていくための仕事が得られるかもしれないんですから。

友人と動画配信することのメリット

  • 一方的に人に説明できる
  • 勉強会で登壇者になっても平然を装える
  • 強制力がある
  • 認識共有できる

一方的に人に説明できる

人に説明しようと思ったらきちんと知識を身につけなければなりません。 勝手に説明相手を作って勝手に話せるというのは良い学びになると思います。

勉強会で登壇者になっても平然を装える

余裕です。普段から世界に向けて喋ってるんですから。(たぶん)

強制力がある

一人でやるとモチベーションを長続きさせるのが大変ですが、人とやると自分から辞めるとは言い出しづらく、結構続きます。 強制力って大事。

認識共有できる

一人で勉強して動画配信しようと思ったら、自分がしゃべろうとしている内容が果たして本当に正しいのか確証が得られず、二の足を踏んでしまいがちです。しかし、人と打ち合わせができると、自分の理解が正しいことを確認できたり、間違いに気づけたり、理解が深まったりします。そういった機会が得られることは非常に大きいと感じます。

最後に

というように、テック系Youtuberも学びや情報発信の一つの形だと思います。 実際いろんな技術に触れる機会を作れるのは非常に有意義なのでおすすめです。

ポモドーロ・テクニックをアレンジしてみた

最近流行ってるみたいなので自分なりのポモドーロ・テクニックの記事を書いてみました。

ポモドーロ・テクニックとは

25分間のタイマーで集中してタスクをこなし、5分間休憩をすることで、オンオフを切り替える仕事術。 4回タイマーを回したら15分の休憩を挟むのが主流らしいです。

いつも使ってるポモドーロアプリ

www.teamviz.com

僕は普段これを使っています。 勝手に4回やったら15分の休憩を挟んでくれます。 windowsで使ってるのですがタスクを追加するときにフリーズしがちなのがネック。(僕だけ?)

自分なりに使い方をアレンジしてみた

僕もこのポモドーロ・テクニックを使ってみて、最初は新鮮だったのですぐにフロー状態に入れました。 しかし数日で飽きてきてしまい、当初ほどの効果が得られなくなってきました。 なので、今では以下のようなタスクリストとポモドーロタイマーを組み合わせています。

07/13 タスクリスト

はてなブログに投稿する(2)

1回目 ++++

編集モードをmarkdownに変更

カテゴリーにライフハックを追加

...

2回目 +++

hogehoge

....

タスクリストには以下のような要素が含まれます。

  • タスクの見積もり (タスク名の横の(2))
  • 作業ログ (回数の横に殴り書き)
  • 集中度評価 (回数の横の"+"マーク)

タスクの見積もり

何回タイマーを回せばそのタスクが完了するかの見積もりです。 例では2回で済むと見積もったのでタスク名の横に"(2)"と記載しています。 これを毎回書くことで自分の中での見積もり精度を上げたり、見積もった回数までにタスクを終わらせようという意識づけをしたりする効果が生まれます。

作業ログ

回数の下に書いていきます。 その回の間に考えたこと、重要だと思ったこと、メモしておきたいことなどをとにかく殴り書きしていきます。 これを書くことで、自分の考えが整理されたり、後日忘れてしまったことを思い出すのに使えたりという利点があります。

集中度評価

タイマーが終わったあとに回数の横に書きます。 僕はなんとなく"+"マークを使って5段階評価にしています。 その回を振り返ってどのくらい集中出来たかを評価することで、自分の状態を見つめなおす事ができます。MAXで集中できているときはそのまま作業を継続すればいいですし、逆に集中できていない時は何が原因なのかを考えるきっかけになります。

最後に

以上が僕なりのポモドーロ・テクニックです。 少しでも誰かの参考になればと思います。

ちなみに一日どのくらいのポモドーロ数をこなすかというと10回がせいぜいだと思います。 それ以上やると疲れてその後頭が回らなくなり逆効果だったりします。 用法用量を守ってってやつですね。