mysql+tushare搭建本地數據庫

?創建股票數據庫


#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Date    : 2018-09-04 14:34:59
# @Author  : Michael Li 
# @Version : $V2.0$import pandas as pd
import numpy as np
import datetime
import random
import pymssql
from sqlalchemy import create_engine
import tushare as ts
import logging
from time import sleep
from queue import LifoQueue
import threading
#以上是需要使用的Python包,沒有安裝的請pip install XXXXclass stock(object):"""get stock information"""def __init__(self):self.host = '127.0.0.1'self.user = 'sa'self.password = 'test'self.port = 3306 #端口self.database = 'stock'self.Daily_tableName = 'daily'self.Daily_basic_tableName = 'daily_basic'#開始和結束時間僅用于獲取區間數據,代碼中有用于獲取當前日期的函數。self.startTime = '20100101' #開始時間self.endTime = datetime.datetime.now().strftime('%Y%m%d') #結束時間#以下為兩個隊列,用于支撐多線程。self.ts_code_queue = LifoQueue()  #ts_code隊列,用于獲取指定代碼的股票信息。self.trade_cal_queue = LifoQueue() #trade_cal交易日期隊列,用于獲取指定時間的股票信息。ts.set_token('')self.pro = ts.pro_api()def log(self):''' 日志功能函數'''logger = logging.getLogger()logger.setLevel(logging.INFO)handler = logging.FileHandler(r'D:/abc.log', encoding='utf-8')# handlerStream = logging.StreamHandler()formatter = logging.Formatter("%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s")handler.setFormatter(formatter)logger.addHandler(handler)# logger.addHandler(handlerStream)logging.info('開始獲取%s的數據' % (self.getDatetime()))def insertMysql(self, tableName, data):conn = pymssql.connect(host = '.',user ='sa',password = 'test',database = 'stock',charset ='utf8')'''創建數據庫連接,需要先在數據庫中建立相應的表和表結構'''engine = create_engine('mssql+pymssql://%s:%s@%s/%s' % (self.user, self.password, self.host, self.database))'''將獲取到的數據插入到數據庫中,if_exists=append為向后添加,index=False為不保存DF自動生成的index'''data.to_sql(tableName,con = engine,if_exists='append', index=False)def getDatetime(self):'''獲取當天日期的函數 '''taday = datetime.datetime.now().strftime('%Y%m%d')return tadaydef getTrade_cal(self):# 獲取各大交易所交易日歷數據,默認提取的是上交所(注意start_date和end_date的值,獲取周期數據可使用self.startTime和self.endTime)#官方文檔:https://tushare.pro/document/2?doc_id=26trade_cal = self.pro.query('trade_cal', exchange='SZSE', start_date=self.startTime,end_date=self.endTime, is_open=1)#將日期列轉換為list,便于使用隊列trade_cals = trade_cal['cal_date'].tolist()#循環將每個交易日塞進隊列中for trade_cal in trade_cals:self.trade_cal_queue.put(trade_cal, True, 2)logging.info('Trade_cal 隊列中共計:%s 條信息' % (self.trade_cal_queue.qsize()))def getList(self):'''獲取獲取基礎信息數據,包括股票代碼、名稱、上市日期、退市日期等'''stock_basic = self.pro.query('stock_basic', exchange_id='', is_hs='N',fields='ts_code,symbol,name,fullname,list_date,list_status')stock_basic.set_index('ts_code', inplace=True)for ts_code in stock_basic.index.tolist()[0:20]:self.ts_code_queue.put(ts_code, True, 2)logging.info('共計%s條數據' % (self.ts_code_queue.qsize()))#備注:此函數不是經常使用。def getDaily_code(self):'''獲取指定股票代碼的數據'''print('子線程(%s)啟動' % (threading.current_thread().name))while not self.ts_code_queue.empty():#訪問隊列,隊列為空時退出。code = self.ts_code_queue.get(True, 3)#使用tushare獲取(code是從隊列中取出的ts_code)#Tushare  官方文檔:https://tushare.pro/document/2?doc_id=27daily = self.pro.query('daily', ts_code=code,start_date=self.startTime, end_date=self.endTime)daily['trade_date'] = pd.to_datetime(daily['trade_date'], format='%Y-%m-%d')#將獲取到的數據保存至數據庫self.insertMysql(self.Daily_tableName, daily)# print(code)sleep(random.randint(1, 2))logging.info('------>%s的getDaily_code數據全部搞定<------' %(self.getDatetime()))def getDaily_date(self):'''獲指定日期或日期范圍的股票數據'''logging.info('線程(%s)啟動' % (threading.current_thread().name))while not self.trade_cal_queue.empty():#隊列功能同上個函數date = self.trade_cal_queue.get(True, 2)#使用tushare獲取(date是從隊列中取出的日期)#Tushare 官方文檔:https://tushare.pro/document/2?doc_id=27daily = self.pro.query('daily', start_date=date)daily['trade_date'] = pd.to_datetime(daily['trade_date'], format='%Y-%m-%d')self.insertMysql(self.Daily_tableName, daily)logging.info('--> %s 的數據共計:%s 條 <--' %(date, len(daily)))sleep(random.randint(1, 2))logging.info('線程(%s)結束' % (threading.current_thread().name))def getDaily_basic(self):'''獲取Daily_basic數據'''#Tushare 官方文檔:https://tushare.pro/document/2?doc_id=32daily_basic = self.pro.query('daily_basic', ts_code='002427',trade_date=self.getDatetime())#簡單的數據清洗,將空值填充為0daily_basic = daily_basic.fillna(0)self.insertMysql(self.Daily_basic_tableName, daily_basic)logging.info('------>%s的Daily_basic的數據搞定<------' %(self.getDatetime()))#print(daily_basic)def main(self):#這里算是總調度吧self.log() #日志self.getDaily_basic() # 獲取Daily_basicself.getTrade_cal()    #獲取日期(可是周期,也可是單天日期)#啟動多線程(4個)for x in range(4):x += 1t1 = threading.Thread(target=self.getDaily_date, name='getDaily_date %d 號進程' % (x))t1.start()t1.join()if __name__ == '__main__':#大功告成,實例化后啟動main函數。stock = stock()stock.main()

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/449561.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/449561.shtml
英文地址,請注明出處:http://en.pswp.cn/news/449561.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

hbase單機搭建

一、下載 https://hbase.apache.org/downloads.html  2.1.3版本 解壓&#xff0c;拷貝到文件夾 /hbase/hbase-2.1.3 設置HBASE_HOME環境變量&#xff0c;把它加到path環境變量中去 source /etc/profile 二、配置 &#xff11;.在/data下創建目錄 mkdir /data/hbase mkdir /d…

mysql查詢報錯: ORDER BY clause is not in GROUP BY..this is incompatible with sql_mode=only_full_group_by

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 我的情況 &#xff1a; Mysql 5.7.21 版本運行sql 報錯如題&#xff0c;同樣的 sql 直接本地運行不報錯。 但是當連接的是服務器上的 …

多股票投資組合+馬科維茨計算組合

import matplotlib.pyplot as plt from pandas import read_excel import numpy as np import tushare as ts import pandas as pd import datetime token prots.pro_api(token) 獲取財務數據 #獲取財務數據 ticker_list [601318.SH,601336.SH,601398.SH,601888.SH,603993.S…

并發編程(十六)——java7 深入并發包 ConcurrentHashMap 源碼解析

以前寫過介紹HashMap的文章&#xff0c;文中提到過HashMap在put的時候&#xff0c;插入的元素超過了容量&#xff08;由負載因子決定&#xff09;的范圍就會觸發擴容操作&#xff0c;就是rehash&#xff0c;這個會重新將原數組的內容重新hash到新的擴容數組中&#xff0c;在多線…

[邊分治+線段樹合并]「CTSC2018」暴力寫掛

題目梗概 給出兩棵1為根的樹,求\(d[x]d[y]-d[lca(x,y)]-d[lca(x,y)]\)的最大值 解題思路 套路化簡之后\((d[x]d[y]dis(x,y)-2*d[lca(x,y)])/2\) 第二棵樹上的lca化不掉,所以考慮在第二棵上枚舉lca 先說說這題的解法,邊分樹的合并. 邊分和點分有什么區別,邊分在合并類似\(d[x]d[…

HEVC/H265 文檔獲得

HEVC/H265文檔是很重要的標準&#xff0c;因為代碼有時由于效率問題而修改&#xff0c;這是最重要的參考&#xff1a; HEVC approved by ITU-T and ISO/IEC "Geneva, 25 January 2013 – A new video coding standard building on the PrimeTime Emmy award winning IT…

期權計算隱含波動率

牛頓迭代法 from scipy.stats import norm import numpy as np def bscall(S,K,r,sigma,t):d1(np.log(S/K)(r0.5*sigma**2)*t)/(sigma*np.sqrt(t))d2d1-sigma*np.sqrt(t)return S*norm.cdf(d1)-K*np.exp(-r*t)*norm.cdf(d2) def bsput(S,K,r,sigma,t):d1(np.log(S/K)(r0.5*sigm…

進擊的二維碼 | ArcBlock 課堂預告

ArcBlock Technical Learning Series 第十七期進擊的二維碼本周三&#xff0c;1 月 30 日下午 1:30 時 &#xff08;美國太平洋時間 29日下午 21:30 時&#xff09;&#xff0c;由 ArcBloc 后端工程師孫博山 授課。復制代碼二維碼源于日本,如今世界各國都在使用。一張簡單的二維…

期權數據計算

判斷是否為調倉日 ef is_adjust_day(self, dom1):判斷是否是每月的調倉日。 :params int dom: 每月第幾個交易日進行調倉&#xff0c;缺省是第1個交易日。:return: 如果是調倉日&#xff0c;返回True&#xff0c;否則返回False。ret Falsetoday self.datetime.date()…

由Docker的MySQL官方鏡像配置的容器無法啟動問題解決辦法(修改配置后無法啟動)

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 為了方便閱讀&#xff0c;我在原文基礎上加了一些批注&#xff0c;說明我自己的情況&#xff0c;用紅色標示。 這篇文章記錄了我在使用…

HEVC/H265 主要設計者談HEVC/H265

Overview of the High Ef?ciency Video Coding (HEVC) Standard Gary J. Sullivan, Fellow, IEEE, Jens-Rainer Ohm, Member, IEEE, Woo-Jin Han, Member, IEEE, and Thomas Wiegand, Fellow, IEEE Gary J. Sullivan是H263&#xff…

阿里云 Aliplayer高級功能介紹(九):自動播放體驗

基本介紹經常會碰到客戶詢問&#xff0c;為什么我設置了autoplay為true&#xff0c;但是沒有自動播放&#xff0c;每次都要向客戶解釋這個是瀏覽器從用戶體驗角度考慮做的限制&#xff0c;客戶會繼續詢問那我要怎么做&#xff1f; 針對這個問題Aliplayer也專們做過優化&#xf…

指數定投(行不行學習)

import tushare as ts import pandas as pd import numpy as np from scipy import stats import tushare as ts import matplotlib.pyplot as plt %matplotlib inline #正常顯示畫圖時出現的中文和負號 from pylab import mpl mpl.rcParams[font.sans-serif][SimHei] mpl…

centOS安裝python3.7.2

1.查看centos中自帶的Python地址&#xff1a;which python&#xff08;一般在 /usr/bin/python&#xff09; 2.切換到python安裝目錄&#xff1a;cd /usr/bin 3.查看對應的Python版本指向&#xff1a;ls -l python* 4.創建一個空目錄&#xff1a;mkdir /usr/local/python3 5.…

有進度條圓周率Π計算

圓周率π的計算 一、圓周率π的簡介 圓周率的介紹圓周率用希臘字母 π&#xff08;讀作pi&#xff09;表示&#xff0c;是一個常數&#xff08;約等于3.141592654&#xff09;&#xff0c;是代表圓周長和直徑的比值。它是一個即無限不循環小數&#xff0c;在日常生活中&#xf…

期權制作回測數據

將指定的檔位的期權&#xff0c;指定階段剩余到期日的期權數據合并&#xff0c;用于回測 import pandas as pd import numpy as np import akshare as ak pd.set_option("display.max_rows",None) pd.set_option("display.max_columns",None)nh_price ak…

HEVC/H265 HM10.0 分析(一)NALread.cpp

下面分析 NALread.cpp 函數和代碼。 void read(InputNALUnit& nalu, vector<uint8_t>& nalUnitBuf) {/* perform anti-emulation prevention */TComInputBitstream *pcBitstream new TComInputBitstream(NULL);convertPayloadToRBSP(nalUnitBuf, (nalUnitBuf[0]…

Docker run 命令 參數說明

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 docker run &#xff1a;創建一個新的容器并運行一個命令 語法 docker run [OPTIONS] IMAGE [COMMAND] [ARG...][OPTIONS] IMAGE [COM…

【云周刊】第205期:阿里云重磅開源實時計算平臺Blink,挑戰計算領域的“珠峰”...

本期頭條 阿里云重磅開源實時計算平臺Blink&#xff0c;挑戰計算領域的“珠峰” 信息爆炸的時代&#xff0c;智能推薦已經被應用到各類互聯網產品中&#xff0c;但為千萬級甚至億級規模的用戶實時做精準的推薦難度極高。這一難題已經被阿里攻克了&#xff1a;雙11的第1分鐘&…

凱特勒通道(backtrader)

import backtrader as bt import datetime import pandas as pd import matplotlib.pyplot as plt import backtrader.analyzers as btanalyzers#定義指標 class Ketler(bt.Indicator):params dict(ema20,atr 17)lines (expo,atr,upper,lower)plotinfo dict(subplot False)p…