# Path: kquant_data/config.py
# __CONFIG_H5_STK_DIR__ = r'D:\DATA_STK'
# 
# Path: kquant_data/processing/merge.py
# def merge_weight_internal(symbols, DateTime, wind_code):
#     """
#     合并一级文件夹
#     :param rule:
#     :param sector_name:
#     :param dataset_name:
#     :return:
#     """
#     tic()
#     path = os.path.join(__CONFIG_H5_STK_WEIGHT_DIR__, wind_code)
#     df = load_index_weight(path)
#     print("数据加载完成")
#     # 与行业不同，行业是全部有数据，它是有一部分有数据，所以直接用fillna会出错，需要先填充
#     df.fillna(-1, inplace=True)
#     toc()
# 
#     # 原始数据比较简单，但与行业板块数据又不一样
#     # 1.每年的约定时间会调整成份股
#     # 2.每天的值都不一样
#     # 约定nan表示不属于成份，0表示属于成份，但权重为0
#     df = expand_dataframe_according_to(df, DateTime.index, symbols['wind_code'])
#     # -1表示特殊数据，处理下
#     df.replace(-1, np.nan, inplace=True)
#     print("数据加载完成")
#     toc()
# 
#     return df
# 
# Path: kquant_data/api.py
# def get_datetime(path):
#     dt = pd.read_csv(path, index_col=0, parse_dates=True)
#     dt['date'] = dt.index
#     return dt
# 
# def all_instruments(path=None, type=None):
#     """
#     得到合约列表
#     :param type:
#     :return:
#     """
#     if path is None:
#         path = os.path.join(__CONFIG_H5_STK_DIR__, "daily", 'Symbol.csv')
# 
#     df = pd.read_csv(path, dtype={'code': str})
# 
#     return df
# 
# Path: kquant_data/xio/h5.py
# def write_dataframe_set_dtype_remove_head(path, data, dtype, dataset_name):
#     """
#     每个单元格的数据类型都一样
#     强行指定类型可以让文件的占用更小
#     表头不保存
#     :param path:
#     :param data:
#     :param dtype:
#     :param dateset_name:
#     :return:
#     """
#     f = h5py.File(path, 'w')
#     if dtype is None:
#         f.create_dataset(dataset_name, data=data.as_matrix(), compression="gzip", compression_opts=6)
#     else:
#         f.create_dataset(dataset_name, data=data, compression="gzip", compression_opts=6, dtype=dtype)
#     f.close()
#     return


import os
from kquant_data.config import __CONFIG_H5_STK_DIR__
from kquant_data.processing.merge import merge_weight_internal
from kquant_data.api import get_datetime, all_instruments
from kquant_data.xio.h5 import write_dataframe_set_dtype_remove_head
﻿#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
指定数据目录，生成对应的合约行业数据

分为两种
1. 全市场数据，将部分标记上权重
2. 只对历史上成为成份股的，进行处理，由于前面已经转换了数据，这里只要跳选数据并处理即可


以前的做法是先生成数据，然后再生成合约
"""

if __name__ == '__main__':
    # 时间和合约都已经生成了
    # 只要将时间与合约对上即可
    path = os.path.join(__CONFIG_H5_STK_DIR__, "1day_000016.SH", 'Symbol.csv')
    symbols = all_instruments(path)

    path = os.path.join(__CONFIG_H5_STK_DIR__, "1day_000016.SH", 'DateTime.csv')
    DateTime = get_datetime(path)

    df = merge_weight_internal(symbols, DateTime, "000016.SH")


# Path: kquant_data/config.py
# __CONFIG_H5_STK_DIR__ = r'D:\DATA_STK'
# 
# Path: kquant_data/processing/merge.py
# def merge_weight_internal(symbols, DateTime, wind_code):
#     """
#     合并一级文件夹
#     :param rule:
#     :param sector_name:
#     :param dataset_name:
#     :return:
#     """
#     tic()
#     path = os.path.join(__CONFIG_H5_STK_WEIGHT_DIR__, wind_code)
#     df = load_index_weight(path)
#     print("数据加载完成")
#     # 与行业不同，行业是全部有数据，它是有一部分有数据，所以直接用fillna会出错，需要先填充
#     df.fillna(-1, inplace=True)
#     toc()
# 
#     # 原始数据比较简单，但与行业板块数据又不一样
#     # 1.每年的约定时间会调整成份股
#     # 2.每天的值都不一样
#     # 约定nan表示不属于成份，0表示属于成份，但权重为0
#     df = expand_dataframe_according_to(df, DateTime.index, symbols['wind_code'])
#     # -1表示特殊数据，处理下
#     df.replace(-1, np.nan, inplace=True)
#     print("数据加载完成")
#     toc()
# 
#     return df
# 
# Path: kquant_data/api.py
# def get_datetime(path):
#     dt = pd.read_csv(path, index_col=0, parse_dates=True)
#     dt['date'] = dt.index
#     return dt
# 
# def all_instruments(path=None, type=None):
#     """
#     得到合约列表
#     :param type:
#     :return:
#     """
#     if path is None:
#         path = os.path.join(__CONFIG_H5_STK_DIR__, "daily", 'Symbol.csv')
# 
#     df = pd.read_csv(path, dtype={'code': str})
# 
#     return df
# 
# Path: kquant_data/xio/h5.py
# def write_dataframe_set_dtype_remove_head(path, data, dtype, dataset_name):
#     """
#     每个单元格的数据类型都一样
#     强行指定类型可以让文件的占用更小
#     表头不保存
#     :param path:
#     :param data:
#     :param dtype:
#     :param dateset_name:
#     :return:
#     """
#     f = h5py.File(path, 'w')
#     if dtype is None:
#         f.create_dataset(dataset_name, data=data.as_matrix(), compression="gzip", compression_opts=6)
#     else:
#         f.create_dataset(dataset_name, data=data, compression="gzip", compression_opts=6, dtype=dtype)
#     f.close()
#     return


# Path: demo_stock/A_1day_000016/E04_merge_000016_indexconstituent.py
import os
from kquant_data.config import __CONFIG_H5_STK_DIR__
from kquant_data.processing.merge import merge_weight_internal
from kquant_data.api import get_datetime, all_instruments
from kquant_data.xio.h5 import write_dataframe_set_dtype_remove_head

﻿#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
指定数据目录，生成对应的合约行业数据

分为两种
1. 全市场数据，将部分标记上权重
2. 只对历史上成为成份股的，进行处理，由于前面已经转换了数据，这里只要跳选数据并处理即可


以前的做法是先生成数据，然后再生成合约
"""

if __name__ == '__main__':
    # 时间和合约都已经生成了
    # 只要将时间与合约对上即可
    path = os.path.join(__CONFIG_H5_STK_DIR__, "1day_000016.SH", 'Symbol.csv')
    symbols = all_instruments(path)

    path = os.path.join(__CONFIG_H5_STK_DIR__, "1day_000016.SH", 'DateTime.csv')
    DateTime = get_datetime(path)

    df = merge_weight_internal(symbols, DateTime, "000016.SH")


    path = os.path.join(__CONFIG_H5_STK_DIR__, "1day_000016.SH", 'weight.h5')