任务:
从api(应用程序编程接口)读取数据并存入mysql
了解stock_basic数据
Tushare是一个免费、开源的python财经数据接口包。主要实现对股票等金融数据从数据采集、清洗加工 到 数据存储的过程,能够为金融分析人员提供快速、整洁、和多样的便于分析的数据,为他们在数据获取方面极大地减轻工作量,使他们更加专注于策略和模型的研究与实现上。考虑到Python pandas包在金融量化分析中体现出的优势,Tushare返回的绝大部分的数据格式都是pandas DataFrame类型,非常便于用pandas/NumPy/Matplotlib进行数据分析和可视化
SQLAlchemy是Python中最有名的ORM工具。
关于ORM:全称Object Relational Mapping(对象关系映射)。
1.用tuple表示一行很难看出表的结构:
[
('1', 'Michael'),
('2', 'Bob'),
('3', 'Adam')
]
[('1', 'Michael'), ('2', 'Bob'), ('3', 'Adam')]
2.如果把一个tuple用class实例来表示,就可以更容易地看出表的结构来:
class User(object):
def __init__(self, id, name):
self.id = id
self.name = name
[
User('1', 'Michael'),
User('2', 'Bob'),
User('3', 'Adam')
]
[<__main__.User at 0x16a78af90d0>,
<__main__.User at 0x16a78af9220>,
<__main__.User at 0x16a78af9ee0>]
这就是传说中的ORM技术:Object-Relational Mapping,把关系数据库的表结构映射到对象上。
sqlalchemy包安装:
!pip install sqlalchemy
Requirement already satisfied: sqlalchemy in d:\anaconda3\lib\site-packages (1.3.18)
PyMySQL是在 Python3.x 版本中用于连接 MySQL 服务器的一个库。
pymysql包安装:
!pip install pymysql
Collecting pymysql
Downloading PyMySQL-1.0.2-py3-none-any.whl (43 kB)
Installing collected packages: pymysql
Successfully installed pymysql-1.0.2
import pymysql
pymysql.install_as_MySQLdb()
import pandas as pd
import tushare as ts
from sqlalchemy import create_engine
# 获取数据,获取到的数据是dataframe的形式
ts.set_token('your token') #设置接口,从tushare中粘贴过来
pro = ts.pro_api()
df = pro.stock_basic()
df.head()
ts_code | symbol | name | area | industry | market | list_date | |
---|---|---|---|---|---|---|---|
0 | 000001.SZ | 000001 | 平安银行 | 深圳 | 银行 | 主板 | 19910403 |
1 | 000002.SZ | 000002 | 万科A | 深圳 | 全国地产 | 主板 | 19910129 |
2 | 000004.SZ | 000004 | 国华网安 | 深圳 | 互联网 | 主板 | 19910114 |
3 | 000005.SZ | 000005 | 世纪星源 | 深圳 | 环境保护 | 主板 | 19901210 |
4 | 000006.SZ | 000006 | 深振业A | 深圳 | 区域地产 | 主板 | 19920427 |
在这之前要在mysql中创建一个数据库,名为tushare_test
username = 'root'
password = '000000'
# 把df存储到sql中
engine_ts = create_engine('mysql://' + username + ':'+ password + '@localhost/tushare_test')
上述的python连接数据库——create_engine和conn.cursor
res = df.to_sql('stock_basic', engine_ts, index=False, if_exists='append', chunksize=5000) #将dataframe用to_sql函数存储到数据库中
#参数依次为df储存到sql里面的表名、用户名和密码、不设置索引、如果存在此表就将其连接起来、每5000条分块
# 读取前20行数据
sql = """SELECT * FROM stock_basic LIMIT 20"""#写sql语句
df = pd.read_sql_query(sql, engine_ts) #读取sql的查询结果并赋给df,参数分别为sql语句、用户名密码
df.head()
ts_code | symbol | name | area | industry | market | list_date | |
---|---|---|---|---|---|---|---|
0 | 000001.SZ | 000001 | 平安银行 | 深圳 | 银行 | 主板 | 19910403 |
1 | 000002.SZ | 000002 | 万科A | 深圳 | 全国地产 | 主板 | 19910129 |
2 | 000004.SZ | 000004 | 国华网安 | 深圳 | 互联网 | 主板 | 19910114 |
3 | 000005.SZ | 000005 | 世纪星源 | 深圳 | 环境保护 | 主板 | 19901210 |
4 | 000006.SZ | 000006 | 深振业A | 深圳 | 区域地产 | 主板 | 19920427 |
了解到stock_basic数据的各列分别为索引、股票代码(如SZ是深圳交易所上交易的股票,SH是上海…)、股票代码、股票名称、所在地域、所属行业、市场类型、上市日期
cal_date:日历日期
is_open:是否交易 0休市 1交易
pretrade_date:上一个交易日
ts_code:TS代码
symbol:股票代码
name:股票名称
area:所在地域
industry:所属行业
fullname:股票全称
enname:英文全称
market:市场类型 (主板/中小板/创业板)
exchange:交易所代码
curr_type:交易货币
list_status:上市状态: L上市 D退市 P暂停上市
list_date:上市日期
delist_date:退市日期
is_hs:是否沪深港通标的,N否 H沪股通 S深股通
ts_code:股票代码
trade_date:交易日期
open:开盘价
high:最高价
low:最低价
close:收盘价
pre_close:昨日收盘价
change:涨跌额
pct_chg:涨跌幅
vol:成交量 (手)
amount:成交额 (千元)
turnover_rate:换手率
volume_ratio:量比
ts_code:股票代码
trade_date:交易日期
close:收盘价
open:开盘价
high:最高价
low:最低价
pre_close:昨日收盘价
change:涨跌额
pct_chg:涨跌幅
vol:成交量 (手)
amount:成交额 (千元)
想注册Tushare账号可以从我的连接进去嗷https://tushare.pro/register?reg=420604,这样我可以获得50积分嗷,谢谢支持啦!