Python量化教程 常用函数
# -*- coding: utf-8 -*- # @Author: fangbei # @Date: 2017-08-26 # @Original: price_str = '30.14, 29.58, 26.36, 32.56, 32.82' price_str = price_str.replace(' ', '') #删除空格 price_array = price_str.split(',') #转成数组 date_array = [] date_base = 20170118 ''' # for 循环 for _ in range(0, len(price_array)): date_array.append(str(date_base)) date_base += 1 ''' #推导式comprehensions(又称解析式),是Python的一种独有特性。推导式是可以从一个数据序列构建另一个新的数据序列的结构体。 #列表推导式 date_array = [str(date_base + ind) for ind, _ in enumerate(price_array)] print(date_array) # ['20170118', '20170119', '20170120', '20170121', '20170122'] # zip函数 stock_tuple_list = [(date, price) for date, price in zip(date_array, price_array)] print(stock_tuple_list) # [('20170118', '30.14'), ('20170119', '29.58'), ('20170120', '26.36'), ('20170121', '32.56'), ('20170122', '32.82')] #字典推导式 stock_dict = {date: price for date, price in zip(date_array, price_array)} print(stock_dict) # {'20170118': '30.14', '20170119': '29.58', '20170120': '26.36', '20170121': '32.56', '20170122': '32.82'} # 可命名元组 namedtuple from collections import namedtuple stock_nametuple = namedtuple('stock', ('date', 'price')) stock_nametuple_list = [stock_nametuple(date, price) for date, price in zip(date_array, price_array)] print(stock_nametuple_list) # [stock(date='20170118', price='30.14'), stock(date='20170119', price='29.58'), stock(date='20170120', price='26.36'), stock(date='20170121', price='32.56'), stock(date='20170122', price='32.82')] # 有序字典 OrderedDict from collections import OrderedDict stock_dict = OrderedDict((date, price) for date, price in zip(date_array, price_array)) print(stock_dict.keys()) # odict_keys(['20170118', '20170119', '20170120', '20170121', '20170122']) #最小收盘价 print(min(zip(stock_dict.values(), stock_dict.keys()))) # ('26.36', '20170120') #lambad函数 func = lambda x:x+1 #以上lambda等同于以下函数 def func(x): return(x+1) #找出收盘价中第二大的价格 find_second_max_lambda = lambda dict_array : sorted(zip(dict_array.values(), dict_array.keys()))[-2] print(find_second_max_lambda(stock_dict)) # ('32.56', '20170121') #高阶函数 #将相邻的收盘价格组成tuple后装入list price_float_array = [float(price_str) for price_str in stock_dict.values()] pp_array = [(price1, price2) for price1, price2 in zip(price_float_array[:-1], price_float_array[1:])] print(pp_array) # [(30.14, 29.58), (29.58, 26.36), (26.36, 32.56), (32.56, 32.82)] from functools import reduce #外层使用map函数针对pp_array()的每一个元素执行操作,内层使用reduce()函数即两个相邻的价格, 求出涨跌幅度,返回外层结果list change_array = list(map(lambda pp:reduce(lambda a,b: round((b-a) / a, 3),pp), pp_array)) # print(type(change_array)) change_array.insert(0,0) print(change_array) # [0, -0.019, -0.109, 0.235, 0.008] #将涨跌幅数据加入OrderedDict,配合使用namedtuple重新构建数据结构stock_dict stock_nametuple = namedtuple('stock', ('date', 'price', 'change')) stock_dict = OrderedDict((date, stock_nametuple(date, price, change)) for date, price, change in zip(date_array, price_array, change_array)) print(stock_dict) # OrderedDict([('20170118', stock(date='20170118', price='30.14', change=0)), ('20170119', stock(date='20170119', price='29.58', change=-0.019)), ('20170120', stock(date='20170120', price='26.36', change=-0.109)), ('20170121', stock(date='20170121', price='32.56', change=0.235)), ('20170122', stock(date='20170122', price='32.82', change=0.008))]) #用filter()进行筛选,选出上涨的交易日 up_days = list(filter(lambda day: day.change > 0, stock_dict.values())) print(up_days) # [stock(date='20170121', price='32.56', change=0.235), stock(date='20170122', price='32.82', change=0.008)] #定义函数计算涨跌日或涨跌值 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') filter_func = (lambda day: day.change > 0) if want_up else (lambda day: day.change < 0) 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 #偏函数 partial from functools import partial filter_stock_up_days = partial(filter_stock, want_up=True, want_calc_sum=False) filter_stock_down_days = partial(filter_stock, want_up=False, want_calc_sum=False) filter_stock_up_sums = partial(filter_stock, want_up=True, want_calc_sum=True) filter_stock_down_sums = partial(filter_stock, want_up=False, want_calc_sum=True) print('所有上涨的交易日:{}'.format(list(filter_stock_up_days(stock_dict)))) print('所有下跌的交易日:{}'.format(list(filter_stock_down_days(stock_dict)))) print('所有上涨交易日的涨幅和:{}'.format(filter_stock_up_sums(stock_dict))) print('所有下跌交易日的跌幅和:{}'.format(filter_stock_down_sums(stock_dict))) # 所有上涨的交易日:[stock(date='20170121', price='32.56', change=0.235), stock(date='20170122', price='32.82', change=0.008)] # 所有下跌的交易日:[stock(date='20170119', price='29.58', change=-0.019), stock(date='20170120', price='26.36', change=-0.109)] # 所有上涨交易日的涨幅和:0.243 # 所有下跌交易日的跌幅和:-0.128
Python量化教程 常用函数的更多相关文章
- Python 数据类型,常用函数方法分类
Python基本数据类型:(int) 字符串(str)列表(list)元组(tuple)字典(dict)布尔(bool) python中可以简单使用 类型(数据)创建或转换数据 例: #字符串转数字 ...
- Python math库常用函数
math库常用函数及举例: 注意:使用math库前,用import导入该库>>> import math 取大于等于x的最小的整数值,如果x是一个整数,则返回x>>> ...
- Python数据分析--Numpy常用函数介绍(2)
摘要:本篇我们将以分析历史股价为例,介绍怎样从文件中载入数据,以及怎样使用NumPy的基本数学和统计分析函数.学习读写文件的方法,并尝试函数式编程和NumPy线性代数运算,来学习NumPy的常用函数. ...
- python笔记-正则表达式常用函数
1.re.findall()函数 语法:re.findall(pattern,string,flags=0) --> list(列表) 列出字符串中模式的所有匹配项,并作为一个列表返回.如果无匹 ...
- Python 学习:常用函数整理
整理Python中常用的函数 一,把字符串形式的list转换为list 使用ast模块中的literal_eval函数来实现,把字符串形式的list转换为Python的基础类型list from as ...
- Python基础:常用函数
1:enumerate enumerate(sequence, start=0) 该函数返回一个enumerate对象(一个迭代器).其中的sequence参数可以是序列.迭代器或者支持迭代的其他对象 ...
- Python OS模块常用函数说明
Python的标准库中的os模块包含普遍的操作系统功能.如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的.即它允许一个程序在编写后不需要任何改动,也不会发生任何问题,就可以在Linux和Wi ...
- .Net程序员之Python基础教程学习----函数和异常处理[Fifth Day]
今天主要记录,Python中函数的使用以及异常处理. 一.函数: 1.函数的创建以及调用. def Add(val1,val2): return val1+val2; print Add( ...
- Python基础(一)常用函数
1.map() 此函数可以,将列表内每一个元素进行操作,并返回列表 原型 map(function,[list]) def fc(x): return x * 2 print(map(fc,[1,2, ...
随机推荐
- [转]MySQL远程连接ERROR 2003 (HY000):Can't connect to MySQL server on'XXXXX'(111) 的问题
问题描述: 从一台Linux远程连接另一台linux上的MySQL, 出现ERROR 2003 (HY000): Can't connect to MySQL server on 'xxx.xxx.x ...
- Javascript农历与公历相互转换
/**用法 * Lunar.toSolar(2016, 6, 3); 农历转化公历 * Lunar.toLunar(2016, 7, 6); 公历转化农历 */ var Lunar = { MIN_Y ...
- [转]oracle存储过程、声明变量、for循环
oracle存储过程.声明变量.for循环 1.创建存储过程 create or replace procedure test(var_name_1 in type,var_name_2 out ty ...
- ubuntu-15.04-desktop-amd64.iso:ubuntu-15.04-desktop-amd64:安装Oracle11gR2
ubuntu 桌面版的安装不介绍. 如何安装oracle:核心步骤和关键点. ln -sf /bin/bash /bin/sh ln -sf /usr/bin/basename /bin/basena ...
- Socket.BeginConnect 方法
Socket.BeginConnect 方法 (IPAddress, Int32, AsyncCallback, Object) 开始一个对远程主机连接的异步请求. 主机由 IPAddress 和端口 ...
- 提高Web性能的前端优化技巧总结
- linux下mysql 启动命令
1,使用service 启动.关闭MySQL服务 service mysql start service mysql stop service mysql restart 运行上面命令,其实是serv ...
- ubuntu 执行make menuconfig ARCH=arm
1.ubuntu 执行make menuconfig ARCH=arm出错了!! *** Unable to find the ncurses libraries or the *** require ...
- socket小实例
服务端 using System; using System.Collections.Generic; using System.Linq; using System.Text; using Syst ...
- 第四章 Spring.Net 如何管理您的类___对象的自动装配
由于这几天都比较忙,所以对笔记暂时没有更新. Spring.NET具有自动装配的能力,也就是说,Spring.NET可以通过对象的定义自动分辨某个对象的协作对象.自动装配是针对单个对象(按:针对每个协 ...