take のすべての投稿

mongoDBのデータの移行: mongodumpとmongorestore

移管元でmongodumpを用いてデータをファイル化し、移管先でmongorestoreを用いてそれを復元する。データの登録をしたいが、mongodbの登録が遅く困っている際には、複数のサーバにてmongoにデータ登録をし、その登録データを目的のサーバに移管するという方法をとることも可能。

移管元で、データベース名、必要に応じてコレクション名を指定してmongodbのファイル化を実施する。-oにて、出力するディレクトリを指定可能。

mongodump -d database -c collection -o backup

復元する際には、mongorestoreを利用する。復元するべきファイルのある場所を引数に指定する。下記の例では、カレントディレクトリに復元するファイルが存在する。

mongorestore --host 127.0.0.1 --port 27017 -d warpdrive .

python3でのマルチプロセス

multiprocessingライブラリを用いることで、python3では簡単にマルチプロセスを走らせることができる。
基本的な使い方は下記の通り。

from multiprocessing import Pool:
with Pool(number_of_processes) as p: returnValueList=p.map(function,argList)

ループが登場する際には、そのループの処理を関数化することにより、簡単に高速化が期待できることになる。
具体的に、multiprocessingを利用する前のsingle processとmulti processの場合のコードの変化を見てみよう。

関数に引数がない場合にはその差が分かりやすい。

[single process]
for arg in argList: function,argList

[multi process]
from multiprocessing import Pool
with Pool(number_of_processes) as p:
  p.map(function,argList)

関数に引数があるときは、下記の通りになる。

[single process]
for arg in argList:
  returnValueList.append(function,argList)

[multi process]
from multiprocessing import Pool
with Pool(number_of_processes) as p:
  returnValueList=p.map(function,argList)

尚、ループ内の処理を関数化していることが、基本的な利用条件となる。

プログラミング言語GoをUbuntuにインストール

Google Safe Browsingのreference implementationを利用するには、どうしてもGoをインストールする必要があったため、実施。

使ってみると、C言語の懐かしい感じも少しする、気持ちの良い言語であった。

ここでは、インストール、環境設定、動作確認の手順を以下に説明する。

インストール

まずはGoをインストール。

Official pageを見ると、コンパイルしてインストールする方法が書いてある。

それはそれでよいが、Ubuntuを使っているのであれば、やはりaptを利用したいところ。

下記にてインストール完了。

sudo add-apt-repository ppa:gophers/archive

sudo apt-get update

sudo apt-get install golang-1.10-go

環境設定

Goはインストールした後に使えるようにパス設定が必要。

export GOPATH=$HOME/go

export PATH=$PATH:/usr/lib/go-1.10/bin

export PATH=$PATH:$GOPATH/bin

最後に、設定変更を反映するためにシェル再ログイン

Exec $SHELL -l

動作確認

まずは下記のコマンド通ることを確認。

go version

go env

次に、どの言語でも共通の、Hello Worldを作成してみる。

“`hello.go

package main

import "fmt"

func main() {

fmt.Printf("hello, world\n")

}

<pre><code><br />次はコンパイルして実行できることを確認するのみ。

</code></pre>

go build hello.go

./hello

“`

Usage

sortおよびsortedを利用したリスト・辞書・辞書リストの並べ替え

Pythonでは,リストの並べ替えにはsortおよびsortedを利用するが,これは辞書や,辞書配列にも利用できる.
但し,辞書配列に利用する場合には,lambda関数を利用する.

documentList.sort(key=lambda x:(x['userid'],x['tabid'],x['request_time']))

昇順,降順の指定も可能であるが,上記は指定を省略.
また,キーは上記のように複数指定してもよいし,一つの未指定しても構わない.

sortとsortedの違いは、元のリストや辞書配列を上書きするか、新たに作成するかである。

Pythonのcsv library

PythonでCSVを扱おうと思う際には,csv libraryを用いるのが良い.
Csvはただのカンマ区切りのテキストファイルなので,私も当初はテキストファイルを自分で作成したコードで書き込んでいた.
別に難しいものではないが,csvファイルに挿入する列が増えてくると,コードがなかなか見づらくなってきたり,また挿入する行を頻繁に変更してデータを分析する際には,変更箇所が1か所に絞られる本csv libraryは便利である.

特に,dictionaryの辞書を書き込むcsv.DictWriterは使いやすい.
但し,辞書の中に辞書が入れ子になっている場合には,そのままではcsv.DictWriterは利用できない.
その際には,collections標準ライブラリ内のChainMapというクラスを利用すると,辞書内の辞書を大元の辞書と結合して一つの辞書にして扱うことができるため,便利.

import csv

dictList=[{'a':5,'b':3,'c':10},{'a':15,'b':13,'c':2}]
with open('sample.csv', 'w') as f:
    writer = csv.DictWriter(f, ['a', 'b', 'c'])
    writer.writeheader()
    writer.writerows(dictList)

MongodbとPython

本記事では,MongodbをPythonから操作して,ビッグデータ分析を実施する際に役立つ情報を,Mongodbのインストールから説明していく.

Installation

Mongodbのインストール (Ubuntu)

下記の公式サイトの通りに実施

https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu/

Pymongoのインストール (Ubuntu)

python3 -m pip install pymongo

上手くインストールできず、インストールできたように見えても実行するとpymongoがimportできないと文句言われるような状況が生じることがある。

色々と試したが、今回に限っては、apt-get remove python3-pipを実施してからapt-get install python3-pip, python3 -m pip install|pythonを実施して、うまくいった。

Usage

sudo service mongod start -dbpath /warpdrive/data/mongodb

上記のように–dbpathを指定することで、利用するdbファイルの場所を指定可能。

何故か上記でうまくいかないときは、下記でしのぐこともできるので、下記を実行して問題切り分けをしていくのがおすすめ。

/warpdrve/data/mongodbのpermissionがしっかりとmongodbユーザに与えられていることも確認。

それでもうまくいかないときは、おそらくだが、mongodをすべてしっかりと停止できていない段階で、mongodを新たに起動しようとしている事象が発生している気がする。

/etc/mongod.confの方も変更しておくと、うまくいっているようである。

mongod –dbpath /warpdrive/data/mongodb &amp;

mongo shellの使い方

https://qiita.com/rubytomato@github/items/390cdead677a851550e8

db一覧表示

show dbs

db削除

db.dropDatabase()

dbの選択

use warpdrive

Collection一覧表示

show collections

collection削除

db.COL.drop()

db.browse.drop()

collectionの中身を表示

db.COL.find()

db.browse.find()

MongoDBが起動しないとき

再起動したら、なぜかうまくいかなくなった。

結局、var/log/mongodbの中身を強制的にすべて消したら、ゼロスタートすることが可能になった。

https://qiita.com/gy57/items/7b892d9a59632d168360

https://qiita.com/momota10/items/cbe5c7e20b6f8d27e391

Mongo shellにて、jsonをきれいに表示

pretty()を利用。具体的には、"find({…},{…}),pretty()"のように利用。

https://qiita.com/rubytomato@github/items/390cdead677a851550e8

Jetpackのメール投稿機能

WordPressのプラグインであるJetpackを利用すると,メールでブログ記事を投稿できるようになる.

これはその機能を利用したテスト投稿であるが,この機能は私みたいに移動時間が長いユーザには非常に都合が良い.

例えば,飛行機の中で色々と記事を書き留めて,着陸してから順次送信するなどすれば,効率的に記事を作成することが可能になる.

blogの使い方についての疑問とメモ

blogは,毎日新しい投稿をしていくものだと思うが,個人的には意味のある情報を作り上げていくためにblogを使いたい.
そうすると過去の投稿に手を入れていく方が個人的には気持ちが良い.
過去の投稿に手を入れると,wordpressではどのように扱われるのか,これから数日観察していくことにする.

book review: 嫌われる勇気

アドラーの教えについて、人生を迷う若者と哲学者である老人が対話を繰り返す形で紹介する本。誰でも幸せになれると主張する哲学者に対し、様々な角度から若者が反論する。本書を通じ、アドラーの教えについて下記のことが述べられている。

  1. 人は皆、幸せになれる
  2. 人は変われるを前提に考えよ
  3. 必要なのは幸せになる勇気
  4. 今、この刹那を最大限生きなさい
  5. フロイト的な原因論ではなく、目的論に立脚した生き方をせよ
    • 過去を現在の不幸の原因としてとらえてはならない。
    • 過去のイベントの意味づけをするのは自分自身。
    • 自分の経験によって決定されるのではなく、経験に与える意味により自らを決定する。
  6. アドラー心理学は「使用の心理学」
    • 何が与えられているかではなく、与えられたものをどう利用するかを考える
  7. 人生のすべての苦難は人間関係に起因する
    • 承認欲求を否定せよ
      • 承認欲求は不自由を強いる
    • 課題を分離せよ
    • 他社の課題を切り捨てよ

[article review] Information Discovery: Needles and Haystacks

本記事では、情報検索技術の歴史について概観している。紀元前3000年のシュメール人が、粘土の書き板に情報を記していた時代のお話から始まり、図書館、そしてWebでの情報検索のお話へと発展していく。本記事は、IEEE Internet Computingの前書きのようなもので、後続する3つの情報検索に関する記事の簡単な紹介をする役割も担っている。
DOI: 10.1109/MIC.2005.55