データを読み込みます。
# import libraries
library(jsonlite) # import JSON files
library(purrr) # functional programming
library(dplyr) # data wrangling
# import the data
raw_json <- jsonlite::fromJSON("jargons.json")
raw_jsonはリストのリストです。レベル1を表示します。 $マークはリストを表しています。
10の用語のリストのそれぞれに9のリストがあることがわかります。
# show the structure
str(raw_json, max.level = 1)
## List of 10
## $ Python :List of 9
## $ R :List of 9
## $ Julia :List of 9
## $ Java :List of 9
## $ JavaScript :List of 9
## $ library :List of 9
## $ package :List of 9
## $ statistical analysis:List of 9
## $ terminal :List of 9
## $ virtual environment :List of 9
RStudioでは次のコードでtree状に表示することができます。Global Environmentで見ることもできます。
View(raw_json)
mapで各項目のリストを取得します。
mapは、リストのエレメントを順に関数のアーギュメントとして実行し、新たなリストを作成する関数で、基本的な形式は、map(リスト, 関数)です。
10件の用語のそれぞれのキー“japanese”に対応する値の一覧を取得するコードは次です。
map(raw_json, "japanese")
“japanese”は文字列ではなく、関数のショートカットです。
map(raw_json, "japanese")
## $Python
## [1] "パイソン"
##
## $R
## [1] "R"
##
## $Julia
## [1] "Julia"
##
## $Java
## [1] "Java"
##
## $JavaScript
## [1] "JavaScript"
##
## $library
## [1] "ライブラリ"
##
## $package
## [1] "パッケージ"
##
## $`statistical analysis`
## [1] "統計解析"
##
## $terminal
## [1] "ターミナル"
##
## $`virtual environment`
## [1] "仮想環境"
mapは出力の形式により次の種類があります。
map(.x, .f)
is the main mapping function and returns a list
map_df(.x, .f)
returns a data frame
map_dbl(.x, .f)
returns a numeric (double) vector
map_chr(.x, .f)
returns a character vector
map_lgl(.x, .f)
returns a logical vector
データ・フレームとして、1レベルのリストの名と重複を除いた値の件数とデータのタイプを表示するコードはしたです。
“.x”は、パイプ演算子%>%の左のリストを順に代入するものです。
raw_json %>% map_df(~(data.frame(n_distinct = n_distinct(.x),
class = class(.x))),
.id = "variable")
## variable n_distinct class
## 1 Python 8 list
## 2 R 8 list
## 3 Julia 7 list
## 4 Java 9 list
## 5 JavaScript 8 list
## 6 library 6 list
## 7 package 7 list
## 8 statistical analysis 6 list
## 9 terminal 7 list
## 10 virtual environment 7 list
次に解説されています。
How to Iterate Through a Dictionary in Python
データをDictionaryとして読み込みます。Rの場合と同じファイルです。
import json
with open('jargons.json') as f:
data = json.load(f)
print(data)
## {'Python': {'categories': 'languages', 'japanese': 'パイソン', 'meaning': '大人気の汎用言語。', 'frequency': 5, 'difficulty': 3, 'priority': 5, 'comments': 'Excelのような表(データ・フレーム)を扱う場合は、ライブラリPandasを使用。', 'link1': 'http://www.mishou.be/2020/11/06/pythonr-%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab%e3%81%aa%e3%81%97%e3%81%a7python%e3%81%a8r%e3%82%92%e5%90%8c%e6%99%82%e3%81%ab%e5%ad%a6%e3%81%b6-google-colaboratory-ver-1/', 'link2': 'NaN'}, 'R': {'categpries': 'languages', 'japanese': 'R', 'meaning': '統計解析に最適な言語。機械学習もできる。', 'frequency': 5, 'difficulty': 3, 'priority': 5, 'comments': 'ライブラリTidyverseから学べばわかりやすい。RStudioを使うのがお勧め。', 'link1': 'http://www.mishou.be/2020/11/06/pythonr-%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab%e3%81%aa%e3%81%97%e3%81%a7python%e3%81%a8r%e3%82%92%e5%90%8c%e6%99%82%e3%81%ab%e5%ad%a6%e3%81%b6-google-colaboratory-ver-1/', 'link2': 'https://rstudio.com/'}, 'Julia': {'categories': 'languages', 'japanese': 'Julia', 'meaning': 'Pythonに比較される言語。', 'frequency': 3, 'difficulty': 3, 'priority': 3, 'comments': 'Pythonより処理が速い。コードがわかりやすい。Junoで実行するのがお勧め。', 'link1': 'http://www.mishou.be/2020/02/18/juliajuno-juliajuno%e5%85%a5%e9%96%801_%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab%e3%81%a8%e5%a7%8b%e3%82%81%e6%96%b9/', 'link2': 'NaN'}, 'Java': {'categories': 'languages', 'japanese': 'Java', 'meaning': '伝統ある汎用言語。コードは直感的でわかりやすいが、やたら長い。', 'frequency': 5, 'difficulty': 3, 'priority': 4, 'comments': '初心者の説明ですので誤っているかもしれません。', 'link1': 'http://www.mishou.be/2020/10/08/java-%e3%81%af%e3%81%98%e3%82%81%e3%81%a6%e5%ad%a6%e3%81%b6-ver-1/', 'link2': 'NaN'}, 'JavaScript': {'categories': 'languages', 'japanese': 'JavaScript', 'meaning': 'Web関連言語で大人気。', 'frequency': 5, 'difficulty': 3, 'priority': 5, 'comments': '初心者の説明ですので誤っているかもしれません。', 'link1': 'http://www.mishou.be/2021/01/08/javascript-%e3%81%af%e3%81%98%e3%82%81%e3%81%a6%e5%ad%a6%e3%81%b6_%e6%ba%96%e5%82%99-ver-1/', 'link2': 'NaN'}, 'library': {'categories': 'terms', 'japanese': 'ライブラリ', 'meaning': '特定の作業に必要な道具のセット。Installは一度、importは作業ごとに必要。', 'frequency': 5, 'difficulty': 2, 'priority': 5, 'comments': 'NaN', 'link1': 'NaN', 'link2': 'NaN'}, 'package': {'categories': 'terms', 'japanese': 'パッケージ', 'meaning': 'ライブラリをいれる箱。ライブラリは箱に入れて運ばれ、インストールされる。', 'frequency': 5, 'difficulty': 2, 'priority': 5, 'comments': 'Packageをインストールするのとlibraryをインストールするのは同じ。', 'link1': 'NaN', 'link2': 'NaN'}, 'statistical analysis': {'categories': 'statistics', 'japanese': '統計解析', 'meaning': '統計学に基づくデータの集計やグラフ作成。', 'frequency': 4, 'difficulty': 5, 'priority': 4, 'comments': 'NaN', 'link1': 'NaN', 'link2': 'NaN'}, 'terminal': {'categories': 'computer', 'japanese': 'ターミナル', 'meaning': 'コードでファイルを操作する。ファイルの作成、削除、移動、書き込みなどができる。', 'frequency': 4, 'difficulty': 3, 'priority': 4, 'comments': 'MacではApplicationsのUtilitiesのTerminal.appをクリックすると開く。Windowではコマンド・プロンプト。', 'link1': 'NaN', 'link2': 'NaN'}, 'virtual environment': {'categories': 'computer', 'japanese': '仮想環境', 'meaning': 'Pythonでは仮想環境構築が普通。Pythonやライブラリは仮想環境ごとにインストール。', 'frequency': 4, 'difficulty': 2, 'priority': 4, 'comments': 'Rで仮想環境を構築することは少ない。構築する場合はライブラリかAnacondaを使う。', 'link1': 'NaN', 'link2': 'NaN'}}
Dictionaryのキー(用語)の一覧を表示します。
For loopsを使用する場合は次です。10件の用語が含まれていることがわかります。Dataはdictionaryですが、iterationではキーだけのリストです。
for key in data:
print(key)
## Python
## R
## Julia
## Java
## JavaScript
## library
## package
## statistical analysis
## terminal
## virtual environment
あるいは、簡単に.keys()でキーのリストを取得することもできます。
data.keys()
## dict_keys(['Python', 'R', 'Julia', 'Java', 'JavaScript', 'library', 'package', 'statistical analysis', 'terminal', 'virtual environment'])
キーだけでなく値も得たい場合は、item()を用います。
キー(用語)とそれに対応する値のリストの中のキー“japanese”に対応する値を表示する、つまりキー(用語)と“japanese”の値を表示するコードは次です。
for key, value in data.items():
print(key, value['japanese'])
## Python パイソン
## R R
## Julia Julia
## Java Java
## JavaScript JavaScript
## library ライブラリ
## package パッケージ
## statistical analysis 統計解析
## terminal ターミナル
## virtual environment 仮想環境