こんにちは。GMOインターネットグループ株式会社の中村です。今回は、最近ベータ版が提供された【AI Programmer】を使って、出力された内容を極力変更せずにプログラミングをしていきます。
そもそも【AI Programmer】とは?
簡単に言うと、日本語でやりたいことを入力すると、任意のプログラミング言語で出力してくれるサービスです。
現在、プロトタイプとして無償公開されています。https://aiprogrammer.hashlab.jp/
どんなプログラムを書いてもらおうか…
簡単なメッセージをLine Notifyで通知するのを目標にしてみます。前回のSelenium記事などでも使うことが多かったので、今回はPythonを対象にしています。
https://developers.gmo.jp/15591/
https://developers.gmo.jp/19932/
https://developers.gmo.jp/19955/
とりあえず触ってみる
簡単に日本語でやってほしいことを書いていきましょう。下記を入力してコードを生成ボタンをクリック!
LineNotifyで通知する
自動で出力されていますね!では実際にこれのtoken部分を自分のものに置き換えて実行できるか試してみましょう。
LineNotifyで通知する
import requests
token = 'Your Token'
msg = 'Hello, LineNotify!'
line_notify = requests.post('https://notify-api.line.me/api/notify',
headers={'Authorization': 'Bearer ' + token},
data={'message': msg})
実行してみる
token部分だけ書き換えて実行してみました。正常に実行できていますね。ではさらに別の要素を足してみましょう。
他サイトから情報を取ってきてもらう
では次に、今日の福岡の天気を取得して出力してもらいましょう。
天気を出力する
お願いの仕方がよくありませんでした…天気情報をどこかのAPIで取得してもらうのが理想でしたが、これだと言葉が足りないようです…
もう少し試行錯誤してみます。
天気を出力する
print("天気を出力する")
ダメそう…
下記のような文言を色々試した見たのですが、結果が出力されず難しそうなので断念します…
明日の天気をAPIで取得して出力する 福岡の天気をAPIで取得して出力する 福岡の明日の天気をAPIで取得して出力する 明日の天気を取得して出力する
じゃあAPIとか使わないような処理だと?
外部から値を取得するのは出力されないパターンが多い気がするのでローカルでできる処理に切り替えてみます
csvを読み込んで最大値、最小値、平均値、中央値を出力する
こちらは動きそうなプログラムが出力されました。実際に動かしてみましょう。
csvを読み込んで1列目の最大値、最小値、平均値、中央値を出力する。
import csv
with open("sample.csv") as f:
reader = csv.reader(f)
header = next(reader)
col1 = [row[0] for row in reader]
print("最大値:", max(col1))
print("最小値:", min(col1))
print("平均値:", sum(col1)/len(col1))
print("中央値:", sorted(col1)[len(col1)//2])
下記のテスト用のcsvを同じディレクトリに配置しておきます。
title
0
1
2
3
4
5
6
7
8
9
10
出力がおかしい…?
早速実行してみましたがエラーになっています。csvの値を文字列で読み込んでいるのが駄目なようです。
命令記載時に"数値"でと具体的に付け加えればエラーが無くなりそうな気配がします。もう一度、下記でコードを生成してもらいます。
sample.csvを数値で読み込んで、1列目の最大値、最小値、平均値、中央値を出力する。
生成内容が変わりました。こちらで実行してみましょう。
sample.csvを数値で読み込んで、1列目の最大値、最小値、平均値、中央値を出力する。
import pandas as pd
df = pd.read_csv('sample.csv')
print(df.loc[:,0].max())
print(df.loc[:,0].min())
print(df.loc[:,0].mean())
print(df.loc[:,0].median())
やっぱりエラーになる
エラーが出てしまいました。どうやら使用している【df.loc】が本来は引数に列番号ではなく、ラベル名を指定するのが原因のようです。列番号を入力するのは【df.iloc】という別の関数があるので、こちらで実行してみましょう。
実行するスクリプトを下記に修正。
sample.csvを数値で読み込んで、1列目の最大値、最小値、平均値、中央値を出力する。
import pandas as pd
df = pd.read_csv('sample.csv')
print(df.iloc[:,0].max())
print(df.iloc[:,0].min())
print(df.iloc[:,0].mean())
print(df.iloc[:,0].median())
ようやく実行成功
実行成功しました。一発で望んだコードを生成してもらうのはかなり指示を具体的にしないと難しそうです。
具体的に指示してみる
下記のように具体的に記載してコードを生成して、望み通りのものが生成されるか試してみます。
sample.csvを数値で読み込んで、ilocを使って、1列目の最大値、最小値、平均値、中央値を出力する。
望み通りのものが生成されました。
sample.csvを数値で読み込んで、ilocを使って、1列目の最大値、最小値、平均値、中央値を出力する。
import pandas as pd
data = pd.read_csv('sample.csv')
print(data.iloc[:, 0].max())
print(data.iloc[:, 0].min())
print(data.iloc[:, 0].mean())
print(data.iloc[:, 0].median())
使ってみた所感
使ってみた所感は下記です。気軽に使えることもあり、今後にも期待です。
・メジャーどころでないとAPIを使うプログラムは難しそう。・やりたいことを具体的に書かないと望み通りのものは出力されない。・とりあえずこんなもの気になるなとかでヒントを探すとかにも使えそう。