ChatGPTによる生成AIが世間を騒がせておりPythonに興味が出てきました。
この記事の目次
Pythonとは
私がPythonに興味を持ったのは最近ですが、Python自体の歴史は案外古く1990年初頭に誕生したプログラミング言語です。
Python(パイソン)とは、インタープリタ型の高水準汎用プログラミング言語で、プログラミング言語の中ではかなり人気がある言語のひとつです。非営利団体であるPythonソフトウェア財団(PSF)を中心に開発されているオープンソースソフトウェア(OSS)なので誰でも無料で使用できます。
コードの読みやすさを追求した言語
「単純なものは複雑なものより優れている」という考え方で言語設計されており、コードを読みやすく、プログラムを簡単に書けるようにする事を目的に作られた言語です。
Pythonは読みやすさを高めるためブロック構造を表現する際にインデント(字下げ)を行うルールになっています。このインデントにより可読性が高まるので、プログラムの保守運用もしやすくなります。
文法がシンプルで、言語自体が定める予約語の数もかなり少ない部類に入ります。予約語とは、プログラムの命令を記述するために必要なキーワードの事です。その他のプログラミング言語では予約語が50以上ある場合もありますがPythonの予約語はたった「35」でかなり少ない部類に入ります。
Pythonで何ができるのか
AIの開発で注目を集めるPythonですが、AI以外にも様々な用途で活用することができます。
Excel自動化
Excelにデータを集めたりExcelレポートを更新したりできます。
以下のサンプルプログラムは、同一形式のCSVファイルを同一フォルダに格納しておく事でExcelへ一括マージするPythonのコードになります。
#-------------------------------------------------------------------------------# # 複数のCSVファイルを順番に読み込み縦方向に結合したデータをExcelに出力する処理 # # csv_to_excel.py # #-------------------------------------------------------------------------------# import pathlib # 事前にAnacondaなどを利用して import pandas as pd # 必要なパッケージをインストールしておく必要あり my_path = pathlib.Path(r'CSVファイルが格納されているフォルダの相対パス') df = pd.DataFrame() for p in my_path.glob('*.csv'): df_current = pd.read_csv(p) df = pd.concat([df, df_current], ignore_index=True) df.to_excel(r'相対パス\保存したいExcel名.xlsx')
ただし、利用しているPythonやPandasなどのライブラリのバージョンには注意が必要です。上記例ではPandas 1系では、Dataframeに新たな行を追加する関数としてpandas.DataFrame.append()が用意されていましたが、Pandas2系ではpandas.DataFrame.append()が削除されています。このため、append()の代わりにconcat()を使用しています。
このように使用するPythonやライブラリのバージョンによってはコードが動作しない事もあるので注意が必要です。逆に言えば、古い言語ですが、今も活発に改善が行われている証拠でもあります。
また、処理したいCSVファイルが特定の時間に出力される事が分かっていれば、以下のようなbatファイルを作成しておき、タスクスケジューラに登録しておくだけで全てが自動的に処理されるのでさらに便利かもしれません。
rem --- csv_to_excel.pyを実行するためのBATファイル(run.bat)--- @echo off @C:/~絶対パス~\python.exe csv_to_excel.py exit
スクレイピング
プログラムによってWebページからデータを収集することをスクレイピングと言います。このスクレイピングにより、手作業で行うには大変な業務や、日々の情報収集も手軽に簡単に行えるようになります。
一方、外部からのデータ収集を行う事になるので、著作権法等を遵守するだけでなく、文書や画像などを周期的に取得し、自動的にデータベース化するようなプログラム(いわゆるクローラ)を作る際には、過度なアクセスにならないよう特に気を付ける必要があります。
過去には、全く悪意がないと判断されたプログラムによるWebサイトへのアクセス行為によって逮捕者が出るという事件まで実際に起こっています。(岡崎市立中央図書館事件(Librahack事件) - Wikipedia)このため、Pythonに限らず、スクレイピングを行う際は普段以上に慎重にプログラムを作成する必要があります。
私自身の勉強も兼ねてですが、Web上に公開されている情報を参考にして、「指定したティッカー(証券コード)の株価データを指定期間分取得し、株価チャートと移動平均線を出力したグラフをExcelに出力」するPythonプログラムを作ってみました。具体的な設定値は以下の通りです。
- 株価情報の取得元:Yahoo!ファイナンス
- 株価情報を取得する企業:楽天
- ティッカー:4755.T
- 取得期間:過去6ヶ月間(半年分)
- 移動平均線:単純移動平均線(SMA)の方式で過去5日、25日、50日の移動平均
- Excelは「ティッカー名+_stock_data.xlsx」という形式で実行プログラムの直下フォルダに出力
以下のPythonコードはPythonのVersion3系で記述しています。このため、それ以外のVersionでは動作しない可能性があります。
import os import yfinance as yf from pandas_datareader import data import pandas as pd import matplotlib.pyplot as plt from openpyxl import Workbook from openpyxl.drawing.image import Image from openpyxl.utils.dataframe import dataframe_to_rows ticker = "4755.T" #楽天の証券コード ydata = yf.download(ticker, period="6mo", interval="1d") date = ydata.index price = ydata['Adj Close'] # 過去5日、25日、50日の移動平均を算出する為に定義 span01 = 5 span02 = 25 span03 = 50 # smaは単純移動平均の略称 ydata['sma01'] = price.rolling(window=span01).mean() ydata['sma02'] = price.rolling(window=span02).mean() ydata['sma03'] = price.rolling(window=span03).mean() # ----- 折れ線グラフを作成し、画像として保存 ----- # figsize = (表示する横のサイズ, 縦のサイズ) plt.figure(figsize=(10, 6)) #yfinanceから取得したydataをプロット #Figureをインスタンス化せずに、クイックにデータの中身を可視化する # plot(X軸, Y軸, label='凡例名') ydata['Close'].plot(label='Adj Close') plt.plot(date, ydata['sma01'], label=span01, color='#e84a5f') plt.plot(date, ydata['sma02'], label=span02, color='#ff847c') plt.plot(date, ydata['sma03'], label=span03, color='#feceab') # グラフのタイトル plt.title('Rakuten Stock Price') # X軸とY軸の名前 plt.xlabel('Date') plt.ylabel('Price') # 凡例を表示させる plt.legend() plt.savefig('graph.png') plt.close() # 新しいExcelワークブックを作成 wb = Workbook() # データフレームをExcelシートに書き出す ws1 = wb.active ws1.title = "Data" for r in dataframe_to_rows(ydata, index=True, header=True): ws1.append(r) # グラフ画像を新しいシートに追加 ws2 = wb.create_sheet(title="Graph") img = Image('graph.png') ws2.add_image(img, 'A1') # Excelファイルに保存 current_dir = os.path.dirname(os.path.abspath(__file__)) wb.save(os.path.join(current_dir, ticker+'_stock_data.xlsx'))
ティッカーに指定する企業や取得期間を変更したり、一定時間ごとにループ処理することで、Web上からデータを定期的に取得するクローリングを行うように変更する事も可能です。また、複数企業の情報を同時にクロールすることもできます。
QRコード生成
商品情報や書籍などのURLをまとめたりする際に便利なのがQRコードです。このQRコードを生成することができます。
PDFの編集
PDFはPortable Document Formatの略で実務でよく使用されるファイルフォーマットです。文書をAcrobat Readerなどで閲覧したり印刷したりと多くの方が利用されているかと思います。このPDFは閲覧は簡単にできますが、編集しようとすると思ったように出来ないこともあります。このPDFの編集をPythonで行うことが出来ます。
AIの開発にもPythonが使われる
Pythonは生成AIの開発にもよく使われていますが、Pythonの言語仕様自体がAIに向いているわけではありません。では何故AI開発でPythonを使うのでしょうか。
AIの中核処理自体はPythonでは書かれていない
AIの処理には膨大な処理が必要で、その処理を実装するプログラムにも高い処理性能を求められます。
Pythonはインタープリタ型の言語のためソースコードを逐次解釈しながら実行しています。このため実はプログラムの処理性能自体は低いのです。それでもPythonがAI開発に使われるのはAIの実装に必要なライブラリやフレームワークがPythonに充実しているからなんですね。コードが読みやすく、周辺の機能が充実していることが今もPythonが人気な理由なのでしょう。
このライブラリなどのAIの中核となる処理はPythonでは書かれておらず、C/C++言語などで実装されているため高速処理ができます。このAIの中核処理を行うライブラリやソフトウェアコンポーネント同士を結びつける用途にPythonを使うわけですね。こういう用途で使用するプログラミング言語のことをグルー言語 (英: glue language)と呼びます。
AIで用いられる開発ライブラリCUDAとNVIDIA社との関係
AI開発で用いられる開発ライブラリに、「CUDA」(クーダ)と呼ばれるライブラリがあります。CUDAは、NVIDIA社のGPUをグラフィック処理以外の汎用の計算用途に使えるようにするための、統合開発環境(コンパイラ等)とランタイムライブラリの集合です。CUDA環境では、GPUを使うプログラムの記述にC/C++言語を少しだけ拡張した記法で書く形となっています。
AI開発ではNVIDIA社が提供するCUDAライブラリとGPUを利用して開発されることが多く、NVIDIA社の独壇場となっています。このためNVIDIA社の株価が青天井で上昇しており、昨今のS&P500指標の上昇をけん引しているわけです。
Raspberry Piについて
出典:https://www.raspberrypi.com/news/introducing-raspberry-pi-5/
Raspberry Piは、2012年にイギリスで発売された最小型のコンピュータ基盤です。このRaspberry Piは子供たちの教育用途を意識して開発されたものですが、通常のパソコンとして使う、サーバーとして使う、機器に組み込むCPUボードとして使うなど、様々な用途で使えることで人気を博しました。
さらに2,500円~5,000円程度という手頃な価格で入手できることも人気の要因です。安価にコンピュータが手に入るということで発展途上国でのコンピュータ教育にも利用されているようです。
Raspberry PiにインストールできるOSはいくつかの種類がありますが、標準として推奨されているのはRaspbian(ラズビアン)というDebian系のLinuxをベースとしたOSです。このRaspbianはあらかじめプログラミング環境としてPythonがインストールされていますのでプログラミングを学ぶ上でも有用なコンピュータです。
Raspberry Piには電子回路を直接接続できるGPIO拡張コネクタが用意されていて、これをPythonのプログラムから制御できるので電子回路の制御からGUIインターフェースを利用した本格的なプログラミングまで行える非常に優れたコンピュータなのです。
余談ですが、ホリエモンが携わっている最先端の国産ロケット企業「インターステラテクノロジズ株式会社」でもRaspberry Piを利活用しているそうです。