def __init_change(self): price_float_array = [float(price_str) for price_str in self.__price_array] # 通过将时间平移形成两个错开的收盘价序列,通过zip打包成为一个新的序列 # 每个元素为相邻的两个收盘价格 pp_array = [(price1, price2) for price1, price2 in zip(price_float_array[:-1], price_float_array[1:])] change_array = list(map(lambda pp: reduce(lambda a, b: round((b - a) / a, 3), pp), pp_array)) # list insert插入数据,将第一天的涨跌幅设置为0 change_array.insert(0, 0) return change_array
def __init_change(self): """ 从price_array生成change_array :return: """ price_float_array = [float(price_str) for price_str in self.__price_array] # 通过将时间平移形成两个错开的收盘价序列,通过zip打包成为一个新的序列 # 每个元素为相邻的两个收盘价格 pp_array = [(price1, price2) for price1, price2 in zip(price_float_array[:-1], price_float_array[1:])] change_array = list(map(lambda pp: reduce(lambda a, b: round((b - a) / a, 3), pp), pp_array)) # list insert插入数据,将第一天的涨跌幅设置为0 change_array.insert(0, 0) return change_array
def sample_223(show=True): """ 2.2.3 高阶函数 :return: """ stock_dict = sample_212(show=False) show_func = print if show else lambda a: a # 将字符串的的价格通过列表推导式显示转换为float类型 # 由于stock_dict是OrderedDict所以才可以直接 # 使用stock_dict.values()获取有序日期的收盘价格 price_float_array = [float(price_str) for price_str in stock_dict.values()] # 通过将时间平移形成两个错开的收盘价序列,通过zip打包成为一个新的序列, # 通过[:-1]:从第0个到倒数第二个,[1:]:从第一个到最后一个 错开形成相邻 # 组成的序列每个元素为相邻的两个收盘价格 pp_array = [(price1, price2) for price1, price2 in zip( price_float_array[:-1], price_float_array[1:])] show_func(pp_array) # list for python3 change_array = list( map(lambda pp: reduce(lambda a, b: round((b - a) / a, 3), pp), pp_array)) # list insert插入数据,将第一天的涨跌幅设置为0 change_array.insert(0, 0) show_func(change_array) price_str = '30.14, 29.58, 26.36, 32.56, 32.82' price_str = price_str.replace(' ', '') price_array = price_str.split(',') date_base = 20170118 date_array = [str(date_base + ind) for ind, _ in enumerate(price_array)] # 使用namedtuple重新构建数据结构 stock_namedtuple = namedtuple('stock', ('date', 'price', 'change')) # 通过zip分别从date_array,price_array,change_array拿数据组成 # stock_namedtuple然后以date做为key组成OrderedDict stock_dict = OrderedDict( (date, stock_namedtuple(date, price, change)) for date, price, change in zip(date_array, price_array, change_array)) show_func(stock_dict) # list for python3 up_days = list(filter(lambda day: day.change > 0, stock_dict.values())) show_func(up_days) def filter_stock(stock_array_dict, want_up=True, want_calc_sum=False): if not isinstance(stock_array_dict, OrderedDict): raise TypeError('stock_array_dict must be OrderedDict!') # python中的三目表达式的写法 filter_func = (lambda p_day: p_day.change > 0) if want_up else ( lambda p_day: p_day.change < 0) # 使用filter_func做筛选函数 want_days = list(filter(filter_func, stock_array_dict.values())) if not want_calc_sum: return want_days # 需要计算涨跌幅和 change_sum = 0.0 for day in want_days: change_sum += day.change return change_sum # 全部使用默认参数 show_func('所有上涨的交易日:{}'.format(filter_stock(stock_dict))) # want_up=False show_func('所有下跌的交易日:{}'.format(filter_stock(stock_dict, want_up=False))) # 计算所有上涨的总会 show_func('所有上涨交易日的涨幅和:{}'.format( filter_stock(stock_dict, want_calc_sum=True))) # 计算所有下跌的总会 show_func('所有下跌交易日的跌幅和:{}'.format( filter_stock(stock_dict, want_up=False, want_calc_sum=True))) return stock_dict
# 将字符串的的价格通过列表推导式显示转换为float类型 # 由于stock_dict是OrderedDict所以才可以直接 # 使用stock_dict.values()获取有序日期的收盘价格 price_float_array = [float(price_str) for price_str in stock_dict.values()] # 通过将时间平移形成两个错开的收盘价序列,通过zip打包成为一个新的序列, # 通过[:-1]:从第0个到倒数第二个,[1:]:从第一个到最后一个 错开形成相邻 # 组成的序列每个元素为相邻的两个收盘价格 pp_array = [(price1, price2) for price1, price2 in zip(price_float_array[:-1], price_float_array[1:])] pp_array # In[26]: # list(map) 配合 six.moves.map for python3 change_array = list(map(lambda pp: reduce(lambda a, b: round((b - a) / a, 3), pp), pp_array)) # list insert插入数据,将第一天的涨跌幅设置为0 change_array.insert(0, 0) change_array # In[27]: # 使用namedtuple重新构建数据结构 stock_namedtuple = namedtuple('stock', ('date', 'price', 'change')) # 通过zip分别从date_array,price_array,change_array拿数据组成 # stock_namedtuple然后以date做为key组成OrderedDict stock_dict = OrderedDict((date, stock_namedtuple(date, price, change)) for date, price, change in zip(date_array, price_array, change_array)) stock_dict
def sample_223(show=True): """ 2.2.3 高阶函数 :return: """ stock_dict = sample_212(show=False) show_func = print if show else lambda a: a # 将字符串的的价格通过列表推导式显示转换为float类型 # 由于stock_dict是OrderedDict所以才可以直接 # 使用stock_dict.values()获取有序日期的收盘价格 price_float_array = [float(price_str) for price_str in stock_dict.values()] # 通过将时间平移形成两个错开的收盘价序列,通过zip打包成为一个新的序列, # 通过[:-1]:从第0个到倒数第二个,[1:]:从第一个到最后一个 错开形成相邻 # 组成的序列每个元素为相邻的两个收盘价格 pp_array = [(price1, price2) for price1, price2 in zip(price_float_array[:-1], price_float_array[1:])] show_func(pp_array) # list for python3 change_array = list(map(lambda pp: reduce(lambda a, b: round((b - a) / a, 3), pp), pp_array)) # list insert插入数据,将第一天的涨跌幅设置为0 change_array.insert(0, 0) show_func(change_array) price_str = '30.14, 29.58, 26.36, 32.56, 32.82' price_str = price_str.replace(' ', '') price_array = price_str.split(',') date_base = 20170118 date_array = [str(date_base + ind) for ind, _ in enumerate(price_array)] # 使用namedtuple重新构建数据结构 stock_namedtuple = namedtuple('stock', ('date', 'price', 'change')) # 通过zip分别从date_array,price_array,change_array拿数据组成 # stock_namedtuple然后以date做为key组成OrderedDict stock_dict = OrderedDict((date, stock_namedtuple(date, price, change)) for date, price, change in zip(date_array, price_array, change_array)) show_func(stock_dict) # list for python3 up_days = list(filter(lambda day: day.change > 0, stock_dict.values())) show_func(up_days) def filter_stock(stock_array_dict, want_up=True, want_calc_sum=False): if not isinstance(stock_array_dict, OrderedDict): raise TypeError('stock_array_dict must be OrderedDict!') # python中的三目表达式的写法 filter_func = (lambda p_day: p_day.change > 0) if want_up else (lambda p_day: p_day.change < 0) # 使用filter_func做筛选函数 want_days = list(filter(filter_func, stock_array_dict.values())) if not want_calc_sum: return want_days # 需要计算涨跌幅和 change_sum = 0.0 for day in want_days: change_sum += day.change return change_sum # 全部使用默认参数 show_func('所有上涨的交易日:{}'.format(filter_stock(stock_dict))) # want_up=False show_func('所有下跌的交易日:{}'.format(filter_stock(stock_dict, want_up=False))) # 计算所有上涨的总会 show_func('所有上涨交易日的涨幅和:{}'.format(filter_stock(stock_dict, want_calc_sum=True))) # 计算所有下跌的总会 show_func('所有下跌交易日的跌幅和:{}'.format(filter_stock(stock_dict, want_up=False, want_calc_sum=True))) return stock_dict