俺人〜OREGIN〜俺、バカだから人工知能に代わりに頑張ってもらうまでのお話

俺って、おバカさんなので、とっても優秀な人工知能を作って代わりに頑張ってもらうことにしました。世界の端っこでおバカな俺が夢の達成に向けてチマチマ頑張る、そんな小さなお話です。現在はG検定、E資格に合格し、KaggleやProbSpaceのコンペに参画しながら、Pythonや機械学習、統計学、Dockerなどの勉強中です。学習したことをブログにアウトプットすることで、自分の身に着けていきたいと思います。まだまだ道半ばですが、お時間がありましたら見て行ってください。

YAMLを解析して要素を出力(Pythonによるスクレイピング&機械学習テクニック)

今回は、yaml で、PythonのデータからYAML形式に変換したり、YAML形式のファイルを解析して要素を出力できるようになりました。

 Pythonによるスクレイピング&機械学習開発テクニック増補改訂 Scrapy、BeautifulSoup、scik [ クジラ飛行机 ]の第3章を参考にさせていただきながら、取り組んでいます。

今回からは、Ubuntuの環境を構築して取り組んでいます。

環境構築については、Dockerを使われる方は、以下をご参照ください。

oregin-ai.hatenablog.com

OSから、Ubuntuを導入して取り組む方は、以下をご参照ください。

oregin-ai.hatenablog.com

では、振り返っていきたいと思います。

PythonのデータをYAMLに変換する。

1.YAMLとは何か

YAMLは、インデントを利用して階層構造を表現を持ったテキストのデータ形式です。(YAML Ain’t Markup Languageの略と言われるように、HTMLやXMLなどのマークアップ言語ではないようです。)

記載方法については、後ほど、Pythonのデータを変換して確認していきたいと思います。

2.全体像

まずは、PythonのデータをYAML形式に変換して、どのような形式に変換されるかを確認して行きます。

コード全体は以下の通りで、「yaml-dump.py」に保存しました。

import yaml
import warnings
warnings.simplefilter('ignore')

 

#(1)Pythonのデータ(リスト型の中に辞書型のデータ)を作成
customer = [
    {'name':'SUZUKI','age':'21','hobby':'car'},
    {'name':'SATO','age':'33','hobby':'anime'},
    {'name':'YAMADA','age':'52','hobby':'judo'},
    {'name':'TANAKA','age':'33','hobby':'travel'}
]

 

#(2) PythonのデータをYAMLに変換
yaml_str = yaml.dump(customer)
print(yaml_str)
print('--- --- ---') 

では、コードを順番に見ていきます。

3.Pythonのデータを作成

ここは、通常のPythonの処理なので、詳述はしませんが、customerというリスト型の変数に、辞書型のデータをリストにして入れ込みます。

辞書型のデータには、「name」、「age」、「hobby」を設定します。

customer = [
    {'name':'SUZUKI','age':'21','hobby':'car'},
    {'name':'SATO','age':'33','hobby':'anime'},
    {'name':'YAMADA','age':'52','hobby':'judo'},
    {'name':'TANAKA','age':'33','hobby':'travel'}
] 

4. PythonのデータをYAMLに変換

先ほど作成したcustomerを、Yaml形式に変換します。

変換方法は簡単で、yaml.dump()メソッドを利用して、引数にcustomerを渡すだけです。

戻り値は、str型(文字型)になります。

yaml_str = yaml.dump(customer)
print(yaml_str)

5.コマンドラインから実行してみる。

先ほど作成したファイルを実行してみます。

python3 yaml-dump.py

以下の通り、PythonのデータをYAML形式で出力できました。

 

f:id:kanriyou_h004:20200506162727p:plain

図1.dump実行結果

「-」ハイフンがリスト形式の1要素ずつを表しています。「-」の後には、半角スペースが必要です。

また、辞書型については、キー項目と値の間に「:」コロンを記載します。この記載方法は、Pythonと似ているので理解しやすいです。

辞書型の順番については、キー項目の辞書順になるので、注意が必要です。

この出力結果を、「yaml_data.txt」に保存しておきます。

YAMLのデータを解析して要素を出力する。

次に、先ほどYAML形式で保存した「yaml_data.txt」ファイルから文字列を読み込んで、解析して、要素を出力する処理を行います。

1.全体像

コード全体は以下の通りで、「yaml-load.py」に保存しました。

import yaml
import warnings
warnings.simplefilter('ignore')

 

#(1)YAML形式で記載されたテキストファイルから文字列を取得

with open('yaml_data.txt', mode='r') as fp:
    yaml_str = fp.read()

 

#(2)YAML形式を解析して「name」と「age」を出力

data = yaml.load(yaml_str)

for item in data:
    print(item['name'],item['age'])

では、コードを順番に見ていきます。

2.YAML形式で記載されたテキストファイルから文字列を取得

YAML形式で記載されたテキストファイルを開きます。

with open('yaml_data.txt', mode='r') as fp:

開いたファイルから、文字列を取得します。

    yaml_str = fp.read()

3. YAML形式を解析して「name」と「age」を出力

yaml.load()メソッドにYAML形式の文字列を渡して、Pythonデータ形式に変換します。

この時点で、「data」は、元の「customer」と同様に、リスト型の中に辞書型の要素を持つ構造になっています。

data = yaml.load(yaml_str)

すでにリスト型になっているので、「data」から一つずつ要素を取り出して、「name」と「age」を出力します。

for item in data:
    print(item['name'],item['age'])

4.コマンドラインから実行してみる。

先ほど作成したファイルを実行してみます。

python3 yaml-load.py

 以下の通り、YAML形式で記載されたファイルを読み込んで要素を出力できました。

f:id:kanriyou_h004:20200506165810p:plain

図2.load実行結果

これで、Web上に公開されているYAML形式のデータについても、ダウンロード後に解析して処理できるようになりました。

いろいろな形式で公開されているデータが扱えるようになってきたので、今後は、解析したデータをパソコン上でどのように処理していくかについても学習して行きたいと思います。

 

次回以降も、Pythonによるスクレイピング&機械学習開発テクニック増補改訂 Scrapy、BeautifulSoup、scik [ クジラ飛行机 ]で、スクレイピング機械学習開発に取り組んでいきたいと思います。

 

 

 【過去記事】

2019年8月31日(土)にE資格を受験して、合格しました!

E資格対策として勉強の進め方や、参考書などをまとめました。

これから受験される方がいらっしゃいましたらご参考まで。

oregin-ai.hatenablog.com 

 

 2019年3月9日(土)にG検定を受験し、見事合格できました!

受験の体験記や勉強法などを別のブログにまとめました。

これから受験される方がいらっしゃいましたらご参考まで。

g-kentei.hatenablog.com

 【E資格対策に使った参考書】