
ãããŒã¿ã®éãæ¹è¬åº§ãPythonã§æ ªåŒæ å ±ãåéãMySQLã«ä¿å
ã¯ããã«
ããããã€
ãé«èЧããã ãããããšãããããŸã.
ãœãããŠã§ã¢ãšã³ãžãã¢ã®Kitaharaã§ã.
æ¬æ¥ã¯Pythonã䜿ã£ãæ ªåŒæ
å ±ã®åéæ¹æ³ã解説ããŸãïŒ
çè ãè¶£å³ã§ãã®æ¹æ³ã䜿ã£ãã³ãŒããã¬ã³ã¿ã«ãµãŒããŒã§èªåå®è¡ããŠãã, ããŒã¿ãéããŠããŸãã®ã§éåžžã«å®çšæ§ã®é«ãèšäºã«ãªã£ãŠããã®ã§ã¯ãªãããªãšæã£ãŠããŸã. Â
ãªã, æ¬èšäºã§å©çšãããµã€ããç¡å°œèµãã§ãã, æ²èŒã®ç¶ç¶æ§ã確çŽãããŠãããã®ã§ã¯ãããŸãã. ããããããäºæ¿ãã ãã.
æ ªåŒæ å ±ã®ãããã
æ ªåŒãååŸãããšäœãããã®ã
ä»åã®ããŒãã®æ ªåŒã§ãã, åéããŠã¿ãããšããæ¹ãå€ãã®ã§ã¯ãªãã§ããããïŒ
ã§ãã, æ ªåŒãã©ããªãã®ãç¥ããªãæ¹ãããã£ããããšæãã®ã§, ãŸãã¯æ ªåŒãäœãã玹ä»ããŠããæ ªåŒæ å ±ãåéããããšã®æçšæ§ã«ã€ããŠã話ããããŸã.
æ ªåŒã®å®çŸ©ã§ãã, SMBCæ¥è蚌åžã®ãµã€ãã«çšèªéããã, æ²èŒãããŠããŸããã®ã§åŒçšãããŠããã ããŸã.
æ ªåŒãšã¯ãæ ªåŒäŒç€Ÿãè³éãåºè³ããŠããã£ã人ã«å¯ŸããŠçºè¡ãã蚌åžã®ããšã§ãã
æ ªåŒã®çºè¡ã¯ããã®äŒæ¥ãäºæ¥ãè¡ãããã«å¿ èŠãªè³éãéããææ®µã®ã²ãšã€ã§ãäŸãã°äŒç€Ÿãå·¥å Žã建ãŠãŠè£œåãã€ããããåºãåºããŠè²©å£²ãããšãã£ãå Žåã«å¿ èŠãªè³éãéããéã«è¡ãããŸããæ ªåŒãçºè¡ããŠåŸãè³éã¯ãéè¡åå ¥ã瀟åµãçºè¡ããŠåŸãè³éãšã¯ç°ãªããè¿æžã®çŸ©åã¯ãããŸãããåºè³ããäººïŒæ ªäž»ïŒã¯ãéãè¿ã£ãŠããªã代ããã«ãä¿ææ ªåŒã®å²åã«å¿ããçµå¶åå ãã§ããå©çãåºããšãã«ã¯ä¿ææ ªåŒæ°ã«å¿ããŠé åœãããããŸãããŸããäŒæ¥ãæé·ãæ ªåŒã®äŸ¡å€ãäžãã£ããšãã«ã¯ããã®æ ªåŒã売åŽããŠå©çãåŸãããšãã§ããŸãã
ãã®çšèªéããåããéã, æé·ãããšæã£ãäŒç€Ÿã®æ ªåŒãè²·ã£ãŠãã®åŸäŒç€Ÿãæé·ãããšæ ªåŒã®å€æ®µãäžãã£ãŠå£²åŽçãåŸãããšãã§ããŸã. å€ãã®äººãæ ªåŒæ å ±ãåéããããšãªãçç±ã¯ããããæ ªåŒããŒã¿ã䜿ã£ãŠåæãã, é«éš°ããããªæ ªãèŠã€ãããããã§ã¯ãªãã§ãããã?
==================================================
æ ªåŒæ å ±ãã¹ã¯ã¬ã€ãã³ã°ã§ååŸããã®ã¯é£ãã
ããããªãã, çŸå𿥿¬ã«ãããŠæ ªåŒæ
å ±ãååŸããããšã¯é£ããã§ã.
ãã®çç±ã¯å€ãã®èšŒåžäŒç€Ÿã»æ ªåŒæ
å ±ãµã€ãã§ã¹ã¯ã¬ã€ãã³ã°ãçŠæ¢ãããŠããããã§ã.
äŸãã°Yahooãã¡ã€ãã³ã¹ã§ã¯ä»¥äžã®ããã«èšèŒããããŠããŸã.
Yahoo!ãã¡ã€ãã³ã¹ã§ã¯ãYahoo!ãã¡ã€ãã³ã¹ã«æ²èŒããŠããæ ªäŸ¡ããã®ä»ã®ããŒã¿ããããã°ã©ã çãçšããŠæ©æ¢°çã«ååŸããè¡çºïŒã¹ã¯ã¬ã€ãã³ã°çïŒã«ã€ããŠãã·ã¹ãã ã«é床ã®è² è·ãããããå®å®ãããµãŒãã¹æäŸã«æ¯éããããæããããããšããçŠæ¢ããŠããŸãã
ãŸããYahoo!ãã¡ã€ãã³ã¹ã«æ²èŒããæ å ±ã®èäœæš©ãã®ä»äžåã®æš©å©ã¯ãã€ããŒæ ªåŒäŒç€Ÿãæ å ±æäŸè ãŸãã¯ãã®ä»ã®æš©å©è ã«åž°å±ããŸãã
åœè©²æ²èŒæ å ±ã®è»¢çšãè€è£œããã³å€éšé ä¿¡ãªãã³ã«è²©å£²ãå«ãåçšå©çšçã®äžåãåºãçŠããŠããŸãã
æ ªäŸ¡ããŒã¿ã®ããŠã³ããŒããå©çšãããå Žåã¯ããVIPå¶æ¥œéšãã®ãæç³»åããŒã¿ããŠã³ããŒããããå©çšãã ããã
çç±ã¯ããã«æžãããŠããéã, ã·ã¹ãã ã«è² è·ããããããã§ã.
æ ªåŒæ
å ±ãæ¬²ãã人(ç¹ã«ãªã¢ã«ã¿ã€ã )ã ãš1ç§éã«äœåããªã¯ãšã¹ããéãããšãæ³å®ãããŸãã®ã§, è² è·ãããã£ãŠããŸãã®ã§ã.
ãã®ãã, ä»ã®ãµã€ãã§ãã¹ã¯ã¬ã€ãã³ã°ãçŠæ¢ãããŠããããšãå€ãã§ã.
è£è¶³ã§ãã, ãããã倧éã®ãªã¯ãšã¹ãã«ãã£ãŠã«ãã£ãŠãµãŒããŒã«è² è·ããããããšèªäœè¿·æè¡çº(Dosæ»æãšã¿ãªãããããšããããŸã)ã§ãã®ã§ãããªãããã«æ°ãä»ããã¹ãã§ã. ãããªã¯ãšã¹ããäœåãæããããšã«ãªãå Žåã¯å°çšã®ã¢ãžã¥ãŒã«çã§æéããããããã«èª¿æŽã, ãµã€ãå¶äœè æ§ã«è¿·æããããªãããã«ããŸããã.
ãªã, ä»åå©çšããç¡å°œèµã«é¢ããŠã¯èŠçŽäžåé¡ããªã, ãã€ãªã¯ãšã¹ãã®åæ°ãäžæ¥äžåã§æžãã®ã§ãµã€ãå¶äœè æ§ã«è¿·æããããããšã¯ãªãã§ã.
==================================================
APIãå©çšããŠãåãåé¡ãçºçãã
äžèšã§èª¬æããã¹ã¯ã¬ã€ãã³ã°ä»¥å€ã«ãæã¯å®ã¯ãããŸã.
ä»ã®èšäºã§ã玹ä»ããŠããAPI(Application Programming Interface)ãå©çšããããšã§ã.
ã§ãã, ãã¡ããâ»APIã®ãªã¯ãšã¹ãã®å¶éããã£ããããã®ã§ã¹ã¯ã¬ã€ãã³ã°ãšåãåé¡ã«çŽé¢ããããšã«ãªããŸã.
==================================================
ã©ã®ããã«ããŠååŸããã®ã
ä»åã¯ä»¥äžã®æµãã§ããŒã¿ãååŸã, ä¿åããŸã.
(1) ãµã€ãç¡å°œèµããåœæ¥ã®ããŒã¿ãzipãã¡ã€ã«ã§ååŸ
(2) zipãã¡ã€ã«ãè§£åã, CSVãã¡ã€ã«ãå¥ãã£ã¬ã¯ããªã«ä¿å
(3) zipãã¡ã€ã«ãåé€
(4) ããŒã¿ãMySQLã«æ ŒçŽ
(5) csvãã¡ã€ã«ãåé€
ç¡å°œèµã®ç¹åŸŽãšããŠããŒã¿ãCSVãã¡ã€ã«ã§é åžããŠãããšããããšããããŸã. CSVãã¡ã€ã«ã®ååŸã«ã¯äžåã®ãªã¯ãšã¹ãã§æžãããã§ãããå®è¡æéãçãã§ã.
䜿çšãããã®ã®èª¬æ
è²ã ãªããŒã¿ãæ²èŒããŠããããŒã¿ãµã€ã
CSVãã¡ã€ã«åœ¢åŒã§åœæ¥ã®æ ªäŸ¡ããŒã¿ãååŸããããšãã§ããŸã
管ç人ã«ãããšããŒã¿ã®æŽæ°ã確çŽãããŠããããã§ã¯ãªãã§ã
Python
ããã°ã©ãã³ã°èšèªã®ã²ãšã€ã§ã.
å宣èšçãç¡ã, åå¿è ã«ãæ±ããããèšèªã ãšèšãããŠããŸã
è¿å¹ŽDeep Learningã®ã©ã€ãã©ãªãè±å¯ã§ããããšããæ³šç®ãéããŠãã人æ°ã®èšèªã§ã
MySQL
ãªã©ã¯ã«ç€Ÿã«ãã£ãŠéçºãããŠããSQLããŒã¿ããŒã¹ç®¡çã·ã¹ãã
SQLã®ããŒã¿ããŒã¹ç®¡çã·ã¹ãã ã®äžã§ãæ ¹åŒ·ã人æ°ãèªã£ãŠããŸã
noteã§ãããããã®èšäºãæžãããŠããŸã
èšèªã®ããŒãžã§ã³ãšå®æå³
åèšèªã®ããŒãžã§ã³
䜿ãèšèªã¯Python3ãšMySQLã§ã.
ãªã, 絶察ã«ãã®ããŒãžã§ã³ãããªããšåããªããšããããã§ã¯ãªãã§ã. ãäºæ¿ãã ãã.
ãŸã, çè
ã¯cmdã§äœããŸããã, Ubuntuã§ãåãããã«äœããŸã
(venvã®ããšã®ã¢ã¯ãã£ããŒã·ã§ã³ãsource env/bin/activateã«ãªãã ãã§ã)
# MySQLã®ããŒãžã§ã³ã確èªãã
mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.23 |
+-----------+
1 row in set (0.00 sec)# Pythonã®ããŒãžã§ã³ã確èªãã
(env) C:\Training\Kabu>python --version
Python 3.10.0ä»åäœããã®ã®å®æå³
.
âââ csv
âââ env
â âââ Include
â âââ Lib
â âââ Scripts
â âââ pyvenv.cfg
âââ main.py
âââ tmpç°å¢æ§ç¯
Pythonã®ä»®æ³ç°å¢ãäœã
ãŸãã¯Pythonã®ä»®æ³ç°å¢ãäœæããŸã.
ä»®æ³ç°å¢ãäœæããããšã§ããŒã«ã«ã«ã€ã³ã¹ããŒã«ãããPythonã®ã©ã€ãã©ãªã®åœ±é¿ãé¿ããããšãã§ããã®ã§éçºãããããªããŸã.
ãŸãé©åœãªéçºçšã®ãã£ã¬ã¯ããªã«ç§»åããŠãã ãã.
# éçºçšã®ãã£ã¬ã¯ããªã«ç§»å
cd YOUR_PROJECT_DIR
# ä»®æ³ç°å¢ãäœæãã
python -m venv envä»®æ³ç°å¢ãã§ãããã¢ã¯ãã£ããŒãããŠãããŸããã.
ä»®æ³ç°å¢ãç«ã¡äžãããšç°å¢åãcmdã®ç»é¢ã®å·ŠåŽã«()ä»ã衚瀺ãããŸã.
# ä»®æ³ç°å¢ãã¢ã¯ãã£ããŒã
.\env\Scripts\activate.bat
# Linuxã®å Žåã¯source enb/bin/activateMySQLã®ããŒã¿ããŒã¹ã»ããŒãã«ãäœæããŠãã
å©çšããããŒã¿ããŒã¹ãšããŒãã«ãäœæããŠãããŸããã
# ããŒã¿ããŒã¹ãäœæãã
>mysql CREATE DATABASE YOUR_DATABASE_NAME
# ããŒãã«ãäœæãã
mysql> create table YOUR_DATABASE_NAME.stocks (
id int AUTO_INCREMENT not null PRIMARY KEY,
date date not null,
stock_name varchar(50) not null,
stock_code int not null,
open float not null,
high float not null,
low float not null,
close float not null,
volume float not null,
market varchar(10) not null
);äžæ¬¡çã«ãã¡ã€ã«ãä¿åãããã£ã¬ã¯ããªãäœæãã
æ ªããŒã¿ãzipãã¡ã€ã«ã§ååŸã, csvãã¡ã€ã«ãåãåºããšããäœæ¥ãããã®ã§äžæçã«ãã¡ã€ã«ãå ¥ããŠãããã£ã¬ã¯ããªãäœæããŠãããŸããã.
ãŸã, ãã®åŸäœ¿çšããã®ã§main.pyãäœæããŠãããŠãã ãã.
.
âââ csv # ãã®ãã¡ã€ã«ãäœã
âââ env
â âââ Include
â âââ Lib
â âââ Scripts
â âââ pyvenv.cfg
âââ main.py
âââ tmp # ãã®ãã¡ã€ã«ãäœã以äžã§ç°å¢æ§ç¯ã¯çµäºã§ã.
ãç²ãæ§ã§ãã.
æ ªåŒããŒã¿ãååŸ
éçºçšã®ãã£ã¬ã¯ããªçŽäžã«main.pyãäœæããŠãã ãã
# main.py
# 䜿çšããã¢ãžã¥ãŒã«ã®import
# PyMySQLã¯ãããããpip installããŠãã ãã
import urllib.error
import urllib.request
import zipfile
import os
import datetime
import csv
import pymysql.cursorsã€ã³ããŒããçµãã£ããç¡å°œèµããæ ªåŒããŒã¿ãããŠã³ããŒããããã¡ã€ã«ãäœæããŠãããŸããã.
ããŠã³ããŒãããã«ã¯ãŸã, URLã®æå®ãããå¿
èŠããããŸã.
ç¡å°œèµã®URLã¯
year: 幎
month: æ(åžžã«2æ¡)
day: æ¥ä»(åžžã«2æ¡)
year_last_tow_digits: yearã®äžäºæ¡
ãšãããšãã«
"http://mujinzou.com/d_data/"+year+"d/"+year_last_two_digits+"_"+month+"d/T"+year_last_two_digits+month+day+".zip"ãšãªã£ãŠããŸãã®ã§å çšæããåã€ã®ãã©ã¡ãŒã¿ãdatetime.datetime.now()ããå å·¥ããŠäœæããŸã.
ããšã¯ã³ãŒãã远ã£ãŠããã°çè§£ã§ãããã®ã ãšãããããŸãã, æåŸã«returnãèšå®ããŠããããšã«æ³šæããŠãã ãã. ããã¯ããŒã¿ãç»é²ããããã®é¢æ°ã§è©²åœããCSVãã¡ã€ã«ã䜿çšããããã«returnããŠããŸã.
以äžãã³ãŒãã§ã.
# main.py
def download_kabu_data():
# ããŠã³ããŒãã§äœ¿ãæ¥ä»ããŒã¿ãååŸã䜿ããã®ãstråã§ãŸãšãã
# year: 幎, mondth: æ(åžžã«2æ¡), day: æ¥ä»(åžžã«2æ¡), year_last_tow_digits: yearã®äžäºæ¡
datetime_data = datetime.datetime.now()
year = datetime_data.year
year_last_two_digits = str(year)[2:]
month = datetime_data.strftime('%m')
day = datetime_data.strftime('%d')
file_url = "http://mujinzou.com/d_data/"+str(year)+"d/"+\
year_last_two_digits+"_"+month+"d/T"+year_last_two_digits+month+day+".zip"
save_path = "./tmp/download.zip"
# file_urlããsave_pathã«zipãã¡ã€ã«ãããŠã³ããŒã
try:
with urllib.request.urlopen(file_url) as download_file:
data = download_file.read()
with open(save_path, mode='wb') as save_file:
save_file.write(data)
except urllib.error.URLError as e:
print(e)
# zipãã¡ã€ã«ã®äžèº«ã./csv/ã«å±é
with zipfile.ZipFile("./tmp/download.zip") as obj_zip:
# zipããæå®ãã¡ã€ã«ïŒç¬¬1åŒæ°ïŒãååŸããŠãæå®ãã£ã¬ã¯ããªïŒç¬¬2åŒæ°ïŒã«ä¿åãã
obj_zip.extract("T"+year_last_two_digits+month+day+".csv", "./csv/")
# ããŠã³ããŒããããã¡ã€ã«ãåé€
os.remove('tmp/download.zip')
return "csv/"+"T"+year_last_two_digits+month+day+".csv"次ã«ããŒã¿ãç»é²ããŠãããŸã.
csvãã¡ã€ã«ã®èªã¿èŸŒã¿ã§ããšcsv.readerã䜿ãã»ãã«pandas.read_csv()ã䜿ããšããæããããŸãã, csvã®æ¹ãç°¡æœã«æžããã®ã§ãã¡ããæ¡çšããŸãã.
äœ¿ãæ¹ã¯ç°¡åã§foræ(ä»ã®èšèªã§ããforeachæ)ã«å ¥ãããšäžè¡ããšã«ãªã¹ããšããŠååŸã§ããŸãã®ã§, ããããããŒã¿ãä¿åãã圢ã«ããŠ, MySQLã«æ¥ç¶ããã ãã§ã.
connectionã®èšå®ããŒã¿ã¯ãç°å¢æ§ç¯ãã®ç« ã§äœã£ããã®ãåèªã§å ¥ããŠãã ãã.
def registerate_kabu_data(file_path):
with open(file_path) as f:
reader = csv.reader(f)
# ã«ãŒãåæ°ïŒçŽ4000å
for row in reader:
date = row[0].replace('/','-')
stock_code = int(row[1])
stock_name = row[3][4:].replace('\u3000','')
open_data = float(row[4])
high = float(row[5])
low = float(row[6])
close = float(row[7])
volume = float(row[8])
market = row[9]
# ããŒã¿ããŒã¹ã«æ¥ç¶
connection = pymysql.connect(host='localhost',
user='YOUR_USER_NAME',
password='YOUR_MYSQL_PASSWORD',
db='YOUR_DATABASE',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor)
try:
with connection.cursor() as cursor:
sql = "INSERT INTO your_table (date, stock_name, stock_code, open, high, low, close, volume, market) VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s);"
cursor.execute(sql, (date, stock_name, stock_code, open_data, high, low, close, volume, market))
connection.commit()
finally:
connection.close()
# csvãã¡ã€ã«ãåé€
os.remove(file_path)æåŸã«ãã¡ã€ã«ãåŒã³åºãããšãã«å®è¡ãããã³ãŒããæžããŸã
if __name__ == '__main__':
file_path = download_kabu_data()
registerate_kabu_data(file_path)MySQLã§äžæããã£ãŠããã確èªããŸããã
mysql> use YOUR_DATABASE
mysql> select * from your_tableãããã«
ä»åã¯PythonãšMySQLã䜿ã£ãŠæ ªåŒæ å ±ãååŸãä¿åããæ¹æ³ã解説ããŸããïŒåèã«ãªã£ããšããæ¹ã¯ãã²ããŒããã¿ã³ãæŒããŠãã£ãŠãã ããïŒ
ããæ°ãåºãŸãïŒ
åé ã«ããããŸããã, ç§ã¯ãã®æ¹æ³ã§ããŒã¿ãéããããš, PHPãšJavaScriptã§å¯èŠåããŠããŸã. èå³ã®ãã人ãå€ããã°ãã¡ããèšäºã«ãããããšããã£ãŠãããŸãã®ã§, æ¯éãææ³ãåŸ ã¡ããŠãããŸã.
èšäºå ã§äžæãªç¹çããããŸãããæ°è»œã«ãé£çµ¡ãã ãã.
Twitter:Â @kitahara_dev
email:Â kitahara.main1@gmail.com
è£è¶³
â»ãã€ããŠããéšåã«é¢ãã解説ã§ã
APIã®ãªã¯ãšã¹ãå¶é
æ ªåŒã®APIã«éãã, å€ãã®ç¡æã®APIã«ã¯ãªã¯ãšã¹ãåæ°ã®å¶éããããŸã. 300å/1h ãšãããããªã€ã¡ãŒãžã§ã.
ãªã¯ãšã¹ãå¶éãè¶ ãããšãªã¯ãšã¹ããåãåãããšãã§ããŸãã.
ãªã®ã§, æ ªåŒæ å ±ã®ãããªäœååãšãªã¯ãšã¹ããéãå¿ èŠã®ããå Žåã¯äºåã«ãã®ãããªãªã¯ãšã¹ãå¶éããããã©ããã確èªããå¿ èŠããããŸã.