学習コラム記事一覧へ

①pythonって?何ができる?

いろいろなところでAIが活用されており、建設業でも活用が模索され実際に使われてきています。

これからAIについて勉強したい方は、AIで使われているプログラム言語を先に学び始めることでしょう。

そんな中、どうやって学んでよいかわからない方は是非この記事を参考にしていってください。

 

本記事の内容

  • pythonについて
  • pythonが選ばれる理由
  • pythonでできること

 

今回は、AI開発に使われているpythonについて説明します。

これから勉強しようと思っている方が、pythonがどういったもので、どういうことができるかが理解できるように説明していきます。

 

pythonとは

pythonの記述はwikiとか色々ありますが、以下の特徴があります。

  • 人気ランキング上位
  • AI開発での必須言語
  • ライブラリが多い
  • Windows、LinuxなどOSの違いがあっても動作する

他にもいっぱいありますが、この記事を読まれる方も、これらが勉強始めようと動機付けになったのではないでしょうか?

ライブラリとは
プログラムの集合体で、自分でコードを書かなくても、誰かが書いてくれたコードを使うことができます。

そのため、難しい処理も数行で書くことができます。

python2と3について

pythonにはバージョンを大きく分けて、2と3があります。

2014年頃は対応したライブラリが少ないことから、2を使う傾向にありましたが、現状は3を選択して使用してください。

2は使う人が少なくなってきているバージョンなのであえて使う必要はありません。

python3では、2020年時点で、3.7や3.8がありますが、その時の新しいものを使用してください。

pythonのダウンロードページのStable Releaseのバージョンを選んでおくのが良いです。

なぜpythonが選ばれるのか

なぜpythonがここまで人気になったのでしょうか?

確実にAIの開発言語として使われていることがありますが、他にも多くのメリットがあります。

データ解析がしやすい

今まで、データのグラフかや解析にはどのようなソフト、ツールを使ってきたでしょうか?

Excel?JMP?MATLAB?

最近では、BI(Business Intelligence)ツールなども増えてきています。

MicrosoftのPower BIなどは無料で使えるのでなかなか有用です。

話が少しそれましたが、そんな中、最近ではpythonでのデータ解析ができることも注目を集めている1つです。

データ解析は後で詳しく説明しますが「見える化」「統計」「機械学習」などの処理が簡単にできます。

多数のライブラリがあり簡単に開発できる

pythonには色々なライブラリが用意されています。

ライブラリを使えば、普通に自分で最初からコードを書いていると途方もない時間がかかる若しくは、完成すらできないようなものが、あらかじめインストールするだけで、数行でやりたいことができるようになります。

下記がいくつか例になりますが、今後こんなことしたいなといった時に大抵は便利なライブラリに出会えることでしょう。

色々なライブラリ
機能 ライブラリ
画像処理 opencv、pillow
機械学習 scikit-learn
表データ pandas
行列演算 numpy
AI tensorflow、keras、pytorch
グラフ表示 matplotlib、seaborn
web操作 selenium、 beautiful soap

 

ユーザーが多いので検索で情報がすぐ手に入る

先ほどのライブラリが多いのもユーザーが多いから得られるメリットです。

さらにユーザーが多いので、困ったことがあれば本記事を見られている方のようにウェブで調べればすぐ解決しますし、本屋に行っても初学者から上級者までの本がたくさんあります。

また、最近はウェビナーと呼ばれる、ウェブ動画の講座が多くあります。

ウェビナーはYouTube、Udemy、Cousera、fastaiなど色々なところから出ています。

 

pythonでできること

pythonではいろいろなことができますので、いくつか紹介していきます。

できることの紹介なので、コードについて詳しい説明は省略させていただきます。

データの見える化

データの見える化は数字がいっぱい並んでいる状態ではなく、パッと見て何かが判断できるようにグラフ等にすることです。

pythonでは、エクセルやCSV、データベースなどのからデータを取得して、グラフにするまでは数行のコードでできます。

例えば、下記のコードでは3つのステップでグラフを描いて見える化をしています。

  1. ライブラリ読み込み
  2. CSVデータの読み込み
  3. グラフの表示
# ライブラリ読み込み
import seaborn as sns
import pandas as pd
# CSVデータ読み込み
iris = pd.read_csv('iris.csv')
# グラフ表示
lmplot = sns.lmplot(x='sepal_width', y='sepal_length', hue="species", data=iris)

 

下記のようなCSVデータを読み込んで「sepal_width」「sepal_length」をグラフにしているコードだと理解しておいてください。

このグラフから「species(品種)」ごとに「sepal_width」「sepal_length」に相関の関係がありそうだということがすぐわかりますね。

このように、数字が並んでいるだけではわかりにくいデータを何かしら判断しやすい形に見える化ができます。

 

データから統計、機械学習による解析

pythonでは簡単に統計、機械学習による解析ができるのも魅力の一つです。

簡単にタイタニックのデータから生存率の高いのはどういった人だったかという解析を機械学習を使ってやってみます。

タイタニックのデータがどういったものか見てみましょう。

# データの読み込み
import seaborn as sns
titanic = sns.load_dataset("titanic")
taitanic.head()

こういった表データは建設業関係なくどこ業界でも使うものだと思います。

このデータを機械学習の処理にかけて、どの因子が重要か機械に教えてもらいます。

「因子」としてますが、機械学習的には「特徴量」ですし、「要因」と置き換えても良いです。

まず、機械学習の処理ですが、使うデータの選択や、文字データを数値化する処理を入れて、機械学習の処理をしています。

# 前処理(適当に)
titanic = titanic.dropna()
titanic['sex'] = titanic['sex'].map({'male': 0, 'female': 1}).astype(int)
titanic['embarked'] = titanic['embarked'].map({'S': 0, 'C': 1, 'Q': 2}).astype(int)

# 処理するデータを選択
train_y = titanic['survived']
train_x = titanic[['pclass', 'sex', 'age', 'sibsp', 'fare', 'embarked']]

# 機械学習の学習処理
from sklearn.ensemble import RandomForestClassifier
clf = RandomForestClassifier(random_state=0)
clf = clf.fit(train_x, train_y)

次に、機械学習の結果から、重要な因子を見える化します。

# ライブラリ
import matplotlib.pyplot as plt
import numpy as np

# 機械学習の学習結果から寄与度の高い因子を抽出
features = train_x.columns
importances = clf.feature_importances_
indices = np.argsort(-importances) #降順

# グラフ化
X = range(len(indices))
Y = importances[indices]

plt.bar(X,Y)
plt.xticks(X, features[indices])
plt.show()

このコードで、出来上がるグラフが下記になります。

このように、そうなった原因が何であるかは機械の処理によって調べることができます

機械学習は、分類や予測などに使いますが、こういった因子を調べることにも使えます。

ディープラーニングを使ったAI開発

ディープラーニングは機械学習の1つですが、今の翻訳、画像処理などはディープラーニングの技術によって実現されています。

難しそうなディープラーニングも画像の分類などであれば、20行程度で済みます。

試しに、次の猫の画像をAIで判定させてみます。

コードは以下のステップで処理しています。

  1. 画像読み込み
  2. AIモデルを選択
  3. 読み込んだ画像を前処理
  4. AIで分類処理
  5. AIの分類結果表示

コードは今は理解する必要はなく、AIの処理がこのコード量で済むということがわかればやる気も出てくるのではないでしょうか?

コードはpytorchのドキュメントを参考にしています。

import torch
from torchvision import models, transforms

from PIL import Image

# 1.画像読み込み
input_image = Image.open('cat.jpg')

# 2.AIモデルの定義
model = models.vgg16(pretrained=True).eval()

# 3.入力画像の前処理 リサイズ、ノーマライズなど
preprocess = transforms.Compose([
    transforms.Resize(256),
    transforms.CenterCrop(224),
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),
])
input_tensor = preprocess(input_image)
input_batch = input_tensor.unsqueeze(0)

# 4.画像の分類処理
if torch.cuda.is_available():
    input_batch = input_batch.to('cuda')
    model.to('cuda')

with torch.no_grad():
    output = model(input_batch)
output = torch.nn.functional.softmax(output[0], dim=0)
output = output.to('cpu').detach().numpy().copy()
ind = np.argmax(output)

# 5.AIの分類結果の表示 urlからImageNetと呼ばれるデータの分類の種類のデータを取得して表示
import json
import urllib
url = "https://s3.amazonaws.com/deep-learning-models/image-models/imagenet_class_index.json"
res = urllib.request.urlopen(url)
class_index = json.loads(res.read().decode('utf-8'))

print(ind, class_index[f"{ind}"])

以下が処理結果です。「tabby=とら猫」であっていますね。

281 ['n02123045', 'tabby']

すでに、学習された猫とか車とかを認識するAIですが、自社製品などの判定に使うAIも学習させることができます。

ウェブ操作自動化

数年前からRPAという単語をよく耳にします。

人が日々繰り返しているパソコン業務をロボット(プログラム)でやってもらおうというものです。

当然ですが、プログラム言語であるpythonでも人の作業を置き換えるということはよくされます。

RPAの方が簡単にできるかもしれませんが、pythonやり方を覚えると無料でできるようになります。

ここでは、そのうちのウェブ操作の自動化について簡単に紹介しますので、興味を持っていただけたらなと思います。

普段ウェブはChrome、Safariなどのブラウザを利用すると思いますが、自動化する場合もブラウザを利用します。

今回は、ChromeDriverを使い、次のことを自動化してみようと思います。

  1. yahooを開く
  2. 「python」を入力
  3. 検索する

これくらいの作業でも毎日の繰り返すとなると自動化するのが良いでしょう!

コードは以下のようになります。

from selenium import webdriver
# yahooのURL
url = "https://www.yahoo.co.jp/"

# ブラウザでyahooを開く
chromeOptions = webdriver.ChromeOptions()
driver = webdriver.Chrome("resources/chromedriver_win32/chromedriver.exe", chrome_options=chromeOptions)
driver.get(url)

# 検索に「python」を入力
search_text = driver.find_element_by_xpath("/html/body/div/div/header/section[1]/div/form/fieldset/span/input")
search_text.send_keys("python")

# 検索ボタンを押す
login_button = driver.find_element_by_xpath("/html/body/div/div/header/section[1]/div/form/fieldset/span/button")
login_button.click()

# ウェイト
import time
time.sleep(10)

実行すると、Chromeが立ち上がって、「python」を検索してくれます。

検索だけではイメージがつきにくいかもしれませんが、他にも

  • 検索して決まった箇所のデータの取得
  • データのダウンロード、アップロード

などのウェブ操作が自動でできるようになります。

 

ウェブアプリケーションのバックエンド処理

ウェブアプリケーションのバックエンド処理というのは、いわゆるサーバーサイド側の処理です。

といっても、馴染みのない方にはわかりにくいですが、ウェブアプリケーションは「ユーザー側で操作する画面や処理」と「サーバー側のデータ検索などの処理」にわかれて動いています。

バックエンド側にpythonを使うこともできるので、AIの処理などをウェブアプリケーションに使うことができます。

 

ウィンドウアプリケーション開発

パソコン業務では皆さんが大抵このウィンドウアプリケーションを使うので、一番馴染みがあるアプリケーションになると思います。

pythonであれば、WindwosやLinux両方で動くウィンドウアプリケーションの開発が可能です。

ユーザーに使ってもらうときにはやはり、ボタンなどの操作画面があると受け入れてもらいやすいのではないでしょうか?

 

 

最後に

どうでしょう?

これからpythonを習得しようと思っている方が、pythonがどういったもので、何ができるかがわかったでしょうか?

どういったアプリを作りたいかがpythonを習得するための大事なモチベーションになるので、是非作りたいものをイメージながら、pythonの習得をしていってください。

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です