60. KVSの構築

Key-Value-Store (KVS) を用い,アーティスト名(name)から活動場所(area)を検索するためのデータベースを構築せよ

フィールド 内容
id ユニーク識別子 整数 20660
gid グローバル識別子 文字列 "ecf9f3a3-35e9-4c58-acaa-e707fba45060"
name アーティスト名 文字列 "Oasis"
sort_name アーティスト名(辞書順整列用) 文字列 "Oasis"
area 活動場所 文字列 "United Kingdom"
aliases 別名 辞書オブジェクトのリスト
aliases[].name 別名 文字列 "オアシス"~
aliases[].sort_name 別名(整列用) 文字列 "オアシス"
begin 活動開始日 辞書
begin.year 活動開始年 整数 1991
begin.month 活動開始月 整数
begin.date 活動開始日 整数
end 活動終了日 辞書
end.year 活動終了年 整数 2009
end.month 活動終了月 整数 8
end.date 活動終了日 整数 28
tags タグ 辞書オブジェクトのリスト
tags[].count タグ付けされた回数 整数 1

In [2]:
import pandas as pd
with open('artist.json', 'r') as f:
    data = f.readlines()
data = map(lambda x: x.rstrip(), data)
data_json_str = "[" + ','.join(data) + "]"

artists = pd.read_json(data_json_str)

In [71]:
import plyvel
artists_db = plyvel.DB('artists.ldb', create_if_missing=True)
names = artists['name']
areas = artists['area']
areas = areas.fillna('')
for name, area in zip(names, areas):
    artists_db.put(name.encode('utf-8'), area.encode('utf-8'))

61. KVSの検索

60で構築したデータベースを用い,特定の(指定された)アーティストの活動場所を取得せよ.


In [79]:
artists_db = plyvel.DB('artists.ldb', create_if_missing=True)
artists_db.get('The Silhouettes'.encode('utf-8')).decode('utf-8')
artists_db.close()


Out[79]:
'Netherlands'

62. KVS内の反復処理

60で構築したデータベースを用い,活動場所が「Japan」となっているアーティスト数を求めよ.


In [118]:
japan_count = 0
for key, value in plyvel.DB('artists.ldb', create_if_missing=True):
    if value.decode('utf-8') == 'Japan':
        japan_count += 1

print(japan_count)


21946

63. オブジェクトを値に格納したKVS

KVSを用い,アーティスト名(name)からタグと被タグ数(タグ付けされた回数)のリストを検索するためのデータベースを構築せよ.
さらに,ここで構築したデータベースを用い,アーティスト名からタグと被タグ数を検索せよ.


In [4]:
import pickle
import plyvel
names = artists.name
tags = artists.tags
artist_tag_db = plyvel.DB('artist_tag.ldb', create_if_missing=True)
try:
    for name, tag in zip(names, tags):
        dump_tag = pickle.dumps(tag)
        artist_tag_db.put(name.encode('utf-8'), dump_tag)
except:
    artist_tag_db.close()
artist_tag_db.close()

In [6]:
artist_tag_db = plyvel.DB('artist_tag.ldb')
print(pickle.loads(artist_tag_db.get('Shabba Ranks'.encode('utf-8'))))
artist_tag_db.close()


[{'count': 1, 'value': 'raggamuffin'}, {'count': 1, 'value': 'dancehall'}, {'count': 1, 'value': 'pop'}, {'count': 1, 'value': 'pop and chart'}, {'count': 1, 'value': 'drum and bass'}, {'count': 1, 'value': 'jungle'}, {'count': 1, 'value': 'mc'}]

64. MongoDBの構築

アーティスト情報(artist.json.gz)をデータベースに登録せよ.
さらに,次のフィールドでインデックスを作成せよ:

  • name
  • aliases.name
  • tags.value
  • rating.value

In [8]:
from pymongo import MongoClient
import json
with open('artist.json', 'r') as f:
    for i in f:

In [21]:
import pandas as pd
import pickle
with open('artists.pickle', 'rb') as f:
    dataframe = pickle.load(f)

In [22]:
names = dataframe['name'].fillna('')
allases = dataframe['allases'].fillna('')


Out[22]:
aliases area begin end ended gender gid id name rating sort_name tags type
0 NaN NaN NaN NaN True NaN 8972b1c1-6482-4750-b51f-596d2edea8b1 805192 WIK▲N NaN WIK▲N [{'value': 'sillyname', 'count': 1}] NaN
1 NaN NaN NaN NaN True NaN b4f76788-7e6f-41b7-ac7b-dfb67f66282e 578352 Gustav Ruppke NaN Gustav Ruppke NaN Person
2 NaN NaN NaN NaN True NaN 49add228-eac5-4de8-836c-d75cde7369c3 371203 Pete Moutso NaN Moutso, Pete NaN Person
3 NaN NaN NaN NaN True NaN c112a400-af49-4665-8bba-741531d962a1 273232 Zachary NaN Zachary NaN NaN
4 NaN NaN NaN NaN True NaN c42eed94-e233-44e2-82b8-3ed6dd9bf318 153193 The High Level Ranters NaN High Level Ranters, The NaN Group
5 [{'name': 'Silhouettes', 'sort_name': 'Silhoue... United States {'year': 1956} {'year': 1993} True NaN ca3f3ee1-c4a7-4bac-a16a-0b888a396c6b 101060 The Silhouettes NaN Silhouettes, The NaN Group
6 NaN NaN NaN NaN True NaN 7b4a548e-a01a-49b7-82e7-b49efeb9732c 145773 Aric Leavitt NaN Leavitt, Aric NaN NaN
7 NaN NaN NaN NaN True NaN 60aca66f-e91a-4cb5-9308-b6e293cd833e 1076328 Fonograff NaN Fonograff NaN NaN
8 NaN United States NaN NaN True Male 3e1bd546-d2a7-49cb-b38d-d70904a1d719 1172876 Al Street NaN Street, Al NaN Person
9 NaN NaN NaN NaN True NaN df120895-f6c6-4a66-b9cf-73350f0beb61 220155 Love .45 NaN Love .45 NaN NaN
10 NaN NaN NaN NaN True NaN c14f8d3f-ee81-416f-800f-8eff7e77a2e1 618464 Sintellect NaN Sintellect NaN NaN
11 NaN NaN NaN NaN True NaN b68a3969-319a-462f-942b-cd35581414fc 285714 Evie Tamala NaN Evie Tamala NaN NaN
12 NaN NaN NaN NaN True NaN 2c8ae2e0-3934-440e-81f5-2ec7fd0d7899 886708 Jean-Pierre Martin NaN Martin, Jean-Pierre NaN NaN
13 NaN NaN NaN NaN True NaN ac63d693-7b24-4258-a3db-09743b1b4269 209107 Deejay One NaN Deejay One NaN NaN
14 NaN NaN NaN NaN True NaN 4c4b7c6f-9285-4d6a-bc10-e5c9e08045f8 388372 wecamewithbrokenteeth NaN wecamewithbrokenteeth NaN Group
15 NaN NaN NaN NaN True NaN 055f435f-dba6-4156-9050-6ac41113e45f 726151 The Blackbelt Band NaN Blackbelt Band, The NaN Group
16 NaN NaN NaN NaN True NaN ab1b631b-9896-4433-bef9-7868bf8a42f3 152659 Giant Tomo NaN Giant Tomo NaN NaN
17 NaN NaN NaN NaN True NaN 272fa507-8f9c-44a8-8b0e-acc6e9fab882 155757 Decoding Jesus NaN Decoding Jesus NaN NaN
18 NaN NaN NaN NaN True NaN 66de1369-f9eb-43cb-ae4f-88582a47a624 228311 Elvin Jones & Jimmy Garrison Sextet NaN Jones, Elvin & Garrison, Jimmy, Sextet NaN Group
19 [{'name': 'DJ Matthew Grimm', 'sort_name': 'DJ... NaN NaN NaN True NaN 8266627f-bbeb-4e71-a110-d29700598afd 155759 DJ Matthew Grim NaN DJ Matthew Grim NaN NaN
20 NaN NaN {'year': 1992} NaN True NaN 424373ba-10fc-4883-bb33-af5a1977719b 407238 Infester {'value': 100, 'count': 1} Infester [{'value': 'death metal', 'count': 1}, {'value... Group
21 NaN NaN NaN NaN True NaN 4929cfe2-69d9-421b-bf68-0aaa74214801 421011 DJ Iglu & Hartly Dark NaN Iglu, DJ & Hartly Dark NaN Group
22 NaN NaN NaN NaN True NaN 8a959853-661b-421a-8768-2d84517859eb 156712 Teresa Catalán NaN Obra de Cámara NaN NaN
23 NaN NaN NaN NaN True NaN e6895f6e-f636-4ff6-b406-f5ddaf6cb243 1000880 Diskobitch NaN Diskobitch NaN NaN
24 NaN NaN {'year': 2001} NaN True NaN 4eee2c60-c2c8-4b33-b14f-0eed4bf4d11a 471075 Seanews NaN Seanews NaN Group
25 NaN NaN NaN NaN True NaN 302d69b6-4ed9-48ec-b6dd-1c70e765b327 98827 CyberDog NaN CyberDog NaN NaN
26 NaN NaN NaN NaN True Male 0a681531-3fd0-4f49-9cd9-c9e0dbc8dbf1 1182563 Serge Bec NaN Serge Bec NaN Person
27 NaN NaN NaN NaN True NaN 73a9e884-168b-4c52-8d41-6ca6b2d4744a 208149 Thirteen Over Eight NaN Thirteen Over Eight NaN Group
28 NaN NaN NaN NaN True NaN 7a420d61-01bc-4dd9-bda8-da6512630946 998553 Astolat NaN Astolat NaN NaN
29 NaN NaN NaN NaN True NaN 0c1ad3d9-59f8-4d1d-baa6-713bae024367 305463 The Insignificant NaN Insignificant, The NaN NaN
... ... ... ... ... ... ... ... ... ... ... ... ... ...
921307 NaN Germany NaN NaN True Male aef8c4b3-a397-4aaf-83aa-d1d535e5b544 1171178 Lothar Stadtfeld NaN Stadtfeld, Lothar NaN Person
921308 NaN Mumbai NaN NaN True NaN 152a5f09-0f69-48b0-834d-10f3682f6761 1171165 Nader Balooch NaN Balooch, Nader NaN NaN
921309 NaN Germany NaN NaN True Male 3dc29541-8b9d-47c6-8a02-9f0200fe4ff9 1171166 Rambald Bellman NaN Bellman, Rambald NaN Person
921310 NaN Germany NaN NaN True Male 0fe2d5dd-e8fa-4f70-8b84-8cb847ae2dac 1171167 Damian Omansen NaN Omansen, Damian NaN Person
921311 NaN Germany NaN NaN True Male 3c955912-3925-40a6-86fb-75094036c441 1171168 Julian Gretschel NaN Gretschel, Julian NaN Person
921312 NaN Germany NaN NaN True Male 6a912159-852d-4311-b3a5-d3e0aa57308b 1171169 Christopher Sauloff NaN Sauloff, Christopher NaN Person
921313 NaN Germany NaN NaN True Male 2c027491-14e5-45d4-b168-99488f33ea23 1171170 BenjaminAttiche NaN BenjaminAttiche NaN Person
921314 NaN NaN NaN NaN True NaN 0596e2d0-f07c-49b9-8ac7-9731e23efe6f 1177350 Over the Edge NaN Over the Edge NaN NaN
921315 NaN Germany NaN NaN True Male 952dacf5-5e01-4b9e-8180-68299c2b839c 1171171 Rolf Langhans NaN Langhans, Rolf NaN Person
921316 [{'name': 'Serge Christen', 'sort_name': 'Chri... Biel/Bienne NaN NaN True Male 47e19b2a-0b2b-4657-9401-71a0a0cb3096 1171180 SirJoe NaN SirJoe NaN Person
921317 NaN United Kingdom NaN NaN True NaN 2efc44d4-1d44-4f2e-b310-6b73fb84e536 1171172 Hellion Rising NaN Hellion Rising NaN Group
921318 NaN Jamaica {'year': 1960, 'month': 7} NaN True Male d653e0c7-383b-4e16-9d7e-436296b31aca 1045645 Clifton Dillon NaN Dillon, Clifton NaN Person
921319 NaN Germany NaN NaN True Male d3d5ab73-d614-4277-8840-8131155cf714 1171173 Robert Kessler NaN Kessler, Robert NaN Person
921320 NaN United Kingdom {'year': 2003} {'year': 2011} True NaN 6a3fdc71-8bc4-4aca-827a-717072b60635 270369 The Cinematics NaN Cinematics, The [{'value': 'indie rock', 'count': 1}] Group
921321 NaN Germany NaN NaN True Male 0c3eea47-7713-4396-b123-91169fb4a59f 1171174 Kenneth Dahl Knudsen NaN Knudsen, Kenneth Dahl NaN Person
921322 NaN Germany NaN NaN True Male 526eac4e-b73d-405d-9b5a-63f853346bb9 1171175 Thomas Wegel NaN Wegel, Thomas NaN Person
921323 NaN France NaN NaN True NaN b95c8b04-1745-4527-b896-1336308c20de 285561 Sale Équipe NaN Sale Équipe NaN Group
921324 NaN Canada {'year': 2011} NaN True NaN 3f896bb7-9353-4192-9cf6-26502c0d91fb 1171182 Merdarahta NaN Merdarahta NaN Group
921325 NaN United Kingdom {'date': 8, 'year': 1960, 'month': 9} NaN True Male 3d6e9a6f-b94a-4243-adb4-450fdd1d5f38 322421 David Steele NaN Steele, David NaN Person
921326 NaN United Kingdom {'year': 1985} {'year': 1990} True NaN faa4e662-75b0-4499-ad95-47bfd4bff8f6 137024 The Bodines NaN Bodines, The [{'value': 'glossop', 'count': 1}, {'value': '... Group
921327 [{'name': 'Andy Somers', 'sort_name': 'Andy So... United Kingdom {'date': 31, 'year': 1942, 'month': 12} NaN True Male 7d81816f-200c-47d3-a71d-4421b3185d45 44815 Andy Summers {'value': 100, 'count': 1} Summers, Andy NaN Person
921328 [{'name': 'Roberto Piazza', 'sort_name': 'Piaz... France {'date': 10, 'year': 1945, 'month': 5} NaN True Male 11e87cef-e6ae-451f-ab6c-64309c9175b0 171309 Little Bob NaN Little Bob NaN Person
921329 NaN United Kingdom {'date': 1, 'year': 1942, 'month': 3} NaN True Male df54c3d8-9f86-47d9-8891-4d17d4bd7949 340388 Michael Giles NaN Giles, Michael NaN Person
921330 NaN NaN NaN NaN True NaN bf8fefa4-c02d-4ad0-91d9-26f94169488f 1171184 Harvard of the South NaN Harvard of the South NaN Group
921331 NaN France {'year': 1989, 'month': 12} NaN True Female 0c7083e0-d1fd-426a-a663-2ee49de4093e 736663 Tal NaN Tal [{'value': 'tal', 'count': 1}] Person
921332 [{'name': 'Kenny Arkana', 'sort_name': 'Kenny ... France {'date': 20, 'year': 1982, 'month': 12} NaN True Female f97c4058-cc2b-43da-97e5-96bef7e55f40 217795 Keny Arkana {'value': 80, 'count': 1} Arkana, Keny [{'value': 'rap', 'count': 1}, {'value': 'hip ... Person
921333 NaN Japan NaN NaN True Male 90114a27-2f0a-4b74-b56b-5402614a7b1f 1180020 明智咲 NaN Akechi, Saku NaN Character
921334 [{'name': 'チャーリー&ザ・ホット・ホイールズ', 'sort_name': 'チ... NaN NaN NaN True NaN af1800cf-c82c-4591-9375-dfe8acf69942 210433 Charlie & the Hot Wheels NaN Charlie & the Hot Wheels [{'value': 'likedis auto', 'count': 1}] NaN
921335 [{'name': 'Katt Deluna', 'sort_name': 'Katt De... United States {'date': 17, 'year': 1987, 'month': 11} NaN True Female ddd4c4bc-a4ae-4946-b59c-a86aea7fa4f0 441637 Kat DeLuna NaN DeLuna, Kat NaN Person
921336 [{'name': 'Ranks, Shabba', 'sort_name': 'Ranks... Jamaica {'date': 17, 'year': 1966, 'month': 1} NaN True Male c0336f2a-610f-4b38-bc13-eb07393425a7 37082 Shabba Ranks NaN Ranks, Shabba [{'value': 'raggamuffin', 'count': 1}, {'value... Person

921337 rows × 13 columns


In [ ]: