修正index程序设计

2018-8-29更新:
1.update_match_table的测试用例:

match_table =  {('2017-08-04','600636'):'*ST爱富',
          ('2017-08-01', '002659'): '中泰桥梁',
          ('2017-08-04', '002659'): '中泰桥梁',
          ('2017-08-05', '002659'): '中泰桥梁',
          ('2017-08-04', '601588'): '北辰实业',}
fix_table =  {('2017-08-04','600636'):'*ST爱富',
          ('2017-08-01', '002659'): '中泰桥梁',
          ('2017-08-10', '002659'): '中泰桥梁',
          ('2017-08-10', '002659'): '中泰桥梁',
          ('2017-08-10', '601588'): '北辰实业',
          ('2018-08-29', '002659'): '中泰桥梁',
          ('2017-08-29', '002659'): '中泰桥梁',
          ('2017-08-29', '601588'): '北辰实业',}

expect_table = {
          ('2017-08-04','600636'):'*ST爱富',
          ('2017-08-01', '002659'): '中泰桥梁',
          ('2017-08-04', '002659'): '中泰桥梁',
          ('2017-08-05', '002659'): '中泰桥梁',
          ('2017-08-04', '601588'): '北辰实业',
          ('2017-08-10', '002659'): '中泰桥梁',
          ('2017-08-10', '002659'): '中泰桥梁',
          ('2017-08-10', '601588'): '北辰实业',
          ('2018-08-29', '002659'): '中泰桥梁',
          ('2017-08-29', '002659'): '中泰桥梁',
          ('2017-08-29', '601588'): '北辰实业',}

2.pcs_index中一行如下所示:
    ['2017-08-04', '', '1010120170804100', None,'*ST爱富',
    '*ST爱富第八届第九次(临时)监事会决议公告', '10101', 100, '600636', ''],
要求校验第5列:'*ST爱富' 和第6列的 '*ST爱富第八届第九次(临时)监事会决议公告'字符串头部的'*ST爱富'相同。
      

2018-8-28更新:
1、MatchTable类下面增加update_match_table函数,更新当日从上交所、深交所渠道获取的数据和巨潮历史数据中缺失的部分。
fix_table由杨鸿健给出。暂时可以用假数据替代。

class MatchTable:
    def update_match_table(self,match_table,fix_table):
              """更新上交所、深交所match_table,与巨潮渠道获得的数据去重
              :param match_table:get_match_table函数获得的巨潮、人工渠道的match_table
              :param fix_table:可以是历史数据里面的omi_table,也可以是上交所、深交所每日更新的fix_table
              :return updated_table:更新了上交所、深交所的、修正了历史数据的
              """

2、pcs_index函数中,需要校验从match_table获取的公司名和pdf_title中的公司名是否相同,如果不同需要将不同的部分整理出来(可以直接print出来)提供人工介入处理,最终确保company_name字段的公司名和pdf_title的公司名相同。
company_name及pdf_title均不允许有空格。


说明:
1.本程序所有基础数据search_index_shai, search_index_szhen, search_index_cnino均已从网络获取,直接处理即可。
2.search_index_shai和search_index_szhen中缺失了company_name字段,现需要从search_index_cnino中找到对应的日期、code的公司名来补足。
3.search_index_shai和search_index_szhen中pdf_title字段下公司名称和文件名称是综合在一起的,需要将pdf_title中的公司名去除。有些公司名后有‘:’,也需要去除。


修正index程序设计_第1张图片
上交所示例

修正index程序设计_第2张图片
深交所示例

4.如果search_index_cnino没有对应的公司名,则从pdf_title获取。
5.本测试用例,仅列示了较常见的情况,全部数据处理时还有可能出现预料外的情况,以实际处理为准。

class MatchTable:
    """从search_index_cnino获取match_table"""
    def __init__(self):
        """ """
    def get_match_table(self,search_index_cnino):
        """
        从search_index_cnino获取match_table
        :param search_index_cnino:巨潮的search_index
        :return: match_table:'announce_date+trade_code'与‘company_name’对应的字典
        """
        
        
class BaseModifyIndex:
    """父类,修正上交所、深交所各自的search_index"""
    def __init__(self):
        """ """
    def pcs_index(self,search_index, match_table):
        """
        修正函数
        :param search_index:待处理的search_index
        :param match_table:通过巨潮获取的'日期+tradecode'与‘公司名’对应的字典
        """
class SHaiMIBhv(BaseModifyIndex):
    """子类,修正上交所search_index"""
    def pcs_index(self,search_index, match_table):
        """
        利用match_table处理上交所的search_index,填补公司名(需去除空格),
将pdf_title中字符串开始位置的公司名及公司名后的冒号(如有)去除。
注意match_table中可能有公司名为None的情况,这时公司名以pdf_title中
字符串开始位置的公司名为准。
        :param search_index:上交所待处理的search_index
        :param match_table:通过巨潮获取的'日期+tradecode'与‘公司名’对应的字典
        :return: md_index:函数返回值,修正后的search_index
        """
class SZhenMIBhv(BaseModifyIndex):
    """子类,修正深交所search_index"""
    def pcs_index(self,search_index, match_table):
        """
        利用match_table处理深交所的search_index,填补公司名(需去除空格),
将pdf_title中字符串开始位置的公司名及公司名后的冒号(如有)去除。
注意match_table中可能有公司名为None的情况,这时公司名以pdf_title中
字符串开始位置的公司名为准。
        :param search_index:深交所待处理的search_index
        :param match_table:通过巨潮获取的'日期+tradecode'与‘公司名’对应的字典
        :return: md_index:函数返回值,修正后的search_index
        """

测试用例:

#基础数据:
column_list = ['announce_date', 'company_name', 'pdf_id', 'pdf_path', 'pdf_title', 
'source_code', 'status', 'trade_code', 'url_path']

a1_list = [['2017-08-04', '', '1010120170804100', None,
 '*ST爱富第八届第九次(临时)监事会决议公告', '10101', 100, '600636', ''],
           ['2017-08-04', '', '1010120170804105', None, 
'*ST爱富:国浩律师(上海)事务所关于上海三爱富新材料股份有限公司重大资产购买
及出售暨关联交易事项交易所重组三次问询函的专项法律意见书', '10101', 100, '600636', ''],
           ['2017-08-04', '', '1010120170804107', None,
 '*ST爱富与上海三爱富新材料科技有限公司重大资产出售协议之补充协议(一)', '10101', 100, '600636', ''],
           ['2017-08-04', '', '1010120170804108', None, 
'*ST爱富:中国文化产业发展集团公司承诺函', '10101', 100, '600636', ''],
           ['2017-08-04', '', '1030120170804928', None, 
'弘光控股:H股公告', '10101', 100, '648457', '']
           ]
b1_list = [['2017-08-01', '', '1020120170801453', None, 
'中泰桥梁关于收到《中国证监会行政许可申请终止审查通知书》的公告', '10201', 100, '002659', ''],
           ['2017-08-04', '', '1020120170804189', None, 
'中泰桥梁关于重大事项停牌的进展公告', '10201', 100, '002659', ''],
           ['2017-08-05', '', '102012017080582', None,
 '中泰桥梁:2017年半年度报告摘要', '10201', 100, '002659', '']
           ]
c1_list = [['2017-08-04', '*ST爱富', '1030120170804281', None, 
'中国文化产业发展集团公司承诺函', '10301', 100, '600636', ''],
           ['2017-08-04', '*ST爱富', '1030120170804282', None,
 '国浩律师(上海)事务所关于上海三爱富新材料股份有限公司重大资产购买
及出售暨关联交易事项交易所重组三次问询函的专项法律意见书', '10301', 100, '600636', ''],
           ['2017-08-04', '*ST爱富', '1030120170804288', None,
 '第八届第九次(临时)监事会决议公告', '10301', 100, '600636', ''],
           ['2017-08-04', '*ST爱富', '1030120170804292', None,
 '公司与上海三爱富新材料科技有限公司重大资产出售协议之补充协议(一)', '10301', 100, '600636', ''],
           ['2017-08-01', '中泰桥梁', '1030120170801919', None,
 '关于收到《中国证监会行政许可申请终止审查通知书》的公告', '10301', 100, '002659', ''],
           ['2017-08-04', '中泰桥梁', '1030120170804297', None, 
'关于重大事项停牌的进展公告', '10301', 100, '002659', ''],
           ['2017-08-05', '中泰桥梁', '1030120170805451', None, 
'2017年半年度报告摘要', '10301', 100, '002659', ''],
           ['2017-08-04', '北辰实业', '1030120170804928', None, 
'H股公告', '10301', 100, '601588', ''],
           ['2017-08-04', '北辰实业', '1030120170804929', None, 
' H股公告', '10301', 100, '601588', ''],
           ['2017-08-04', None, '1030120170804928', None, 
'H股公告', '10301', 100, '648457',''],
           ]
search_index_shai = pd.DataFrame(a1_list)
search_index_shai.columns = column_list

search_index_szhen = pd.DataFrame(b1_list)
search_index_szhen.columns = column_list

search_index_cnino = pd.DataFrame(c1_list)
search_index_cnino.columns = column_list

#开始测试:
get_match_table:
输入:search_index_cnino
输出:match_table:
          {('2017-08-04','600636'):'*ST爱富',
          ('2017-08-01', '002659'): '中泰桥梁',
          ('2017-08-04', '002659'): '中泰桥梁',
          ('2017-08-05', '002659'): '中泰桥梁',
          ('2017-08-04', '601588'): '北辰实业',
          ('2017-08-04', '648457'): None,}

pcs_index_shai:
输入:search_index_shai,match_table
输出:md_index =pd.DataFrame(a2_list)
md_index.columns = column_list
其中:
a2_list = [['2017-08-04', '*ST爱富', '1010120170804100', None, 
'第八届第九次(临时)监事会决议公告', '10101', 100, '600636', ''],
           ['2017-08-04', '*ST爱富', '1010120170804105', None, 
'国浩律师(上海)事务所关于上海三爱富新材料股份有限公司重大资产购买
及出售暨关联交易事项交易所重组三次问询函的专项法律意见书', '10101', 100, '600636', ''],
           ['2017-08-04', '*ST爱富', '1010120170804107', None, 
'与上海三爱富新材料科技有限公司重大资产出售协议之补充协议(一)', '10101', 100, '600636', ''],
           ['2017-08-04', '*ST爱富', '1010120170804108', None, 
'中国文化产业发展集团公司承诺函', '10101', 100, '600636', ''],
           ['2017-08-04', '弘光控股', '1030120170804928', None, 
'H股公告', '10101', 100, '648457', '']
           ]

pcs_index_szhen:
输入:search_index_szhen,match_table
输出:md_index =pd.DataFrame(b2_list)
md_index.columns = column_list
其中:
b2_list = [['2017-08-01', '中泰桥梁', '1020120170801453', None, 
'关于收到《中国证监会行政许可申请终止审查通知书》的公告', '10201', 100, '002659', ''],
           ['2017-08-04', '中泰桥梁', '1020120170804189', None, 
'关于重大事项停牌的进展公告', '10201', 100, '002659', ''],
           ['2017-08-05', '中泰桥梁', '102012017080582', None, 
'2017年半年度报告摘要', '10201', 100, '002659', '']
           ]

你可能感兴趣的:(修正index程序设计)