Python+SQLで実現する作業の自動化|非技術者のための業務効率化 #1

f:id:lib-arts:20190127194618p:plain

ここ最近学校でのプログラミングの必修化などの話が進んでいるなど、今後の世の中においてはプログラミングスキルの重要性が益々増してくると思われます。反面、現状は技術職でもなければプログラミングどころかPCスキルがなくても問題ないとされています。
一方で、基本的なプログラミング知識があるかないかで業務効率が圧倒的に異なるということをご存知の方はどのくらいおられるでしょうか。実際に簡単なプログラミングがわかるかわからないかだけで大きく効率が変わります。
そのため当連載を通して、技術職ではない方向けへのIT・プログラミングについてお伝えしていければと思います。

基本的にはPython+SQLが技術者の方とのコミュニケーションが楽になるという意味で仕事の幅も広がるし、技術職への転身のハードルも下げれるしでコスパが良いのではと思いますので、Python+SQLを前提に話を進めていきたいと思います。

#1では業務効率化にあたっての基本的な考え方を抑えたのちに、PythonSQLの導入について取り扱えればと思います。
以下目次になります。

1. 業務効率化にあたっての視点
2. PythonMariaDBの導入
3. PyMySQLの導入、JupyterからMariaDBを使用する
4. まとめ


1. 業務効率化にあたっての視点
業務効率化については色々と考えられると思うのですが、業務効率化に際しての視点で思いついたものをいくつかまとめてみたいと思います。

A. 業務効率化とはルーチン作業を自動化すること
B. 業務効率化とは作業に頭のCPUを使わないようにすること
C. 学習コストが低いかつ、ツールが違っても汎用的な知見であること
D. ファイルの進捗(差分)管理と引き継ぎがしやすいこと

A.については単純作業の自動化を行うことで作業時間、作業量を減らせたら良いのではということで、挙げさせていただきました。B.については直接的に業務効率化という訳でもないようですが、可視化などでチェックなどにおける頭の稼働の負担を減らすことでミスを減らすことで業務効率化に繋げることができるのではないかと思います。C.は業務システムや社内ツールの使い方って結局学習コストかかったりエラーの度に作成者に聞かなきゃならなかったりで不便だし毎度の如く学習コストが発生してしまいます。D.は昔のバージョンでは動いていたのにうまくいかなくなって戻そうにも戻せないだったりワードやエクセルの履歴管理が複雑化して訳がわからなくなるといった経験がおありの方はわかると思うのですが、進捗管理や引き継ぎをしっかり行うのが大変難しいです。

これらの話ですが、PythonSQLを導入することで下記ができるようにしたい、というのがこの連載での目標になります。

A. 業務効率化とはルーチン作業を自動化すること
-> SQLPythonを用いて作業を自動化すると便利
B. 業務効率化とは作業に頭のCPUを使わないようにすること
-> 手作業を減らすことで、頭をなるべく使わないようにできる
C. 学習コストが低いかつ、ツールが違っても汎用的な知見であること
-> CUI系のツールは詳しい人間を見つけやすいし、一度覚えてしまえば新たな学習コストが低い。
D. ファイルの進捗(差分)管理と引き継ぎがしやすいこと
-> 管理に関してはオープンソースプロジェクトの管理方法を参考にできる

上記を達成できるように色々な知見をご紹介していければと思います。まず#1ではこの連載のメインとして使用するPythonSQL(MariaDB)のインストールや簡単な導入を行いましょう。


2. PythonMariaDBの導入

Pythonの導入(Anaconda)

PythonはAnacondaを導入で良いと思います。

上記サイトからAnacondaをインストールすることができます。個人的にはpyenv+virtualenv環境の方が自由度は高いのでこちらもおすすめですが、本連載の対象を超えるので使用したい方はご使用いただければと思います。2018年11月頃に確認した感じだとPythonのバージョンが3.7.0だとうまくいかないケースなどもあったので、Pythonのバージョンは3.6.xの方が安定しているかもしれません。


MariaDBの導入

 上記の記事で導入については解説していますのでこちらを確認ください。


3. PyMySQLの導入、JupyterからMariaDBを使用する

◆ PyMySQLの導入

LinuxMacの方
→ ターミナル(シェル)から『$pip install pymysql』でPyMySQLをインストールしてください。

Windowsの方
→ Anaconda Promptから『$pip install pymysql』でPyMySQLをインストールしてください。

 

◆ 動作確認(Jupyterの起動&動作確認)

LinuxMacの方
→ ターミナル(シェル)から『$jupyter notebook』でJupyterを起動してみてください。

Windowsの方
→ Anaconda Promptから『$jupyter notebook』でJupyterを起動してください。

f:id:lib-arts:20190127200639p:plain

起動ができると上記のような画面が立ち上げるので、NewからPython3を選択し、Jupyterのファイルを作成します。

f:id:lib-arts:20190127200810p:plain

起動したら上記を打つなどで、動作確認をしてみましょう。

 

◆ PyMySQLを利用したDBの動作確認

データを用意するのは大変なのでscikit-learnというライブラリのirisのデータセットを用いてテーブルの作成、データのインサート、テーブルの結合などの基本操作を実行してみましょう。

# モジュールのインポート
import pandas as pd
import pymysql
from sklearn.datasets import load_iris

 

# データの準備
iris = load_iris()
iris_data = pd.DataFrame(iris.data, columns=iris.feature_names)
iris_data["class"] = iris.target
iris_data.columns = ["sp_len", "sp_width", "pt_len", "pt_width", "class"]
iris_master = pd.DataFrame([[0,'setosa'],[1, 'versicolor'], [2, 'virginica']])
iris_master.columns = ["class", "kind_name"]

 

# データベースへの接続(参照記事で作成したデータベースsample1を利用)
connection = pymysql.connect(host='localhost',
            user='root',
            password='',
            db='sample1',
            cursorclass=pymysql.cursors.DictCursor)

 

# テーブルの作成 & データの挿入
try:
    with connection.cursor() as cursor:
        sql = "create table `iris_data` (sp_len int, sp_width int, pt_len int, pt_width int, class int)"
        cursor.execute(sql)
        sql = "create table `iris_master` (class int, kind_name varchar(20))"
        cursor.execute(sql)

        for i in range(iris_data.shape[0]):
            sql = "INSERT INTO `iris_data` (sp_len, sp_width, pt_len, pt_width, class) VALUES ({0},{1},{2},{3},{4});".format(int(iris_data["sp_len"][i]), int(iris_data["sp_width"][i]), int(iris_data["pt_len"][i]), int(iris_data["pt_width"][i]), iris_data["class"][i])
            cursor.execute(sql)
        for i in range(iris_master.shape[0]):
            sql = "INSERT INTO `iris_master` (class, kind_name) VALUES ({0}, '{1}');".format(iris_master["class"][i], iris_master["kind_name"][i])
            cursor.execute(sql)
    connection.commit()

except:
    print("Table Existed")
    pass

 

# マスタデータの取り出し
with connection.cursor() as cursor:
    sql = "SELECT * from iris_master;"
    cursor.execute(sql)
    result = cursor.fetchall()
    print(result)

上記を実行すると最終的に下記のような出力が確認できます。

f:id:lib-arts:20190127202455p:plain

上記が確認できたら#1の内容は一旦OKとします。ソースコードの補足は#2で行いたいと思います。


4. まとめ
#1では業務効率化にあたっての基本的な考え方や、本連載で取り扱うPython+MariaDBの導入について行いました。#2ではPythonSQLに関する簡単な演習、#3で今回のコードの解説を行ったのちに#4以降で業務効率化に関してまとめていければと思います!