ラベル tool の投稿を表示しています。 すべての投稿を表示
ラベル tool の投稿を表示しています。 すべての投稿を表示
2017年7月23日日曜日

cliでGo Playground 的なこと

  • Go Playgroundは、ちょっとしたコードを試すのによい。
  • ただ、3rd Partyのライブラリが読み込めない。
  • 今あるGoの開発環境を使いたい(ライブラリ,Cli)
  • Go のreplもいくつかあるので、そちらが合う人はどうぞ。

と考えて、godoというgulp likeなタスクランナーを使ってcli上で、コードを試せるものを簡易的に作りました。

https://github.com/ynishi/simple-go-playground

単純に、goのスニペットファイルを作って、変更があったら自動でrunするだけのシンプルなものです。

vimで使う

vimで開発してる人は、vim内の別ウィンドウで、プロセス起動できるプラグインがあります。

https://github.com/vim-scripts/Conque-Shell

これを使うと、vim内でスニペットファイルを変更して実行結果が随時確認できるので、Playgroundにより近くなると思います。

よきGo lifeを!

2016年8月20日土曜日

Pandasで実践的(というか実務的)なデータを扱う

実務的なデータをさっと処理したい場合、

  • SQL
  • スクリプト言語
  • Shell/AWK
  • Excel

あたりがよく使われると思います。

ここでは、スクリプト言語の一つになると思いますが、Python+Pandas紹介します。

Pandasは、Pythonのデータ処理用ライブラリで、DataFrameというExcelのスプレッドシートのようなオブジェクトを使って処理します。DataFrameはもともとS言語/Rに実装されていたものです。

Pandasの特徴である強力で豊富な統計処理の紹介が多いですが、実務データの処理もかなり使えます。

準備

ipython

pythonの対話実行環境としては、ipythonは必須です。 ファイルのタブ補完も効くのでサクサクできます。

pip install ipython

Pandasのimport

ここからは、事前にこのようにimportしていることを前提とします。

import pandas as pd
import numpy as np

データ読み取り

csvファイルの場合。

df = pd.read_csv("a.csv")

URLや桁区切りのカンマにも強いtsvファイルはこちら。

df = pd.read_csv("a.tsv", sep="\t")

ファイルにはヘッダを入れた方がいいです。

PandasのDataFrameはヘッダ情報もきちんと読み取り、列名称で値を指定することが可能なためです。

マージ(join)

現実の業務処理では、joinはかなり需要があると思います。

Pandasももちろんできますが、どちらかというと、統計処理で必要な行を追加していく(union系)の処理の紹介が多いと思います。

Pandasでのマージの仕方。

// キー名が違う場合
merged = pd.merge(df1, df2, left_on = 'id1', right_on = 'id2')
// キー名が同じ場合
merged = pd.merge(df1, df2, on = 'id') 

mergeメソッドは、オプションも豊富です。

行ごとに処理

必要なデータが一つの表にまとまったら、行ごとに処理をしたいですね。

しかもこのロジックはかなり複雑になることがあります。

SQLで複雑なCASE文を書くよりもスクリプト言語で書いた方がすっきりする場合も多いです。

オススメはiterrowsを使うことです。applymapを使うと、関数を渡してシンプルに記述できるのですが、カラム名が使えなくなります。

df['new'] = ""
for key, record in df.iterrows():
  if record["column1"] in ["a", "b"]:
    ...複雑なロジック
    df.loc[key, 'new'] =  "column1 is " + record["column1"]

また、ここはPandasの強力なスライシング処理によって、必要なデータを取得することが可能なのでロジックを簡潔にすることが可能です。

こちらはapplyを使って行ごとに処理する場合。

def f(s):
  print s

df.apply(f, axis=1)

csv/tsvへの出力

非常にシンプルです

csv

df.to_csv("b.csv")

import csv
df.to_csv("b.csv", quoting=csv.QUOTE_ALL)

tsv

df.to_csv("b.csv", sep="\t")

まとめ

各ステップでは、そこに強い言語やツールがあるかと思います。

Python+Pandasは一通り扱えることがメリットだと思います。

一旦、DataFrameに取り込んでしまえば、手続き的な処理、集計処理ともにかなり柔軟に処理ができます。

2016年7月10日日曜日

Evernoteの次を探す

Evernoteのプラン変更

6/29 にEvernoteのプラン変更が発表されました。

一番の変更点は、「無料プランの利用端末数を2台に限る」です。

Evernoteの特徴である、「どこからでも使える」という利点を制限し、実質的な有料化と言える内容です。

Evernoteのメリットを感じていたのはこの2点です。

  • Web clip、テキスト、画像などをメモ+ノートという形で貯めていける
  • ほぼ全ての端末・オンライン・オフラインにかかわらず使える

特に、類似のメモ用サービスを使っていて、最終的にEvernoteに落ち着いていたのは、2番目の「どこでも・いつでも使える」という部分でした。

今回のプラン変更に合わせて、有料プランにするという選択肢もあります。

ただ、Evernoteはmarkdownに対応していないなど不満な点があったので、代替することにしました。

Evernoteの代替

主な用途と代替先は以下です。

  • Web clip => はてぶ
  • テキスト,画像など => markdown + git + editor

テキスト、画像については、この記事が詳しいです。 http://qtamaki.hatenablog.com/entry/2016/07/08/133247

この記事では、dropboxを使っていますが、その代わりにgitを使いました。

gitにすれば、コミットログが残り管理が楽になる、自分の好きなeditorを選べる、データの共有なども自由にできる、といいことづくめですね。

また、移行したい時は、リポジトリを移動すればいいだけなので、ホスティングサービスを変えることも簡単です。

githubはプライベートは有料ですが、bitbucketならば、プライベートでも無料なので、個人用で使うには、オススメです。

すでにEvernoteに入れているデータは、xmlでエクスポートできます。MicrosoftのOneNoteへ移行したり、とりあえずgitに乗せて検索かけるようにしてもいいと思います。

hugo(静的サイトフレームワークを使う)

シンプルにメモを取るだけならば、gitにメモ用リポジトリを作ればOKですが、github pageのように使いたい場合、hugoがオススメです。

https://gohugo.io/overview/introduction/

こちらは、golangで実装された、静的Webサイト用のフレームワークでmarkdownの記事から静的サイトを作るものです。

gitで運用されることが前提になっているので、今回のような用途に向いています。