5. 本地数据库

很简单的用本地Sqlite查找股票数据。

DataSource类,返回的是Dataframe物件。这个Dataframe物件,在之后的业务,如计算股票指标,还需要特别处理。

import os
import sqlite3 as sqlite3
import numpy as np
import pandas as pd # 数据源
class DataSource:
def __init__(self):
self.db = None # 数据库
self.cursor = None # 指针
self.stocks = {} # 股票池
self.indexs = {} # 指数池
self.name = 'unit_test.db' # 数据源名称 def connect(self):
self.db = sqlite3.connect(os.path.abspath(self.name))
self.cursor = self.db.cursor() def get_stocks(self, ucodes):
# 股票池
try:
self.stocks = {}
self.connect()
self.db.row_factory = lambda cursor, row: row[0]
for ucode in ucodes:
sql = """SELECT t.code, t.lot, t.nmll, t.stime, t.high, t.low, t.open, t.close, t.volume
FROM (SELECT n.code, n.lot, n.nmll, c.stime, c.high, c.low, c.open, c.close, c.volume
FROM s_{} AS c INNER JOIN name AS n
ON c.code=n.code ORDER BY c.stime DESC LIMIT 365*20) AS t
/*INNER JOIN financial AS f
ON t.code=f.code AND substr(t.stime,1,4)=f.year*/
ORDER BY t.stime""".format(ucode)
self.cursor.execute(sql)
columns = ['code', 'lot', 'nmll', 'sdate', 'high', 'low', 'open', 'last', 'vol']
self.stocks[ucode] = pd.DataFrame(self.cursor.fetchall(), columns=columns)
self.db.commit()
self.cursor.close()
self.db.close()
return self.stocks
except sqlite3.Error as e:
print(e) def get_indexs(self, indexs):
try:
# 指数池
self.indexs = {}
self.connect()
self.db.row_factory = lambda cursor, row: row[0]
for index in indexs:
sql = """SELECT t.code, t.lot, t.nmll, t.stime, t.high, t.low, t.open, t.close, t.volume
FROM (SELECT n.code, n.lot, n.nmll, c.stime, c.high, c.low, c.open, c.close, c.volume
FROM s_{} AS c INNER JOIN name AS n
ON c.code=n.code ORDER BY c.stime DESC LIMIT 365*20) AS t
/*INNER JOIN financial AS f
ON t.code=f.code AND substr(t.stime,1,4)=f.year*/
ORDER BY t.stime""".format(index.upper())
self.cursor.execute(sql)
columns = ['code', 'lot', 'nmll', 'sdate', 'high', 'low', 'open', 'last', 'vol']
self.indexs[index] = pd.DataFrame(self.cursor.fetchall(), columns=columns)
self.db.commit()
self.cursor.close()
self.db.close()
return self.indexs
except sqlite3.Error as e:
print(e) data_source = DataSource()
df1 = data_source.get_stocks([''])
df2 = data_source.get_indexs(['hsi'])

python+Sqlite+Dataframe打造金融股票数据结构的更多相关文章

  1. 用Pandas Dataframe来架构起金融股票数据的内部形态

    2. 金融股票数据的另一个形态,怎样在业务内部流动,同时怎样避免错误 前一篇讲解了股票的原始状态,那麽在业务过程中,数据会变成怎样的形态,来完成众多奇奇怪怪的业务呢,以下将会解答. 首先,任何股票都有 ...

  2. 第三百五十八节,Python分布式爬虫打造搜索引擎Scrapy精讲—将bloomfilter(布隆过滤器)集成到scrapy-redis中

    第三百五十八节,Python分布式爬虫打造搜索引擎Scrapy精讲—将bloomfilter(布隆过滤器)集成到scrapy-redis中,判断URL是否重复 布隆过滤器(Bloom Filter)详 ...

  3. 三十七 Python分布式爬虫打造搜索引擎Scrapy精讲—将bloomfilter(布隆过滤器)集成到scrapy-redis中

    Python分布式爬虫打造搜索引擎Scrapy精讲—将bloomfilter(布隆过滤器)集成到scrapy-redis中,判断URL是否重复 布隆过滤器(Bloom Filter)详解 基本概念 如 ...

  4. Python分布式爬虫打造搜索引擎完整版-基于Scrapy、Redis、elasticsearch和django打造一个完整的搜索引擎网站

    Python分布式爬虫打造搜索引擎 基于Scrapy.Redis.elasticsearch和django打造一个完整的搜索引擎网站 https://github.com/mtianyan/Artic ...

  5. 简学Python第二章__巧学数据结构文件操作

    #cnblogs_post_body h2 { background: linear-gradient(to bottom, #18c0ff 0%,#0c7eff 100%); color: #fff ...

  6. [Spark][Python][RDD][DataFrame]从 RDD 构造 DataFrame 例子

    [Spark][Python][RDD][DataFrame]从 RDD 构造 DataFrame 例子 from pyspark.sql.types import * schema = Struct ...

  7. [Spark][python]以DataFrame方式打开Json文件的例子

    [Spark][python]以DataFrame方式打开Json文件的例子: [training@localhost ~]$ cat people.json{"name":&qu ...

  8. 第三百七十二节,Python分布式爬虫打造搜索引擎Scrapy精讲—scrapyd部署scrapy项目

    第三百七十二节,Python分布式爬虫打造搜索引擎Scrapy精讲—scrapyd部署scrapy项目 scrapyd模块是专门用于部署scrapy项目的,可以部署和管理scrapy项目 下载地址:h ...

  9. 第三百七十一节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现我的搜索以及热门搜索

    第三百七十一节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现我的搜索以及热门 我的搜素简单实现原理我们可以用js来实现,首先用js获取到 ...

随机推荐

  1. 设置gvim的字体大小

    1.临时设置: 进入命令行模式输入: set guifont=Courier\ New:h10 2.永久设置: 打开安装目录找到defaults.vim在最后一行输入: set guifont=Cou ...

  2. Typecho博客添加版权说明

    版权声明是指作品权利人对自己创作作品的权利的一种口头或书面声明,一般版权声明应该包括权利归属.作品使用准许方式.责任追究等方面的内容.诸如平时看文章时最后会有一个严禁转载的说明,其实这就是版权声明. ...

  3. 八十一、SAP中的ALV的简介(ABAP List Viewer)

    一.ALV是SAP中的一个表格,全称为:ABAP List Viewer或者SAP List Viewer,就是可视化表格. ALV是SAP系统中心的列表标准,可以在ABAP程序中进行报表输出.除去列 ...

  4. 201912-1 报数 Java

    思路: String.valueOf(int i) : 将 int 变量 i 转换成字符串 String.contains()用于判断字符串是否包含子字符串 import java.util.Scan ...

  5. 吴裕雄--天生自然C++语言学习笔记:C++ 异常处理

    异常是程序在执行期间产生的问题.C++ 异常是指在程序运行时发生的特殊情况,比如尝试除以零的操作. 异常提供了一种转移程序控制权的方式.C++ 异常处理涉及到三个关键字:try.catch.throw ...

  6. PAT Advanced 1072 Gas Station (30) [Dijkstra算法]

    题目 A gas station has to be built at such a location that the minimum distance between the station an ...

  7. java List的用法

    List的用法List包括List接口以及List接口的所有实现类.因为List接口实现了Collection接口,所以List接口拥有Collection接口提供的所有常用方法,又因为List是列表 ...

  8. Linux重要命令练习之bc

  9. HDU - 5586 Sum(区间增量最大)

    题意:将数组A的部分区间值按照函数f(Ai)=(1890*Ai+143)mod10007修改值,区间长度可以为0,问该操作后数组A的最大值. 分析:先求出每个元素的增量,进而求出增量和.通过b[r]- ...

  10. 【STM32H7教程】第48章 STM32H7的FMC总线应用之是32路高速IO扩展

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第48章       STM32H7的FMC总线应用之是32路 ...