第四次作业 张茜 201721210020

1、统计IBM股票涨、跌和持平的天数并打印输出;(涨:收盘价>开盘价、跌:收盘价<开盘价、持平:收盘价=开盘价);

#-*- coding utf-8 -*-
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt 
data = pd.read_csv('D:/IBM.csv',header=0,index_col=0,parse_dates=True) #read IBM.csv
df = pd.DataFrame(data) #define DataFrame
df3=df
DA_drop = df[df['  Open']>df['   Close']]
DA_rise = df[df['  Open']<df['   Close']]
DA_hold = df[df['  Open']==df['   Close']]
print("涨的天数",len(DA_rise.index)) #number of the days rising
print("跌的天数",len(DA_drop.index)) #number of the days dropping
print("持平天数",len(DA_hold.index)) #number of the days holding
涨的天数 243
跌的天数 233
持平天数 5

2、根据星期几来切分收盘价数据,然后分别计算周一至周五的平均价格,并找出周几的平均收盘价最高?周几的最低?对结果进行打印输出;

#print(df.columns) #set "pd.read_csv" 
weekday = []
for i in range(len(data.index)):
    weekday.append(df.index[i].weekday())
df['weekday']=weekday #append a list on the right of the DataFrame
#按weekday分组
gro_weekday=df.groupby('weekday')
def Mean_GroupbyWeekday(data,i):
    return data.get_group(i)['   Close'].mean()
output=[]
for j in range(5):
    output.append(Mean_GroupbyWeekday(gro_weekday,j))
    print("星期",j+1,"的平均收盘价为",Mean_GroupbyWeekday(gro_weekday,j))
print("最高平均收盘价为星期",output.index(max(output)))
print("最低平均收盘价为星期",output.index(min(output)))
星期 1 的平均收盘价为 154.1264042696629
星期 2 的平均收盘价为 153.97848494949505
星期 3 的平均收盘价为 153.9971711313132
星期 4 的平均收盘价为 154.26010354639175
星期 5 的平均收盘价为 154.08031008247426
最高平均收盘价为星期 3
最低平均收盘价为星期 1

3、统计2017年每个月的股票开盘天数并打印输出;

#按年分组
gro_year=df[df3.index.year==2017]
#print(gro_year)
month = []
for i in range(len(gro_year.index)):
    month.append(gro_year.index[i].month)
gro_year['month']=month #append a list on the right of the DataFrame
gro_month=gro_year.groupby('month')
def Days_GroupbyMonth(data,i):
    return len(data.get_group(i).index)
for k in range(11):
    print("2017年",k+1,"月,开盘天数",Days_GroupbyMonth(gro_month,k+1))
2017年 1 月,开盘天数 20
2017年 2 月,开盘天数 19
2017年 3 月,开盘天数 23
2017年 4 月,开盘天数 19
2017年 5 月,开盘天数 22
2017年 6 月,开盘天数 22
2017年 7 月,开盘天数 20
2017年 8 月,开盘天数 23
2017年 9 月,开盘天数 20
2017年 10 月,开盘天数 22
2017年 11 月,开盘天数 19


C:\ProgramData\Anaconda3\lib\site-packages\ipykernel\__main__.py:7: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy

4、统计2017年每个月的总成交量,并以柱状图的形式绘制出来,要求设置横坐标和纵坐标轴标签、图的题目,横坐标轴刻度标签为月份,并标注出最高和最低总成交量。

def Volume_GroupbyMonth(data,i):
    temp=data.get_group(i)
    return temp['   Volume'].sum()
vol_month=[]
for k in range(11):
    vol_month.append(Volume_GroupbyMonth(gro_month,k+1))
plt.rcParams['font.sans-serif'] = ['FangSong'] # 指定默认字体
X = [1,2,3,4,5,6,7,8,9,10,11]  
Y = vol_month
#fig = plt.figure()  
plt.bar(X,Y,0.5,color="green")  
plt.xlabel("月份")  
plt.ylabel("月成交量")  
plt.title("2017年各月成交量")    
plt.annotate("最高值",xy=(vol_month.index(max(vol_month))+1,max(vol_month)))
plt.annotate("最低值",xy=(vol_month.index(min(vol_month))+1,min(vol_month)))
plt.show()    
plt.savefig("2017年各月成交量.jpg") 

png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值