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

俺って、おバカさんなので、とっても優秀な人工知能を作って代わりに頑張ってもらうことにしました。世界の端っこでおバカな俺が夢の達成に向けてチマチマ頑張る、そんな小さなお話です。現在はG検定に合格し、E資格取得とKaggle参画に向けて、Pythonや機械学習の勉強中です。まだまだ道半ばですが、お時間がありましたら見て行ってください。

Ryzen Embedded搭載ASRock 4x4 Box V1000M/JPを組み立てる。

今回は、週末に開発環境として新しく構築したデスクトップパソコン(ASRock 4x4 Box V1000M/JP)についてレポートしたいと思います。

f:id:kanriyou_h004:20200524181557j:plain

図1.購入品一式

最近、メインの開発環境がSurfaceGoogle Claboratoryだけでは、限界になってきたので、デスクトップを新調した次第です。

では、一緒に購入したパーツや、組み立て時に苦労した点などを、画面つきでレポートしていきたいと思います。

【購入編】

今回購入したのは、ベアボーンキット(ASRock 4x4 Box V1000M/JP)、SSD 1TB(Crucial CT1000BX500SSD1JP)、メモリ32GB(Crucial CT2K16G4SFD824A )の3点です。

このスペックで、総額8万円を切る価格、しかもネット通販で家に居ながらにして、全て揃えることができるなんてすごい時代になったもんだと感動しました。

1.ベアボーンキットASRock 4x4 Box V1000M/JP

省スペース型ベアボーンキットと言えば、Intel NUCシリーズが有名ですが、少しお高めなので、予算と設置場所を踏まえた結果、昨年12月に発売された、ASRockの省スペース型ベアボーンキット 4x4 Box-V1000M/JPを購入いたしました。

 CPUには、AMDRyzen Embeddedを搭載し、IntelNUCシリーズとほぼ同等となる幅110mm、奥行き118.5mm、高さ67.3mmのコンパクトサイズで、5万円を切る価格が魅力で、購入を決心しました。

GPUが、Radeon Vega 8 Graphicsなのも決め手となりました。

主なスペックは以下の通りです。

  • CPU:Ryzen Embedded V1605B(4コア/8スレッド/定格2.00GHz/ブースト時最高3.60GHz)
  • GPURadeon Vega 8 Graphics
  • メモリスロット:DDR4 SO-DIMM×2(最大32GB/2,400MHz)
  • ストレージA:9.5mm厚の2.5インチベイ×1
  • ストレージB:M.2 Type 2242/2260×1
  • 有線LAN:ギガビットLANポート×2
  • 無線LANIntel Wireless-AC 3168(IEEE 802.11acBluetooth 4.2)
  • インターフェイスHDMI×1、Displayポート×2、USB3.1(表×1、裏×2)、USB2.0(表×2)、オーディオ端子×1
 

2.SSD 1TB(Crucial CT1000BX500SSD1JP)

ストレージについては、M.2インテーフェイスのSSDと迷ったのですが、M.2 Type 2280が使えず、2242/2260しか対応していなかったので、1TBのサイズが欲しかったこともあり、2.5インチベイに取り付けるCrucial CT1000BX500SSD1JPを採用しました。

 

3.メモリ32GB(Crucial CT2K16G4SFD824A)

メモリは、当然、搭載できる最大の32GBを購入いたしました。

ストレージがCrucialだったので、セットで16GB x 2枚のCrucial CT2K16G4SFD824Aを購入いたしました。

 

 

【組み立て編】

一部、在庫確認に時間がかかった製品もありましたが、現在の状況を考えると、結構早く全てのパーツが同じ週に揃ったので、とてもありがたいことでした。

では早速組み立てていきます。

1.ASRock 4x4 Box V1000M/JPを開封する。

まず、ASRock 4x4 Box V1000M/JPを開封していきます。

片手に乗るミニサイズです。

f:id:kanriyou_h004:20200524212309j:plain

図2.本体全体像

表面には、USB3.1x1、USB2.0x2、オーディオ端子x1のインターフェイスがあります。

f:id:kanriyou_h004:20200524212617j:plain

図3.表面インターフェイス

裏面には、HDMI×1、Displayポート×2、USB3.1×2、ギガビットLANポートx2、電源入力のインターフェイスがあります。

f:id:kanriyou_h004:20200524212742j:plain

図4.裏面インターフェイス

開封は、底面の四隅にあるネジを外せばすぐに開封できます。

f:id:kanriyou_h004:20200524213604p:plain

図5.底面

開封した、内部がこちらです。

f:id:kanriyou_h004:20200524213824j:plain

図6.内部

底蓋には、2.5インチのストレージを取り付けるための、金属枠がついて居ます。

f:id:kanriyou_h004:20200524213928j:plain

図7.底蓋

次に、各パーツを取り付けていきます。

取り付けにあたっては、とてもわかりやすい手順書がついているので、迷うことは無いと思います。

f:id:kanriyou_h004:20200524214208j:plain

図8.取扱説明書

2.メモリ(Crucial CT2K16G4SFD824A)を取り付ける。

次にメモリを取り付けていきます。

実は、このメモリ取り付けが最大の難関でした。

f:id:kanriyou_h004:20200524214552j:plain

図9.Crucial CT2K16G4SFD824A

メモリスロットは、こちらになります。

この写真左側に写っている、USBインターフェイスの位置が、微妙にメモリ側に出っ張っていて、メモリをさす際に邪魔になってしまいます。

f:id:kanriyou_h004:20200524214714j:plain

図10.メモリスロット

このため、USBインターフェイスを一旦取り外します。

f:id:kanriyou_h004:20200524215355j:plain

図11.USBインターフェイス取り外し

USBインターフェイスを取り外すことで、なんとかメモリを取り付けることができました。

USBインターフェイスも元に戻して、メモリ取り付け完了です。

f:id:kanriyou_h004:20200524215540j:plain

図12.メモリ取り付け後

3.SSD 1TB(Crucial CT1000BX500SSD1JP)を取り付ける。

続いて、SSDを取り付けます。

f:id:kanriyou_h004:20200524215943j:plain

図13.Crucial CT1000BX500SSD1JP

SSDは、こちらの、SATAコネクタに取り付けるので、他の基盤が邪魔になるコトもなく、簡単に取り付けることができました。

f:id:kanriyou_h004:20200524220110j:plain

図14.SATAコネクタ

SSDがを取り付けるとこんな感じです。これを底蓋の2.5インチベイに取り付けます。

f:id:kanriyou_h004:20200524220321j:plain

図15.SSD取り付け後

4.底蓋を閉めて完成

 最後に、底蓋を閉めて完成です!!

f:id:kanriyou_h004:20200524220536j:plain

図15.底蓋取り付け後

あとは、Ubuntuをインストールして開発環境の構築の完成です。

Ubuntuのインストールについては、以下の過去記事をご参照ください。

oregin-ai.hatenablog.com

 

最近、ノートパソコンやmacSurfaceを購入していたので、パソコンの組立は、久しぶりでしたが、とても楽しかったです。

今のベアボーンキットは、本当によくできていて、メモリの取り付けには苦戦しましたが、ほとんどトラブルなく開発環境が構築できました。

さぁ、この環境を使って、今後も精進して参ります!

 

 

 【過去記事】

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

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

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

oregin-ai.hatenablog.com 

 

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

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

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

g-kentei.hatenablog.com

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

 

 

MNISTのデータをCSVに変換する(Pythonによるスクレイピング&機械学習テクニック)

今回は、前回ダウンロードしてきたMNISTのデータをCSVに変換しました。

今までバイナリデータをちゃんと扱ったことがなかったので、とても勉強になりました。

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

 MNISTのデータのダウンロードまでは、前回の記事をご参照ください。

oregin-ai.hatenablog.com

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

MNISTのデータをCSVに変換する

1.MNISTのデータ構造

MNISTからダウンロードしてきたデータは、以下のような構造になっています。

バイナリデータとなっているので、数値で扱うためには、後述のstructモジュールのunpack()メソッドを使って、整数値などに変換してから扱う必要があります。

ラベルファイル (「train-labels-idx1-ubyte」「t10k-labels-idx1-ubyte」)

  • 先頭4バイト マジックナンバー(今回は使いません)
  • 次の4バイト ラベルの個数(4バイトの整数)
  • 次の1バイト 1つ目のデータラベル(「0」〜「9」)
  • 次の1バイト 2つ目のデータラベル(「0」〜「9」)
  • ......

画像ファイル(「train-images-idx3-ubyte」「t10k-images-idx3-ubyte」)

  • 先頭4バイト マジックナンバー(今回は使いません)
  • 次の4バイト 画像の個数(4バイトの整数)
  • 次の4バイト 画像のピクセル行数(MNISTの場合28ピクセル)
  • 次の4バイト 画像のピクセル列数(MNISTの場合28ピクセル)
  • 次の1バイト 1枚目の画像の(0,0)の座標のデータ
  • 次の1バイト 1枚目の画像の(0,1)の座標のデータ
  • ..........

MNIST公式のWebサイトは以下の通りです。

MNIST handwritten digit database, Yann LeCun, Corinna Cortes and Chris Burges

2.全体像

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

今回は、「to_csv」という関数を定義して、最後にその関数を使って、CSVに変換するという構造になっています。

import struct

def to_csv(name, maxdata):
    #(1)ラベルファイルとイメージファイルを開く
    lbl_f = open('./mnist/'+name+'-labels-idx1-ubyte', 'rb')
    img_f = open('./mnist/'+name+'-images-idx3-ubyte', 'rb')
    csv_f = open('./mnist/'+name+'.csv', 'w', encoding='utf-8')


    #(2)ヘッダー情報を読み込む
    mag, lbl_count = struct.unpack('>II', lbl_f.read(8))
    mag, img_count = struct.unpack('>II', img_f.read(8))
    rows, cols = struct.unpack('>II', img_f.read(8))
    pixels = rows * cols


    #(3) 画像データを読み込んでCSVで保存
    res = []
    for idx in range(lbl_count):
        if idx > maxdata: break
        label = struct.unpack('B', lbl_f.read(1))[0]
        bdata = img_f.read(pixels)
        sdata = list(map(lambda n: str(n), bdata))
        csv_f.write(str(label)+',')
        csv_f.write(','.join(sdata)+'\r\n')

        #(4) うまく取り出せたかどうかPGMで保存して確認
        if idx < 10:
            s = 'P2 28 28 255\n'
            s += ' '.join(sdata)
            iname = './mnist/{0}-{1}-{2}.pgm'.format(name,idx,label)
            with open(iname, 'w', encoding='utf-8') as f:
                f.write(s)
    csv_f.close()
    lbl_f.close()
    img_f.close()

 

#(5) 出力件数を指定して出力
to_csv('train', 1000)
to_csv('t10k',500)
print('OK')

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

3.ラベルファイルとイメージファイルを開く

まず、「to_csv」の関数の中身を見ていきます。

最初に、ダウンロードしたMNISTのラベルファイルと、イメージファイルを開きます。

このファイルは、バイナリファイルの読み込みなので、'rb'で開きます。

    lbl_f = open('./mnist/'+name+'-labels-idx1-ubyte', 'rb')
    img_f = open('./mnist/'+name+'-images-idx3-ubyte', 'rb')

また、CSVで保存するファイルを開きます。

今度は、テキストファイルの書き込みなので、'w'で開きます。また、エンコーディングには、'utf-8'を指定します。

    csv_f = open('./mnist/'+name+'.csv', 'w', encoding='utf-8')

4.ヘッダー情報を読み込む

structモジュールのunpack()メソッドを使って、バイナリデータを読めるデータに変換します。

使い方は、unpack(フォーマット、バイナリデータ)となります。

フォーマットの'>II'は、'>'がビッグエンディアン(データの順番を変えずに読み込む)を表し、'II'が2つ連続したunsined int型(符号無4バイト整数型)を表しています。

全体としてlbl_f.read(8)で読み込んだ8バイトのデータを4バイト、4バイトに分けてそれぞれ、1つずつの整数値としてmag, lbl_countにそれぞれ格納します。

    mag, lbl_count = struct.unpack('>II', lbl_f.read(8))

同様に、img_fから、最初の8バイトを読み込んでmag, img_countにそれぞれ格納します。

    mag, img_count = struct.unpack('>II', img_f.read(8))

次の8バイトを読み込んで、前半4バイトを行数(rows)、後半4バイトを列数(cols)に読み込んで、掛けた値を画素数(pixels)に格納します。(MNISTのデータは、rows=28,cols=28のpixels=784のデータとなります。)

    rows, cols = struct.unpack('>II', img_f.read(8))
    pixels = rows * cols

5.画像データを読み込んでCSVで保存

ラベルの数だけ、繰り返します。

    for idx in range(lbl_count):

指定したデータの個数(maxdata)を上回ったら処理を終了します。

        if idx > maxdata: break

lbl_f.read(1)でラベルデータの1バイトを、'B'(整数型の1バイトデータ)としてlabelに格納します。

        label = struct.unpack('B', lbl_f.read(1))[0]

img_f.read(pixels)で画像データの画素数バイト(784バイト)を、bdataに格納します。

        bdata = img_f.read(pixels)

bdataを、map関数とlambda式を用いて1バイトづつ文字列に変換した後に、list関数で配列としてsdataに格納します。

        sdata = list(map(lambda n: str(n), bdata))

csv_fに出力する際は、先頭1文字目にラベルデータの数字とカンマを出力後、list関数で配列に格納された画像データの値をjoin関数でカンマ区切りにして出力し、最後に改行を出力します。

        csv_f.write(str(label)+',')
        csv_f.write(','.join(sdata)+'\r\n')

6.うまく取り出せたかどうかPGMで保存して確認

CSVで出力したデータが本当に画像データであるか可視化するためにPGM形式の画像ファイルとして保存してテストします。PGMはテキストファイルで画像を表現する形式です。 

全てのデータに実施する必要はないので、取り出した画像データの10個目までについて処理をします。

        if idx < 10:

 まず、画像のヘッダを定義します。'P2'は、グレースケールの画像を、'28 28'は縦28x横28の画像サイズを、'255'は255階調のグレースケールであることを表しています。

            s = 'P2 28 28 255\n'

あとは画像データ(sdata)をスペース区切りで追加します。

            s += ' '.join(sdata)

mnistフォルダの配下に、指定した名前と、インデックスと、「0」〜「9」のラベルを作ったファイルを作成して、開いていたファイルを全てクローズします。

            iname = './mnist/{0}-{1}-{2}.pgm'.format(name,idx,label)
            with open(iname, 'w', encoding='utf-8') as f:
                f.write(s)
    csv_f.close()
    lbl_f.close()
    img_f.close()

7.出力件数を指定して出力

最後にこれまで作ってきた「to_csv」関数を使って、訓練データ(train)を1,000個とテストデータ(t10k)を500個のデータを、それぞれCSVに変換します。

#(5) 出力件数を指定して出力
to_csv('train', 1000)
to_csv('t10k',500)
print('OK')

 

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

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

python3 mnist-to-csv.py

以下の通り、MNISTのバイナリデータをCSVに変換し、PGMファイルも作成することができました。

f:id:kanriyou_h004:20200523131715p:plain

図1.mnist-to-csv.py実行結果

f:id:kanriyou_h004:20200523131950p:plain

図2.出力されたファイル

作成されたPGMファイルを開いてみると、手書きの数字(図3では、数字の7)の画像ファイルであることが確認できました。

f:id:kanriyou_h004:20200523132243p:plain

図3.画像ファイルを確認

 

今回は、MNISTの手書き数字画像のバイナリデータを、CSVに変換する処理を確認しました。これまで、バイナリデータをきちんと扱ったことがなかったので、とても勉強になりました。

引き続き、このCSVデータを使って、画像分類の機械学習を実施していきたいと思います。

 

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

 

 

 【過去記事】

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

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

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

oregin-ai.hatenablog.com 

 

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

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

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

g-kentei.hatenablog.com

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

 

 

 

 

 

MNIST(手書き数字データ)のダウンロード/解凍を自動化する(Pythonによるスクレイピング&機械学習テクニック)

今回は、少しスクレイピングに戻って、画像の文字認識に使うためのMNIST(手書き数字データ)をダウンロードして解凍できるようになりました。機械学習では、圧縮されたデータをダウンロードして処理することもあるので、自動化できるのは非常に効率的です。

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

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

oregin-ai.hatenablog.com

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

oregin-ai.hatenablog.com

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

MNIST(手書き数字データ)のダウンロード/解凍を自動化する。

1.MNISTとは何か

MNISTは、Mixed National Institute of Standards and Technology handwritten digit databaseの略で「エムニスト」と読むそうです。(MNISTが提供する手書き文字データベースなので、略したらいけないところが略されているような…。)

学習用の手書き数字画像6万枚と、テスト用の手書き数字画像1万枚を集めた、画像データセットです。

あらかじめ、手書きの数字「0〜9」に正解ラベルが与えられているので、そのまま画像分類の実践データとして使うことができます。MNISTは機械学習の入門のデータとしてもよく使われています。

公式のWebサイトは以下の通りです。

MNIST handwritten digit database, Yann LeCun, Corinna Cortes and Chris Burges

2.全体像

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

import urllib.request as req
import gzip, os, os.path

#(1)パラメータを設定する

savepath = './mnist'
baseurl = 'http://yann.lecun.com/exdb/mnist'
files = [
    'train-images-idx3-ubyte.gz',
    'train-labels-idx1-ubyte.gz',
    't10k-images-idx3-ubyte.gz',
    't10k-labels-idx1-ubyte.gz'
]

# (2)ダウンロードする
if not os.path.exists(savepath): os.mkdir(savepath)
for f in files:
    url = baseurl + '/' + f
    loc = savepath + '/' + f
    print('download:', url)
    if not os.path.exists(loc):
        req.urlretrieve(url, loc)

 

# (3)gzipを解凍する

for f in files:
    gz_file = savepath + '/' + f
    raw_file = savepath + '/' + f.replace('.gz','')
    print('gzip:',f)
    with gzip.open(gz_file, 'rb') as fp:
        body = fp.read()
        with open(raw_file, 'wb') as w:
            w.write(body)
print('ok')

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

3.パラメータを設定する

ファイルをダウンロードするのに必要なパラメータを設定します。

このパラメータを編集すれば、今後、gzipファイルをWebからダウンロードして解凍する作業が自動化できることになります。

まずは、ダウンロードしたファイルを保存するパスを設定します。

savepath = './mnist'

ダウンロードする先の基準となるURLを設定します。

baseurl = 'http://yann.lecun.com/exdb/mnist'

最後に、ダウンロードするファイルをリスト型に設定します。

files = [
    'train-images-idx3-ubyte.gz',
    'train-labels-idx1-ubyte.gz',
    't10k-images-idx3-ubyte.gz',
    't10k-labels-idx1-ubyte.gz'
]

ダウンロードするファイルの中身は、それぞれ以下の通りとなります。

  • train-images-idx3-ubyte.gz:学習用画像データ
  • train-labels-idx1-ubyte.gz:学習用ラベルデータ
  • t10k-images-idx3-ubyte.gz:テスト用画像データ
  • t10k-labels-idx1-ubyte.gz:テスト用ラベルデータ

4.ダウンロードする

設定されたパラメータを使ってWebからファイルをダウンロードします。

ダウンロードをする前に、保存用のディレクトリ(savepath)があるか確認します。

なければ、os.mkdir()メソッドでディレクトリを作成します。

if not os.path.exists(savepath): os.mkdir(savepath)

ダウンロードするファイル名のリスト(files)から、ファイル名を一つずつ取り出して、ダウンロード先の基準となるURL(baseurl)とファイル名(f)を繋いで、ダウンロードするURL(url)と、保存先のパス(savepath)とファイル名(f)を繋いで、保存先ファイル名(loc)を設定します。

for f in files:
    url = baseurl + '/' + f
    loc = savepath + '/' + f
    print('download:', url)

os.path.exists()メソッドを使って、保存先ファイル名(loc)が存在しているかチェックします。

存在していなければ、urlretrieve()メソッドを使って、ダウンロードするURL(url)から、保存先ファイル名(loc)に保存します。

    if not os.path.exists(loc):
        req.urlretrieve(url, loc)

5.gzipを解凍する

ファイルのダウンロードが完了したら、ファイル名を一つづつ取り出して、保存したファイル名(gz_file)と、解凍後の生データのファイル名(raw_file)を設定します。

raw_file設定時には、 replace()メソッドを使って、ファイル名から'.gz'を削除(''に置き換え)します。

 for f in files:
    gz_file = savepath + '/' + f
    raw_file = savepath + '/' + f.replace('.gz','')
    print('gzip:',f)

gzip.open()メソッドを使って、gzipで圧縮されたファイル(gz_file)をバイナリ読み込み('rb')で開きます。

開いたファイルから、read()メソッドで解凍されたデータを読み込みます。

    with gzip.open(gz_file, 'rb') as fp:
        body = fp.read()

open()メソッドで、保存先ファイル(raw_file)を書き込み('wb')で開きます。

解凍されたデータ(body)をwrite()メソッドで書き込みます。

        with open(raw_file, 'wb') as w:
            w.write(body)

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

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

python3 mnist-download.py

以下の通り、MNISTのデータをダウンロードして、解凍することができました。

f:id:kanriyou_h004:20200516185017p:plain

図1.mnist-download.py実行結果

結果のファイルを確認してみると、解凍した後に大量の画像ファイルがある訳ではなく、それぞれのファイルを解凍したファイルが1つずつできています。

実は、MNISTのデータセットは、独自データベース形式でデータが格納されており、画像もそのデータベースの中に保存されています。

このデータの読み込みについては、次回、CSVに変換する際に振り返っていきたいと思います。

f:id:kanriyou_h004:20200516185323p:plain

図2.ダウンロード/解凍したファイル

今回は、少しスクレイピングの復習として、MNISTの手書き数字データのダウンロードと解凍を自動化しました。

次回は、このデータのCSVへの変換と画像分類の機械学習を実施していきたいと思います。

 

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

 

 

 【過去記事】

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

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

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

oregin-ai.hatenablog.com 

 

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

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

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

g-kentei.hatenablog.com

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

 

 

 

 

 

scikit-learnのSVMを使ってアヤメの品種を分類する(Pythonによるスクレイピング&機械学習テクニック)

今回は、scikit-learnのSVMを使って、アヤメの品種を分類できるようになりました。花びらの長さや幅などの特徴量から品種を分類するということで、本格的に機械学習となってまいりました。

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

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

oregin-ai.hatenablog.com

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

oregin-ai.hatenablog.com

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

scikit-learnのSVMを使ってアヤメの品質を分類する。

1.全体像

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

import numpy as np
from sklearn.model_selection import train_test_split
from sklearn import datasets
from sklearn import svm,metrics

 

# (1)アヤメのデータを読み込む
X, y = datasets.load_iris(return_X_y=True)
print('全データ:',X.shape, y.shape)

 

#(2) 訓練データと検証データにデータを分ける
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.4,random_state=0)

print('訓練データ:',X_train.shape, y_train.shape)
print('検証データ:',X_test.shape, y_test.shape)

 

#(3) データを学習し、予測する
clf = svm.SVC()
clf.fit(X_train, y_train)
pred = clf.predict(X_test)

 

#(4) 正解率を求める
ac_score = metrics.accuracy_score(y_test, pred)
print('正解率:',ac_score) 

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

2.アヤメのデータを読み込む

scikit-learnには、分類や、回帰などの機械学習のサンプルデータとして、色々なデータが用意されています。

その中で、今回は、アヤメ(iris)のデータを使って品種を分類を実施します。

datasetsをimportしておいて、load_iris()メソッドを使う事で、データを取得できます。引数に、return_X_y=Trueを渡す事で、予測に使うデータと(説明変数X)と、分類のラベル(目的変数y)が取得できます。

X, y = datasets.load_iris(return_X_y=True)
print('全データ:',X.shape, y.shape)

3.訓練データと検証データにデータを分ける

scikit-learnには、データを学習用に使う訓練データと、学習したモデルの精度を測定するための検証データに分割するツールも用意されています。

今回は、sklearn.model_selectionから、train_test_splitをimport して、データを分割します。

train_test_split()メソッドは、説明変数Xと目的変数yを引数として渡して、test_sizeでテストデータの割合を指定して、分割を行います。

また、random_stateに固定の値を指定しておく事で、毎回同じ分割結果を得ることができます。

random_stateを指定しないと、実行毎に分割結果が変わるので、精度が上がった時に、データの分割具合がちょうどよくて精度が上がったのか、良いモデルができたので、精度が上がったのかがわからなくなるので、指定しておく必要があります。(再現性の確保とも呼ばれます。)

X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.4,random_state=0)

print('訓練データ:',X_train.shape, y_train.shape)
print('検証データ:',X_test.shape, y_test.shape)

4.データを学習し、予測する

 前回同様、scikit-learnからインポートしたsvmサポートベクターマシン)のモジュールから、SVC(Support Vector Classification)のクラスを呼び出して、サポートベクターマシンを使った分類ができるモデルの実体を作ります。

clf = svm.SVC()

モデルの実体ができたら、あとは、fit()メソッドを使って、訓練データ(X_train)と正解ラベル(y_train)を引数に渡して実行するだけで、学習は完了です。

clf.fit(X_train, y_train)

学習したモデル(clf)を使って、予測を行います。

予測についても学習と同様に簡単で、predict()メソッドに検証データ(X_test)を渡すことで、予測した結果を出力してくれます。

pred = clf.predict(X_test) 

5.正解率を求める

 予測した結果(pred)の正解率を算出します。

前回は、一個一個正解ラベルを比較して正解率を出しましたが、今回は、scikit-learnからmetricsモジュールをimportして、accuracy_score()メソッドを使って算出します。

accuracy_score()は、検証データの正解ラベル(y_test)と予測した結果(pred)を引数に渡す事で、予測した結果が正解ラベルと同じだった割合を算出してくれます。

ac_score = metrics.accuracy_score(y_test, pred)
print('正解率:',ac_score)

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

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

python3 iris-train.py

以下の通り、アヤメのデータを読み込んで、svm.SVC()を使って、品種を分類するモデルを作成することができました。

f:id:kanriyou_h004:20200516161625p:plain

図1.iris-train.py実行結果

約93%の正解率の予測モデルとなりました。

scikit-learnを使えば、ほとんど何も考えずに、93%の予測モデルを作成することができました。

実業務では、もっと複雑なので、これほどうまくいくことはないかも知れませんが、必ずしも100%の精度を求められるようなものでなければ、十分実用に耐えられるなぁと感じました。

 

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

 

 

 【過去記事】

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

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

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

oregin-ai.hatenablog.com 

 

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

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

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

g-kentei.hatenablog.com

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

 

 

 

 

 

scikit-learnのSVMを使った入門編としてXOR演算を学習させる(Pythonによるスクレイピング&機械学習テクニック)

今回は、scikit-learnのSVMを使って、入門編としてXOR演算を学習させました。ついに機械学習の章に入ってきて、テンションも上がります。最近実践中心だったので、基礎からもう一度学び直したいと思います。

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

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

oregin-ai.hatenablog.com

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

oregin-ai.hatenablog.com

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

scikit-learnのSVMを使ってXOR演算を学習させる。

1.scikit-learnとは何か

scikit-learnは、Pythonで提供されている機械学習フレームワークです。scikit-learnでは、機械学習用の様々なツールが用意してあり、教師あり学習の分類や回帰から、教師なし学習クラスタリングや次元削減まで、手軽に実施することができます。また、ツールだけでなく機械学習を試すためのサンプルデータも用意されているところが嬉しいです。

インストールされていない場合は、以下でインストールできます。

pip3 install scikit-learn

公式サイトは、以下にありますので、必要に応じご参照ください。

scikit-learn.org

2.全体像

では、入門編として、単純なXOR演算を学習するモデルを作成して行きます。

XOR演算は、図1.のように両方とも0または両方とも1の時は0を出力し、どちらか片方が0でもう片方が1の場合は1を出力する演算です。

これは、入力PとQの組み合わせにより、出力が1、0に分類される、分類問題と捉えることができます。

f:id:kanriyou_h004:20200510144243p:plain

図1.XOR演算

上記の入出力データを訓練データとして学習し、XORの処理が行えるモデルを構築します。

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

from sklearn import svm

 

# (1)XOR の演算結果(訓練データ)の作成
xor_data = [
    #P, Q, result
    [0, 0, 0],
    [0, 1, 1],
    [1, 0, 1],
    [1, 1, 0]
]

#(2)学習するためにデータとラベルに分割
data =
label =

for row in xor_data:
    p = row[0]
    q = row[1]
    r = row[2]
    data.append([p,q])
    label.append(r)

#(3)学習を実施
clf = svm.SVC()
clf.fit(data, label)

 

#(4)データを予測
pred = clf.predict(data)
print('予測結果:', pred)

 

#(5)予測結果がラベルと合っているか確認
ok = 0

total=0
for idx, answer in enumerate(label):
    p = pred[idx]
    if p == answer: ok += 1
    total +=1

print('正解率:', ok, '/', total, '=', ok/total) 

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

3.XOR の演算結果(訓練データ)の作成

XOR演算の結果を訓練データとして格納します。今回は、pandasを使わず、入力データと出力データの組み合わせを一つのリストとして、それぞれの組み合わせをさらにリストにする入れ子形式のリストを作成しています。

xor_data = [
    #P, Q, result
    [0, 0, 0],
    [0, 1, 1],
    [1, 0, 1],
    [1, 1, 0]
]

4.学習するためにデータとラベルに分割

先ほど作成したxor_dataを、学習用のデータと、正解のラベルに分割します。

最初からデータとラベルを分けていないのは、実際の業務や、kaggleなどのコンペでは、あらかじめ正解ラベルがあるわけではなく、一連のデータの中から、求める目的変数を特定して訓練データと正解ラベルに分ける処理が基本になるので、その処理も含めています。(実際はpandasで扱うので、for文を書くことはほとんど無いですが。)

今回の分割では、for文でxor_dataから、1行ずつ入出力の組み合わせを取り出して、入力データをdataに追加(append)、出力データをlabelに追加しています。

data =
label =

for row in xor_data:
    p = row[0]
    q = row[1]
    r = row[2]
    data.append([p,q])
    label.append(r)

5.学習を実施

まずは、scikit-learnからインポートしたsvm(サポートベクターマシン)のモジュールから、SVC(Support Vector Classification)のクラスを呼び出して、サポートベクターマシンを使った分類ができるモデルの実体を作ります。

サポートベクターマシンについては、改めて復習したいと思いますが、今回は、中身がわからなくても手軽に機械学習ができるというところがポイントなので割愛します。

clf = svm.SVC()

モデルの実体ができたら、あとは、fit()メソッドを使って、訓練データ(data)と正解ラベル(label)を引数に渡して実行するだけで、学習は完了です。

clf.fit(data, label) 

複雑なデータになると前処理や、特徴量分析などが必要になりますが、機械学習自体は、モデルの実体を作って、学習を実行するという処理で学習が完了できるのは、とても刺激的でした。(もちろん、精度を上げるためには、前処理や特徴量分析が大変になりますが…。) 

6.データを予測

 

では、早速、先ほど学習したモデル(clf)を使って、予測を行います。

予測についても学習と同様に簡単で、predict()メソッドに入力データを渡すことで、予測した結果を出力してくれます。

pred = clf.predict(data)
print('予測結果:', pred)

一見、学習時に、それぞれの入力に対する出力結果を記憶していただけのようにも見えますが、実際は、入力データから出力データを算出する処理が動いています。

7.予測結果がラベルと合っているか確認

先ほど予測した予測結果(pred)を順番に正解ラベル(label)と比較していきます。

まずは、正解数と、データの総数を格納する変数を初期化(0にする)します。

ok = 0
total=0

次に、正解ラベル(label)を一つずつanswerに取り出します。

この時、enumerate関数を使用して、idxに何番目のデータかの情報も格納します。

for idx, answer in enumerate(label):

同じidxの予測結果を取り出して、正解ラベル(answer)と同じであれば、正解数(ok)を1増やします。

    p = pred[idx]
    if p == answer: ok += 1

正解不正解に関わらず、データの総数は1増やします。

    total +=1

最後に、正解数と、データ総数と、正解数をデータ総数で割った正解率を出力します。

print('正解率:', ok, '/', total, '=', ok/total)  

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

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

python3 xor-train.py

以下の通り、XOR演算をsvm.SVC()を使って、学習、予測、出力することができました。

f:id:kanriyou_h004:20200510160040p:plain

図2.xor-train.py実行結果

結果としては、正解数4で、データ総数も4なので、100%の正解率とすることができました。

学生時代に、XORの処理をプログラミングする課題があり、中身を考えて順番に処理を工夫していました。

しかしながら、機械学習を使えば、こんなに簡単に正解率100%のモデルを作ることができました!

実際のモデル構築時は、ここまで単純なデータではないですし、予測したいデータは、正解ラベルの無いデータであることが多いので、こんなに簡単にはいかないですが、機械学習のメリットは十分に再確認できました。

 

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

 

 

 【過去記事】

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

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

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

oregin-ai.hatenablog.com 

 

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

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

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

g-kentei.hatenablog.com

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

 

 

 

 

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資格対策に使った参考書】

 

 

 

 

Ubuntu(20.04 LTS)をインストールしてPython(Anaconda)の開発環境を構築する

今回は、Ubuntu 20.04 LTSをインストールして、Python,Seleniumの開発環境を構築しました。

これまで、 Pythonによるスクレイピング&機械学習開発テクニック増補改訂 Scrapy、BeautifulSoup、scik [ クジラ飛行机 ]をDockerを利用して取り組んでいたのですが、毎回Dockerを立ち上げるのが面倒だったので、いっそのことUbuntuの端末を作ってしまおうと言う事で、OSのインストールから対応いたしました。

画面つきで復習していきたいと思います。

Ubuntu 20.04 LTS をインストールする。

1.Ubuntu 20.04 LTSとは何か

Ubuntuは、Linuxの中でも最近人気ディストリビューション(配布形態)です。

20.04は、2020年4月のバージョンを表しています。LTSはLong Term Supportの略で、2年間のサポートになります。

簡単にインストールできて、無償なので、長くサポートもあり、凄くありがたいOSです。

今回は、あまり複雑な設定等は抜きにして、基本的な機能を使うことを前提に、インストールしていきたいと思います。

2.Ubuntu 20.04 LTSのインストーラをダウンロードする。

Ubuntu20.04LTSのインストーラは、以下の公式サイトからダウンロードします。

jp.releases.ubuntu.com

このサイトの「ubuntu-20.04-desktop-amd64.iso」をダウンロードします。

インストーラのISOファイルがダウンロードできたら、

ISOファイルをDVDや、USBメモリにブート可能な形式で書き込みます。

書き込みに再しては、以下のサイト等を参考にしてください。

3.インストーラを起動する。

作成したDVD,USBメモリをパソコンにセットして、起動します。

パソコンによっては、BIOSの設定で起動する優先順位をDVDやUSBメモリを優先にしておく必要があります。

起動が始まると、以下の通りチェックが始まります。

f:id:kanriyou_h004:20200505151019p:plain

図1.起動画面

チェックが終わり、起動が完了すると、以下の画面が表示されます。

f:id:kanriyou_h004:20200505151622p:plain

図2.インストール画面(英語)

左側のリストをスクロールさせルト、一番下に「日本語」があるので、選択すると、インストール画面が日本語になります。

Ubuntuをインストール」を選択することで、インストールできます。

f:id:kanriyou_h004:20200505152551p:plain

図3.インストール画面(日本語)

4.キーボードの設定

利用するキーボードの設定を選びます。

日本語のキーボードを利用している場合は、左右のリストをどちらも、「Japanese」を選んで、「続ける」ボタンをクリックします。

f:id:kanriyou_h004:20200505153245p:plain

図4.キーボードレイアウト

5.アップデートと他のソフトウェアの設定

インストール方法と、インストール時にアップデートのダウンロード実施要否の確認画面が表示されます。

「通常のインストール」、「Ubuntuのインストール中にアップデートをダウンロードする」をそれぞれ選択します。

「最小インストール」を選択した場合は、ブラウザ(FireFox)はインストールされますが、LibreOfficeThunderbirdなどのソフトウェアがインストールされません。

また、商用のドライバ等のインストールが必要な場合は、「グラフィックスとWi-Fiハードウェアと追加のメディアフォーマットのサードパーティ製ソフトウェアをインストールする」も選択します。

 「続ける」ボタンをクリックします。

f:id:kanriyou_h004:20200505153455p:plain

図5.アップデートと他のソフトウェア

6.インストールの種類の設定

OSがインストールされていなければ、HDD,SSDにインストールするための画面が表示されます。

今回は、Ubuntu専用のパソコンにインストールするので、「ディスクを削除してUbuntuをインストール」を選択して、「インストール」ボタンをクリックします。

f:id:kanriyou_h004:20200505155417p:plain

図6.インストールの種類

「インストール」ボタンをクリックしてしばらくすると、図7.の確認ダイアログが表示されます。

問題なければ、「続ける」ボタンをクリックします。

f:id:kanriyou_h004:20200505155950p:plain

図7.ディスク変更確認ダイアログ

7.タイムゾーンの設定

次にタイムゾーンの設定画面が表示されます。

最初のインストールの時に「日本語」を選択していれば、「Tokyo」が自動的に選択されています。

問題なければ、「続ける」ボタンをクリックします。

変更する場合は、正しいエリアを選びます。

f:id:kanriyou_h004:20200505160305p:plain

図8.タイムゾーンの設定

8.ユーザ情報の設定

ユーザ情報の設定画面が表示されます。

名前、コンピュータ名、ユーザ名、パスワードを入力します。

パスワードは、強度がチェックされるので、英数字記号を織り交ぜて強いパスワードを設定します。

セキュリティを考慮して「ログイン時にパスワードを要求する」を選択して、「続ける」ボタンをクリックします。

f:id:kanriyou_h004:20200505170458p:plain

図9.ユーザ情報登録画面

ユーザ情報登録が完了するとインストールが始まり、以下の画面が表示されるので、しばらく待ちます。

f:id:kanriyou_h004:20200505171712p:plain

図10.インストール中画面

9.インストール完了

インストールが完了すると、再起動を促すダイアログが表示されます。

「今すぐ再起動する」ボタンをクリックします。

 

f:id:kanriyou_h004:20200505171758p:plain

図11.再起動確認ダイアログ

再起動後に、インストールDVD、インストールUSBメモリを取り出す催促のメッセージが表示された場合は、取り出した後にエンターキーを押します。

f:id:kanriyou_h004:20200505171842p:plain

図12.インストールメディア(DVD,USBメモリ)取り出し催促

10.ログイン

再起動が完了すると、先ほど登録したユーザで、ログインが求められます。

f:id:kanriyou_h004:20200505184042p:plain

図13.ユーザ選択画面

ユーザ名をクリックして、パスワードを入力することで、ログインできます。

f:id:kanriyou_h004:20200505184114p:plain

図14.パスワード入力画面

11.初期設定

Ubuntuにログインすると、「オンラインアカウントへの接続画面が表示されます。

各サービスを利用する場合は、選択して、各種設定を行います。

私は、特に利用しないので、右上の「スキップ」ボタンをクリックしました。

f:id:kanriyou_h004:20200505172244p:plain

図15.オンラインアカウントへの接続画面

次に「Livepatch」のセットアップページが表示されます。

「Livepath」は、OSのパッチなどを再起動なく利用するためのサービスですが、パソコンとして利用する場合、だいたい毎日再起動をするので、私はインストールせず右上の「次へ」ボタンをクリックしました。

f:id:kanriyou_h004:20200505172343p:plain

図16.Livepatchセッティング画面

次に、システムに関するデータや使用状況をCanonical社に送信するかどうかの設定画面が表示されます。

協力する場合は、「はい」のまま右上の「次へ」をクリックします。

f:id:kanriyou_h004:20200505172438p:plain

図17.改善支援設定画面


 

次に、プライバシー設定で、「位置情報サービス」のオン/オフが設定出来ます。

必要に応じてオンにして右上の「次へ」をクリックします。

f:id:kanriyou_h004:20200505172651p:plain

図18.プライバシー設定画面

12.準備完了

準備が完了しました画面が表示されたら、セットアップ完了です。

f:id:kanriyou_h004:20200505172747p:plain

図19.準備完了画面



Python + Anacondaの環境を整える。

1.Anacondaをダウンロードする。

Anacondaのインストーラは以下から入手します。

www.anaconda.com

 

デザインは変更になるかもしれませんが、「Download」ボタンをクリックします。

f:id:kanriyou_h004:20200505184920p:plain

図20.Anacondaダウンロードサイト

各OSごとのインストールファイルが表示されるので、Linuxのファイルをダウンロードします。

今回は、「Python 3.7 64-Bit (x86) Installer (522 MB)」をダウンロードしました。

 

f:id:kanriyou_h004:20200505185146p:plain

図21.ダウンロードファイルのリンク

2.Anacondaをインストールする。

保存されたフォルダに移動して、ターミナルから、インストールファイルを実行します。

bash ./Anaconda3-2020.02-Linux-x86_64.sh

f:id:kanriyou_h004:20200505202250p:plain

図22.Anacondaのインストールシェルを実行

続ける場合の確認のメッセージが表示されるので、エンターキーを押します。

f:id:kanriyou_h004:20200505202428p:plain

図23.確認メッセージ

ライセンス関連の諸々が表示されるので、同意できれば、「yes」を入力して、次に進みます。

f:id:kanriyou_h004:20200505202521p:plain

図24.ライセンスの確認

インストール先が表示されます。問題なければ、エンターキーを押して続けます。

f:id:kanriyou_h004:20200505202645p:plain

図25.インストール先の確認

Anacondaの初期化を実施するか確認されるので、「yes」で初期化します。

f:id:kanriyou_h004:20200505203058p:plain

図26.初期化の確認

初期化が完了すると、インストール完了の通知が表示されて、変更を有効にするには、シェルを閉じて再度開く旨のメッセージが表示されます。

f:id:kanriyou_h004:20200505203550p:plain

図27.インストール完了

3.Pythonを試してみる。

うまくインストールできているか、試してみます。

プロンプトで、以下を実行します。

python3

pythonが実行できるようになるので、以下を実行します。

print('Hello World')

無事、以下の通り実行できました。

f:id:kanriyou_h004:20200505204325p:plain

図28.Hellow Worldを実行

これで、Dockerを使わなくても、パソコンを立ち上げるだけで、Ubuntu上で、Pythonが使えるようになりました。

これからは、この環境を使って、Pythonによるスクレイピング&機械学習開発テクニック増補改訂 Scrapy、BeautifulSoup、scik [ クジラ飛行机 ]で、スクレイピング機械学習開発に取り組んでいきたいと思います。

 

 

 【過去記事】

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

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

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

oregin-ai.hatenablog.com 

 

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

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

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

g-kentei.hatenablog.com

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