データを扱う作業を行う場合、pythonだとかなりシンプルに実現できるので、まとめます。
大体は下記のケースが多いと思います。
1.ファイルに出力されたデータを読み込む
2.データベースに保存する
3.データベースから読み込む
ここでは、mongoDBの例を挙げます。
ごちゃごちゃ言わずに、まずソースを見たい方はこちらを利用ください
1.ファイルに出力されたデータを読み込む
普通にやると、openして1行ずつ読み込んで、delimiter(区切り文字)で区切って、、と地味に面倒です。
pythonでは、pandas.read_csv
ライブラリを活用することで非常に簡単に実現できます。(TSVでも他形式でも。sep=**
でdelimiter指定します)
import pandas as pd
def save_data_from_file(file_name, delimiter, flg_have_header):
if flg_have_header:
pd_dic = pd.read_csv(file_name, sep=delimiter)
else:
pd_dic = pd.read_csv(file_name, sep=delimiter, header=None)
final_dict = [dic for index, dic in pd_dic.to_dict(orient="index").items() if index!=0]
# 下記は後ほど説明
save_dict("your collection", final_dict)
-
これだけで、ファイル内容が取得できます(pd_dic: Pandas.DataFrame型)。
-
たとえば、ヘッダーがないファイルを読むこむ場合は、
header=None
をつけます。その他オプションについても細かく指定できます。ドキュメントはこちら -
上記は、Dictionary型に変換して利用する例です(final_dict)
2.データベースに保存する
- 前準備として、mongoDBのインストールがされていることを想定します。(ターミナルで
$ mongo
で接続できる状態) -
pymongo
というライブラリを利用し、mongoDBへの接続をします。 - データベース接続情報を用意(セキュリティ的問題から、
.gitignore
に追記すべき)
./conf.ini
[mongo]
id=**
password=**
- pymongo接続関数を作成(configparserでパスワードなどを読み込む)
database.py
import os, sys, configparser
PYMONGO_DIR = os.path.abspath(os.path.dirname(os.path.abspath(__file__)))
def get_db(db_name):
config = configparser.ConfigParser()
config.read(PYMONGO_DIR + '/config.ini')
client = MongoClient('localhost')
client['admin'].authenticate(config.get('mongo', 'id'), config.get('mongo', 'password'))
db = client[db_name]
return db
- いよいよデータの保存です
-
upsert=True
で、すでにcolumn_name
に一致するドキュメントがあれば更新、なければinsertできます。 - 上記で説明した、
get_db()
でDB接続します
database.py
from pymongo import MongoClient, DESCENDING
def save_dict(collection_name, dict_objs):
db = get_db(DICTIONARY_DB)
coll = db[collection_name]
for dict_obj in dict_objs:
coll.update({
"column_name": dict_obj['column_name']
},
dict_obj, upsert=True)
return
3.データベースから読み込む
- 例として、特定のcollectionを全件読み込み、pandas.Dataframeにして取得する例です。
database.py
def load_your_dic(collection_name):
db = get_db(YOUR_DB)
cursor = db[collection_name].find()
df = pd.DataFrame.from_dict(list(cursor)).astype(object)
return df
ソースはこちら
- ファイルからmongoDBにインストールする場合は、下記のコマンドで実現できます
python init_collections_from_file.py -d"\t" -f **.dic --HEADER Y
[sample]何回も処理する場合はシェルで書くと捗ります
init_politely_dic.sh