Python数据分析例题
Part 1
task 1
任务1: 在 Python 中使用列表数据结构并向两个列表中分别输入表 1中的指数名称和收盘价。同时,在包含指数名称的列表中,依次访问“富时 100 指数”“沪深 300 指数”这两个元素;在包含收盘价的列表中,依次找出“15437.5100”“28458.4400”这两个元素的索引值。
#创建股票数据列表
s_names=['道琼斯工业平均指数','富时100指数','法兰克福DAX指数','巴黎CAC40指数','日经225指数','恒生指数',
'沪深300指数']
s_price=[34207.8398,7018.0500,15437.5100,6386.4100,28317.8300,28458.4400,5134.1483]
#查找索引
print(s_names.index('沪深300指数'),s_names.index('富时100指数'),s_price.index(15437.5100),s_price.index(28458.4400))
6 1 2 5
建立字典更方便。或者使用二位列表。
# 创建股票数据字典
stocks_price={'道琼斯工业平均指数':34207.8398,'富时100指数':7018.0500,'法兰克福DAX指数':15437.5100, '巴黎CAC40指数':6386.4100,
'日经225指数':28317.8300,'恒生指数':28458.4400,'沪深300指数':5134.1483}
stocks_price
print(stocks_price['富时100指数'])
7018.05
task2
当完成任务1 以后,你突然发现遗漏了表2 中的 4 个重要股票指数,因此需要将表2中的这些新信息依次添加至任务1 已创建的两个列表中,并且新增的元素依次放置在列表的尾部。
在Python中对列表使用修改、添加、删除元素的操作的方法有 1.根据索引修改列表元素 2.添加元素可以使用append函数在列表末尾添加,也可以使用insert函数在指定位置添加 3.删除元素的方法:使用del语句删除元素(前提是知道元素的位置);使用pop函数从栈顶弹出元素,默认弹出末尾元素,也可以指定位置; 4.根据值删除元素(已知值的前提下)
#在末尾添加新的股票信息
s_names.append('多伦多综指')
s_names.append('海峡时报指数')
s_names.append('首尔综指')
s_names.append('台湾加权指数')
print(s_names)
s_price.append(19527.1008)
s_price.append(3117.8900)
s_price.append(3156.4200)
s_price.append(16302.0596)
print(s_price)
['道琼斯工业平均指数', '富时100指数', '法兰克福DAX指数', '巴黎CAC40指数', '日经225指数', '恒生指数', '沪深300指数', '多伦多综指', '海峡时报指数', '首尔综指', '台湾加权指数'] [34207.8398, 7018.05, 15437.51, 6386.41, 28317.83, 28458.44, 5134.1483, 19527.1008, 3117.89, 3156.42, 16302.0596]
task3
任务3: 当完成任务 2 以后,B 公司出台针对“优势全球配置指数”的新编制指引,要求不再跟踪“法兰克福 DAX 指数”和“巴黎 CAC40 指数”,而改为跟踪“欧元区斯托克 50 指数”。对此,你需要在任务 2 的编程基础上,删除相应的指数名称与对应的收盘价,并且在两个列表中索引值均是 2 的位置分别插入“欧元区斯托克 50 指数”以及对应的收盘价 4025.7800 点。
#使用remove函数删除指定值
s_names.remove('法兰克福DAX指数')
s_names.remove('巴黎CAC40指数')
del s_price[2]
del s_price[3]
#insert
s_names.insert(2,'欧元区斯托克50指数')
s_price.insert(2,4025.7800)
print(s_names)
print(s_price)
['道琼斯工业平均指数', '富时100指数', '欧元区斯托克50指数', '日经225指数', '恒生指数', '沪深300指数', '多伦多综指', '海峡时报指数', '首尔综指', '台湾加权指数'] [34207.8398, 7018.05, 4025.78, 6386.41, 28458.44, 5134.1483, 19527.1008, 3117.89, 3156.42, 16302.0596]
task4
你希望查看指数的大小关系,因此需要针对包含收盘价的列表,将元素先由小到大排列,然后由大到小排列。最后,你因一时疏忽删除了收盘价列表中的全部元素。
#价格由小到大排序 s_price.sort() print(s_price) s_price.sort(reverse=True) print(s_price) s_price.clear() print(s_price)
[3117.89, 3156.42, 4025.78, 5134.1483, 6386.41, 7018.05, 16302.0596, 19527.1008, 28458.44, 34207.8398] [34207.8398, 28458.44, 19527.1008, 16302.0596, 7018.05, 6386.41, 5134.1483, 4025.78, 3156.42, 3117.89] []
part2
task1
运用 Python 中的 lambda 函数自定义一个计算变量样本的算术平均值的函数,并且运用该函数依次计算 2021 年 5 月 10 日至 28 日期间 3 个月期 Shibor 、 3 个月期美元 Libor 以及 3 个月期Euribor 的平均值。
注:在Python中lambda函数的结构为:
lambda [arg1 [,arg2,.....argn]]:expression 冒号:左边arg1~argn是传入参数,可以传入多个值,也可以添加默认值,跟正常函数一样,冒号:右边是expression,参数的表达式。表达式中出现的参数需要在:左边中有定义,注意: 表达式只能是单行
#使用def语句定义函数 def sum(arg1, arg2): total = arg1 + arg2 return total sum(10, 20)
30
使用lambda定义匿名函数 lambda arg1, arg2: arg1 + arg2 # arg1, arg2可以传入默认值 调用lambda函数的方法 1.赋值法; 2.把lambda用括号括起来,在后面写上参数 3.作为参数传入其他函数 4.lambda函数作为返回值
#1.通过赋值调用lambda函数
#例如计算字符串单词数量
f=lambda str:len(str.split())
f=('Marx')
#2.加括号
(lambda str:len(str.split()))('hello world')
#3.作为参数传入其他函数
#例如
list=['marx','hello world','jupyter']
list.sort(key=lambda str:len(str.split()))
#4.lambda函数作为返回值
def f(a,b,c):
return lambda x:a*x**2+b*x+c
g=f(3,2,1)
g(3)
34
使用map函数进行科学计算,结合map和lambda函数进行科学计算 map函数语法结构为:
def square(x) : # 计算平方数 return x ** 2 map(square, [1,2,3,4,5]) # 计算列表各个元素的平方 [1, 4, 9, 16, 25] map(lambda x: x ** 2, [1, 2, 3, 4, 5]) # 使用 lambda 匿名函数 [1, 4, 9, 16, 25] # 提供了两个列表,对相同位置的列表数据进行相加 map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10]) [3, 7, 11, 15, 19]
#解题
#创建列表
shibor_3m=[0.02542,0.02536,0.02532,0.02525,0.02521,0.02514,0.0251,0.02505,0.02497,0.02489,0.0249,
0.02485,0.02479,0.02474,0.02476]
libor_3m=[0.001675,0.001603,0.0016541,0.001559,0.001551,0.001496,0.001553,0.001493,0.001501,0.00147,
0.001409,0.001385,0.00135,0.001346,0.001314]
euribor_3m=[-0.005330,-0.005330,-0.005390,-0.005410,-0.005490,-0.005480,-0.005530,-0.005520,-0.005450,
-0.005430,-0.005420,-0.005380,-0.005370,-0.005400,-0.005430]
mean_by=lambda x:sum(x)/len(x)
mean_shibor=mean_by(x=shibor_3m)
mean_libor=mean_by(x=libor_3m)
mean_euribor=mean_by(x=euribor_3m)
print(mean_shibor,mean_libor,mean_euribor)
0.025049999999999996 0.001490606666666667 -0.005424
通过计算求出SHIB0R、libor、euribor的值分别为:0.025049999999999996 0.001490606666666667 -0.005424
task2
运用 Python 的 def 语法并结合 for 语句自定义一个计算变量波动率的函数,同时运用该函数分别计算 3 个月期 Shibor 、 3 个月期美元 Libor 以及 3 个月期 Euribor 的波动率。
#计算波动率
def volitility(lst):
mean=mean_by(lst)
deviation=0
for i in lst:
deviation+=(i-mean)**2
return (deviation/(len(lst)-1)**1/2)
print(volitility(shibor_3m))
print(volitility(libor_3m))
print(volitility(euribor_3m))
4.889285714285866e-09 1.214317906349203e-09 3.1557142857143084e-10
计算得出三者的波动率分别为4.889285714285866e-09、1.214317906349203e-09、3.1557142857143084e-10
task3
比较均值和波动率大小关系
从前面得出的结果来看,SHIBOR的均值最大,LIBOR次之,EURIBOR最小;而从波动率上来看,SHIBOR波动率最大,LIBOR次之,EURIBOR最小。
Part3
task1
任务1: 创建包含每只科技股的日涨跌幅的列表,并且要求每只股票对应一个列表。
#创建列表 aapi = [-.025804,-.0074109,-.024938,-.017920,-.019845,-.009259,-.011246,-.001282,.021012,-.014767,.013314,-.001574,-.000394,-.012377,-.005348] amzn =[-.030721,.010475,-.022324,.003024,.019431,.014735,-.011653,-.000149,.004914,-.013733,.013084,.004333,.001875,-.010735,-0.002179] ibm = [0.004881,-0.013341,-0.020247,0.020311,0.003537,0.002972,-0.008270,-0.005003,0.004819,0.005977,-0.000138,-0.006426,-0.002851,0.003069,-0.000556] csco = [-0.005053,-0.006208,-0.023282,0.0017248,0.007811,0.000756,-0.000189,-0.008691,0.007242,-0.007947,0.018310,-0.001498,-0.007503,0.000189,-0.000378]
task2
访问包含苹果公司股价日涨跌幅的列表,找出涨幅首次超过 2% 的交易日之前的全部交易日的涨跌幅数据,这就相当于首次访问到涨幅超出 2% 时就立刻终止访问,并且输出已经访问过的全部数据。
for i in aapi:
if i>=0.02 or i<=-0.02:
print(i)
break
else:
print(i)
-0.025804
task3\4
任务3: 访问包含亚马逊公司股价日涨跌幅的列表,找出交易日当天股票是下跌的全部数据。
任务4: 访问包含IBM公司股价日涨跌幅的列表,找出日涨跌幅处于[-0.5%,0.5%]的数据并创建一个新列表;同时,访问包含思科公司股价日涨跌幅的列表,找出日涨跌幅超过0.7%的数据并创建一个新列表。
for i in amzn:
if i>=0:
continue
else:
print(i)
-0.030721 -0.022324 -0.011653 -0.000149 -0.013733 -0.010735 -0.002179
#IBM
new_list=[]
for i in ibm:
if i<-0.005 or i>0.005:
continue
else:
new_list.append(i)
print(new_list)
[0.004881, 0.003537, 0.002972, 0.004819, -0.000138, -0.002851, 0.003069, -0.000556]
#思科公司
new_list=[]
for i in csco:
if i<=0.007 and i>=-0.007:
continue
else:
new_list.append(i)
print(new_list)
[-0.023282, 0.007811, -0.008691, 0.007242, -0.007947, 0.01831, -0.007503]
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)