안녕하세요. 오늘은 국내 코스피 기업들의 주가 데이터를 공유 드립니다.( MySQL)

기간 : 2000-01-04 ~ 2017-10-25


수집 방법은 아래와 같습니다.


1. 먼저 아래 사이트에서 코스피에 등록된 업체 코드를 다운 받았습니다.

http://bigdata-trader.com/itemcodehelp.jsp


2. 야후에서 국내 코스피 주가 정보를 조회할 수 있습니다. (역시 미쿡 센스 입니다.)

https://finance.yahoo.com/lookup


3. 야후 사이트에서 CSV 파일을 다운받아 RDB 로 변환 하였습니다.

총 개수가 900개 정도에 달하니 다운받는 것도 DB에 넣는것도 예상보다 시간이 많이 걸리더라구요.


>  주가 정보 테이블

1
2
3
4
5
6
7
8
9
10
11
12
CREATE TABLE `TBL_STOCK_HISTORY` (
  `stock_code` varchar(10NOT NULL,
  `basic_date` date NOT NULL,
  `open_value` float DEFAULT NULL COMMENT '시가',
  `high_value` float DEFAULT NULL COMMENT '고가',
  `low_value` float DEFAULT NULL COMMENT '저가',
  `close_value` float DEFAULT NULL COMMENT '종가',
  `adj_close_value` float DEFAULT NULL COMMENT '수정 주가',
  `volume_value` float DEFAULT NULL COMMENT '거래량',
  PRIMARY KEY (`stock_code`,`basic_date`),
  UNIQUE KEY `idx_TBL_STOCK_HISTORY_stock_code_basic_date` (`basic_date`,`stock_code`)
ENGINE=InnoDB DEFAULT CHARSET=utf8;
cs

> 업체 코드 테이블
1
2
3
4
5
6
7
CREATE TABLE `TBL_STOCK_INFO` (
  `stock_code` varchar(10NOT NULL COMMENT '종목 코드',
  `stock_name` varchar(200DEFAULT NULL COMMENT '종목명',
  `stock_type` varchar(10DEFAULT NULL COMMENT '종목 타입',
  `use_yn` int(11DEFAULT NULL COMMENT '사용 여부',
  PRIMARY KEY (`stock_code`)
ENGINE=InnoDB DEFAULT CHARSET=utf8;
cs


> Backup File 용량이 177MB 라서 분할압축하여 올립니다. 

DB_STOCK_2017-11-01.7z.001DB_STOCK_2017-11-01.7z.002DB_STOCK_2017-11-01.7z.003DB_STOCK_2017-11-01.7z.004


> yahoo 에서 다운받은 CSV 파일 입니다. (원하시는 분이 계서서요.)

stock_CSV.7z.001stock_CSV.7z.002stock_CSV.7z.003stock_CSV.7z.004


----------------------------------------------------------------------------------------------------------------------------------------------------------

> 2017-11-04 추가

1. Daum 페이지의 정보를 토대로 기업별 WICS 정보를 추가하였습니다. (http://finance.daum.net/item/main.daum?code=005930)

>> DB DDL :   TBL_STOCK_INFO.bakTBL_WICS_CODE_INFO.bak

>> WICS 정보 :  2017/11/04 - [Database/Data] - WICS 코드표 Excel 파일 입니다.




이제 다음은 나스닥 정보를 수집해 볼까 합니다 만 이건 좀 오래 걸릴 것 같네요.

업체별 세부 정보도 추가해야 할것 같은데 , 조회 가능한 사이트 알고 계시면 추천 부착 드리고요, 개인적인 의견 있으시면 댓글로 달아 주세요.


* CSV 파일을 DB에 넣는 python , eclipse 프로젝트 소스 입니다. 

2017/11/02 - [Python] - Python 으로 CSV 파일을 DB에 저장



안녕하세요. 오늘은 기상청 날씨 정보를 업로드 합니다.

음력 날짜도 있으니 음력으로 비교해 봐도 좋을 것 같습니다.


기간 : 1960-01-01 ~ 2017-10-26

사이트 : http://www.kma.go.kr/weather/climate/past_cal.jsp


Table Schema :

-- 기상청 지역 코드 테이블

1
2
3
4
5
6
7
8
9
10
11
12
CREATE TABLE `TBL_LOCAL_INFO` (
 
  `local_code` int(11NOT NULL,
 
  `local_name` varchar(15DEFAULT NULL,
 
  `status` int(11NOT NULL DEFAULT '1',
 
  PRIMARY KEY (`local_code`)
 
ENGINE=InnoDB DEFAULT CHARSET=utf8;
 
cs


-- 지역별 날씨 정보 테이블

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
CREATE TABLE `TBL_WEATHER` (
 
  `basic_date` varchar(10CHARACTER SET latin1 NOT NULL COMMENT '양력',
 
  `local_code` int(11NOT NULL,
 
  `lunar_date` date DEFAULT NULL COMMENT '음력',
 
  `precipitation` float NOT NULL DEFAULT '0' COMMENT '일 강수량',
 
  `avg_snow` float NOT NULL COMMENT '평균 운량',
 
  `min_temperature` float NOT NULL COMMENT '최저 기온',
 
  `max_temperature` float NOT NULL COMMENT '최고 기온',
 
  `avg_temperature` float NOT NULL COMMENT '평균 기온',
 
  `reg_date` datetime DEFAULT CURRENT_TIMESTAMP,
 
  PRIMARY KEY (`basic_date`,`local_code`),
 
  UNIQUE KEY `idx_TBL_WEATHER_basic_date_local_code_lunar_date` (`lunar_date`,`basic_date`,`local_code`)
 
ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
cs

ScreenShot:




MySQL 백업파일  DB_WEATHER.7z



* DB화 하길 원하시는 자료가 있으시면 댓글 남겨 주세요.  댓글 주실 때 사이트 및 기타정보 알려 주시면 좀더 빨리 만들 수 있겠죠?


통화코드 자료가 필요하여 DB에 입력 후 자료 공유 합니다.


사이트 : https://ko.wikipedia.org/wiki/ISO_4217

Table Schema : 

1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE TABLE `TBL_CURRENCY_CODE` (
 
  `code` varchar(10NOT NULL COMMENT '통화코드',
 
  `no` int(11NOT NULL COMMENT '통화 번호\n',
 
  `name` varchar(100NOT NULL COMMENT '통화명',
 
  `nation_code` varchar(10DEFAULT NULL COMMENT '국가코드',
 
  PRIMARY KEY (`code`)
 
ENGINE=InnoDB DEFAULT CHARSET=utf8;
cs

ScreenShot : 


 첨부 파일 : MySQL 테이블 백업파일

TBL_CURRENCY_CODE.bak


* 좋은 정보가 있는 사이트를 추천해 주시면 DB에 저장 후 공유 하겠습니다.



2010-01-01 ~ 2017-10-16 동안의 환율 데이터를 MySQL 에 저장 후 테이블 백업 파일 공유 드립니다.


환율 정보 사이트 : https://www.kebhana.com/cont/mall/mall15/mall1501/index.jsp

테이블 구조 :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
CREATE TABLE `TBL_EXCHANGE_RATE` (
 
  `basic_date` date NOT NULL COMMENT '기준일',
 
  `currency_code` varchar(5NOT NULL COMMENT '통화코드',
 
  `cash_buy_exchange_rate` float NOT NULL COMMENT '현찰 살때 환율',
 
  `cash_buy_spread` float NOT NULL COMMENT '현찰 살때 spread',
 
  `cash_sell_exchange_rate` float NOT NULL COMMENT '현찰 팔때 환율',
 
  `cash_sell_spread` float NOT NULL COMMENT '현찰 팔때 spread',
 
  `transfer_send` float NOT NULL COMMENT '송금 보낼 때',
 
  `transfer_receive` float NOT NULL COMMENT '송금 받을 때',
 
  `tc_buy` float NOT NULL COMMENT 'T/C 사실때 ',
 
  `buy_basic_rate` float NOT NULL COMMENT '매매기준율',
 
  `transfer_commission` float NOT NULL COMMENT '환가료율',
 
  `usd_change_rate` float NOT NULL COMMENT '미화 환산율',
 
  `reg_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
 
  PRIMARY KEY (`basic_date`,`currency_code`)
 
ENGINE=InnoDB DEFAULT CHARSET=utf8;
cs


첨부 파일 : MySQL 테이블 백업 파일

TBL_EXCHANGE_RATE.bak



* 환율 정보 사이트와 같이 유용한 정보가 있는 사이트를 공유해 주시면 DB형태로 변환하여 공유 드리겠습니다.



일련 번호의 빠진 번호 중 가장 작은 값을 조회하는 쿼리 입니다.

MSSQL 쿼리이며 WITH(NOLOCK) 부분만 제가하면 Oracle 에서도 사용 가능 합니다.


1
2
3
4
5
6
-- {0} = 지정된 번호 이후의 비어있는 일련 번호 조회
 
SELECT min(IDX + 1)
FROM (SELECT {0} IDX UNION ALL SELECT IDX FROM TBL_TEST WITH(NOLOCK) WHERE IDX > {0}) TA
WHERE IDX+1 NOT IN (SELECT IDX FROM TBL_TEST WITH(NOLOCK))
 
cs



MSSQL 2005 이상에서 사용 가능한  xml 문자열을 파싱하여 DB에 저장하는 방법 입니다.


* 입력받을 xml 형식의 아이템 문자열 입니다.


XML Type 1

<items>  

<item><id>M4A1</id><price>500</price></item>

<item><id>AK47</id><price>600</price></item>

<item><id>9A-91</id><price>700</price></item>

<item><id>M4</id><price>700</price></item>  

</items> 


XML Type 2

<items>

<item id="M4A1" price=500></item>

<item id="AK47" price=600></item>

<item id="9A-91" price=700></item>

<item id="M4" price=800></item>

</items>


* SP 입니다.

CREATE proc [dbo].[sp_xml_insert] (

@i_xml Varchar(3000)

)

as

BEGIN

    DECLARE @docHandle int;                                   --xml 문서핸들

    EXEC sp_xml_preparedocument @docHandle OUTPUT, @i_xml;

    INSERT INTO tbl_items (item, price)

    SELECT *

    FROM OPENXML(@docHandle,'/items/item',3)   --flags 3으로 입력시 위 2가지 xml 형식에 대하여 모두 정상 변환 합니다.

    WITH ( id VARCHAR(30)                                      --3이 아닐 경우 항목이 null 이 표시 됩니다.

                ,price BIGINT

                );

    EXEC sp_xml_removedocument @docHandle;

END


** OPENXML 함수 설명

https://msdn.microsoft.com/ko-kr/library/ms186918.aspx

flag: XML 데이터와 관계형 행 집합 사이에 사용해야 하는 매핑과 남는 열을 채우는 방법을 나타냅니다. flags는 선택적 입력 매개 변수이며 다음 값 중 하나일 수 있습니다.

바이트 값설명
0기본적으로 특성 중심 매핑을 사용합니다.
1특성 중심 매핑을 사용합니다. XML_ELEMENTS와 결합할 수 있습니다. 이 경우 특성 중심 매핑이 먼저 적용된 다음 아직 처리되지 않은 모든 열에 대해 요소 중심 매핑이 적용됩니다.
2요소 중심 매핑을 사용합니다. XML_ATTRIBUTES와 결합할 수 있습니다. 이 경우 특성 중심 매핑이 먼저 적용된 다음 아직 처리되지 않은 모든 열에 대해 요소 중심 매핑이 적용됩니다.
8

XML_ATTRIBUTES 또는 XML_ELEMENTS와 결합(논리적 OR 연산을 수행)할 수 있습니다. 검색 상황에서 이 플래그는 소비된 데이터를 오버플로 속성인 @mp:xmltext로 복사할 수 없음을 나타냅니다.



-



+ Recent posts