oracle简易版创建数据库,建立简易金融数据库
金融数据一直是数据分析的重要数据来源,要做金融数据分析一定要有一个金融数据库,这篇博文就来教大家如何在自己的PC上建立一个简易金融数据库。
“工欲善其事,必先利其器”,建立数据库首先要有一个数据库软件,这里选择的是行业翘楚Oracle。幸运的是,Oracle学微软的那一套,推出了一个免费但功能有限的Oracle Express版本,虽然是功能有限但对基本的数据库操作足够了。这里是Oracle Express的网址:http://www.oracle.com/technetwork/database/database-technologies/express-edition/overview/index.html。为了更容易的操纵数据库Oracle SQL Developer也是少不了的,网址:http://www.oracle.com/technetwork/developer-tools/sql-developer/overview/index.html,读者可以根据网站的介绍下载安装这两款软件,这里不再赘述。
“水有源,树有根”,没有数据源的数据库只是一个空的容器。这里把沪深两市的股票交易数据作为数据源,下面介绍如何获得这些数据。
第一步,获得股票代码。交易所网站是获得股票代码最可靠的来源,这里给出网址,深交所:http://www.szse.cn/main/marketdata/jypz/colist/;上交所:http://www.sse.com.cn/assortment/stock/list/name/。读者可以将这些代码分别复制保存在两个文件内,这里不再赘述。
第二步,寻找网络数据源。有些大型网站提供股票数据的下载服务,比如163。这里举一个例子,在163官网的股票板块查询浦发银行(600000),可以顺藤摸瓜找到浦发银行的历史交易数据,网址:http://quotes.money.163.com/trade/lsjysj_600000.html?year=2014&season=4,点击旁边的“下载数据”按键就可以下载数据了,数据以csv表格的形式存储。
第三步,自动化下载数据,这也是最复杂的一步。沪深两市的可交易股票有几千只,这些股票的数据完全由人工点击网页下载是不现实的,需要实现自动化下载。这里演示如何用R语言实现数据自动下载。在第二步点击“下载数据”按键下载数据的过程中可以得到下载数据的网址,这个网址是实现自动化下载的关键。打开第二步中的网页下载数据,如果使用的是360浏览器,在下载工具中可以得到下载链接,如下图,
如果使用的是火狐浏览器,可以在下载管理器中找到下载的文件,右键“复制下载链接”,如下图,
获得了下载链接后,下面分析一下链接的组成。刚才获得的链接是:http://quotes.money.163.com/service/chddata.html?code=0600000&start=19991110&end=20141231&fields=TCLOSE;HIGH;LOW;TOPEN;LCLOSE;
CHG;PCHG;TURNOVER;VOTURNOVER;VATURNOVER;TCAP;MCAP,关键字一目了然,600000是股票代码;如果下载一个深市的股票可以发现,股票代码前的0表示沪市,1表示深市;19991110表示开始日期(下载时可以选择是上市日还是发行日,不过这里推荐用上市日),20141231表示截止日期;剩下的都是具体的数据项目。
新的问题来了,截止日期可以统一确定,上市日期却不能,必须分别获取股票的上市日期。来到网页http://quotes.money.163.com/trade/lsjysj_600000.html#01b07,这是查询数据前的状态,右键“查看网页源代码”,搜索一下“上市日”,可以发现“上市日”前面有一段代码“value="1999-11-10"”,这就是上市日。
根据网页的特征,可以用R语言自动化的分析网页内容,获得上市日数据,代码如下,
#下载股票上市日期
#download the listingdate of one security
library(RCurl)
SH
listing.date
url.date1
url.date2
for (i in 1:length(SH))
{
#解析网页,得到listingdate
cat(i,'\n')
url.date
xx
posi
listing.date[i]
}
listing.date.tab
#输出
write.table(listing.date.tab,file="xxx.txt",sep="\t",quote=FALSE,row.name=FALSE)
把下载好的数据按照市场分开,分别保存到txt文件即可,这里不再赘述。保存好的数据要稍微处理一下,日期的格式调整为yyyymmdd,write.table会把数据框的“列名”打印出来,列名也是要去掉的。
有了股票代码和上市日期数据就可以自动化下载数据了,最好深市沪市分开进行,存在不同的文件夹下,R代码如下,
#下载股票数据
library(RCurl)
#http://quotes.money.163.com/service/chddata.html?code=0600030&start=20030106&end=20140920&fields=TCLOSE;HIGH;LOW;TOPEN;LCLOSE;CHG;PCHG;TURNOVER;VOTURNOVER;VATURNOVER;TCAP;MCAP
url1
market
code
url2
start
url3
end
url4
#文件的存放路径
file.path
#股票代码+发行日期,格式:CODE制表符yyyymmdd
security
code
listingdate
security.tab
for (i in 1 : length(security))
{
security.tab[i,] = strsplit(security[i],"\t")
}
for (i in 1 : dim(security.tab)[1])
{
code
start
cat(i,"\t---",code,"\n")
url
file
download.file(url,destfile=file, method="auto",quiet=T)
}
上一段代码把股票数据下载到指定的文件夹,不过数据是以个股为单位独立的存储在csv文件中的,文件名即是股票代码。成百上千的csv文件不容易导入数据库,需要把这些文件拼接成几个大文件。
“百川汇流”,导入数据库。在正式导入数据库之前需要把几千个csv文件拼接成几个大型文件。为了提高逼格(真实的原因是建立数据库的时候本人还不会Python),这里用C++完成拼接文件的工作,其实有Python基础的读者也可以用Python来完成。文件拼接的C++程序如下,
#include
#include
#include
int main(void)
{
//处理股票数据
const int N = 1000;
ifstream fin;
vector file_list,ff;
char x[N];
string ss;
//获取要处理的文件列表
fin.open("fff.txt");
while (!fin.eof())
{
fin.getline(x, N, '\n');
ss.assign(x);
if (ss.size() > 0)
{
file_list.push_back(ss);
}
}
fin.close();
//cout<
ofstream fout, fout0,fout1,fout2,fout3,fout4,fout5;
string obj_file("x.csv"),path1("F:/download/obj/"),path2("F:/download/outh/");
for (int i = 0; i < file_list.size(); ++i)
{
cout<
int f_num = i / 500;
obj_file[0] = '0'+f_num;
fout.open(path2+obj_file,ofstream::out | ofstream::app);
fin.open(path1+file_list[i]);
bool first = true;
while (!fin.eof())
{
fin.getline(x, N, '\n');
ss.assign(x);
if (ss.size() > 0 && !first)
{
//1到1004为沪市
if (i+1<=1004)
{
ss="SH,"+ss;
}
else
{
ss="SS,"+ss;
}
ss.erase(7,1);
ss.erase(9,1);
ss.erase(12,1);
fout<
}
first = false;
}
fin.close();
fout.close();
}
}
需要解释一下,第一步获取要处理的文件的文件名列表,前半部分为沪市,后半部分为深市,列表存放在fff.txt文件(获取文件名列表可以用R中的dir函数)。第二步把所有文件转移到同一个文件夹下,运行C++程序处理文件,将文件归并到6个文件中。拼接的同时,在数据中增加了“市场”字段,SH表示沪市,SS表示深市。数据的日期格式因该是yyyymmdd,C++代码中已经通过ss.erase()调整过了。
文件拼接完成之后,按照数据的存储形式在Oracle中建立相应的“表”,在用SQL Developer将拼接好的csv文件中的数据导入Oracle就可以了,这完全是数据库操作,不再赘述。
做完上面几步就完成了股票数据库的建立,胜利收官。同理,举一反三地可以建立股票指数数据库。下面讲一下注意事项:
1.在数据下载的时候可能遇到打不开下载链接的情况,这时候R程序会报错并停止,这时候需要人工的跳过这个链接,重新运行程序,直接进入下一步的循环,所以下载的时候人工监控是少不了的。
2.建议用最新版的R运行程序,之前的版本在下载文件时存在内存溢出的现象,在下载几百个文件之后会因为内存不足而强行终止运行。
3.在数据导入数据库之后建议人工检验一下每一个字段,把存在空值的行删掉。
最后借助RODBC包把Oracle和R连接起来,给出一个数据分析的例子,计算一下浦发银行600000和上证指数000001之间的线性关系,R代码如下,
rm(list=ls())
library(RODBC)
channel
sql1
where
dates in
(
SELECT dates FROM idx where code='000001'
INTERSECT
SELECT dates FROM security where code='600000'
and
close > 0
and
dates >= to_date('20100101', 'yyyymmdd')
)
and
code = '000001'
order by dates asc"
sql2
where
dates in
(
SELECT dates FROM idx where code='000001'
INTERSECT
SELECT dates FROM security where code='600000'
and
close > 0
and
dates >= to_date('20100101', 'yyyymmdd')
)
and
code = '600000'
order by dates asc"
i000001
head(i000001)
s600000
head(s600000)
t
s
i
plot(i, s, pch = 20, xlab="000001", ylab="600000")
capm.lm
abline(coef = capm.lm$coe, co="red", lwd=2)
oracle简易版创建数据库,建立简易金融数据库相关推荐
- oracle简易版创建数据库,浅析新建Oracle数据库的三种方法
1.通过运行Oracle Database Configuration Assistant 创建.配置.或删除数据库(也可在命令行下输入dbca): 2.用命令行的方式建立数据库 3.通过运行自定义的 ...
- oracle简易版创建数据库,oracle创建一个数据库三步走
以前开发的时候用得比较多的是mysql和sql server,oracle用的比较少,用起来比较生疏,mysql和sql server用起来比较类似,就oracle的使用方式和他们不同,oracle在 ...
- oracle简易数据库搭建,Oracle 10g 手工创建一个最简单的数据库
[root@blliu ~]# su - oracle [oracle@blliu ~]$ cd $ORACLE_HOME/dbs [oracle@blliu dbs]$ touch initorcl ...
- Oracle 11g 通过创建物化视图实现不同数据库间的表数据同步
Oracle 11g 物化视图语法如下: create materialized view [view_name] refresh [fast|complete|force] [ on [commit ...
- JavaEE + Oracle + Spring Boot + Mybatis + Maven 开发简易版银行管理系统(附源码)
文章目录 JavaEE + Oracle + Spring Boot + Mybatis + Maven 开发简易版银行管理系统 一.系统介绍 二.开发步骤 三.系统展示 四.开发总结 五.数据库相关 ...
- 依赖注入[5]: 创建一个简易版的DI框架[下篇]
为了让读者朋友们能够对.NET Core DI框架的实现原理具有一个深刻而认识,我们采用与之类似的设计构架了一个名为Cat的DI框架.在<依赖注入[4]: 创建一个简易版的DI框架[上篇]> ...
- php mailer altbody,PHP_phpmailer 中文使用说明(简易版),phpmailer v5.1下载 A开头: $AltBody - phpStudy...
phpmailer 中文使用说明(简易版) phpmailer v5.1下载 A开头: $AltBody--属性 出自:PHPMailer::$AltBody 文件:class.phpmailer.p ...
- CDH5.15离线搭建简易版集群(完整版)
运用CDH5.15离线搭建简易版集群 关于CDH和Cloudera CDH(Cloudera的发行版,包括Apache Hadoop),是Hadoop众多分支中的一种,由Cloudera维护,基于稳定 ...
- 基于Zookeeper实现简易版服务的注册与发现机制
一.功能要求 基于Zookeeper实现简易版服务的注册与发现机制 启动2个服务端 将服务端IP和端口信息注册到Zookeeper上 启动1个客户端 从Zookeeper中获取2个服务端节点信息 客户 ...
最新文章
- 李菲菲课程笔记:Deep Learning for Computer Vision – Introduction to Convolution Neural Networks
- 【纯干货】Amoeba实现MySQL主从同步与读写分离
- 用JavaScript语言判断一个三位数是否为水仙花数
- Python:Anaconda安装虚拟环境到指定路径
- mysql replace update_mysql的replace,存在更新,不存在插入
- Win10 WSL adb使用
- .net Core 3.1 项目打包部署到Windows服务
- KVM磁盘格式转换,raw转qcow2
- android studio 导入一个已有的android studio project作为lib使
- js使用双层for循环实现倒三角形、正三角形
- 【太经典】如果有人问你数据库的原理,叫他看这篇文章
- 【使用Unity开发Windows Phone上的2D游戏】(1)千里之行始于足下
- Android手机听筒和扬声器切换
- vue中数据劫持代理
- idea 设置编辑器 table 全部显示
- openmvg中cmd模块解析
- 白告王旋的前端开发笔记——性能优化
- LoadRunner Error -27792: Failed to connect to server
- 论文阅读:Gradient Harmonized Single-stage Detector
- $().each和$.each()
热门文章
- Github+picGo搭建图床
- python做表格好用吗_吊打Excel!用Python来办公到底有多强?
- 国内外建筑信息化企业产品分析
- 在arcmap和arcgispro中添加在线地图服务
- php 风水起名网站源代码_开运网付费开源商业版 PHP风水起名八字算命易经周易源码...
- 想知道华为手机电池是否正常,按下这几个数字就可以了,亲测有效
- 亚商投资顾问 早餐FM/0919世界制造业大会将召开
- Person Re-identification:Past,Present and Future笔记
- 【挖坑记】JZOJ 4727 挺进
- DNS配置错误导致无法访问网络