练习数据分析
分析数据:前往下载
1. 更改列表为 Ajd Close 为 aclose
data=pd.read_csv("DataFolder/0101.csv")
data.head()
data.rename({"Adj Close":'aclose'},inplace=True)
data.columns=['Date', 'Open', 'High', 'Low', 'Close', 'aclose', 'Volume']
data.head()
2. 根据每股价格*成交股数,计算成交额
data["total_value"]=data.Close*data.Volume
data.head()
3. 画图 ,包含两个子图,子图1 为股价变化表, 子图2 为 成交量的柱状图
import matplotlib.pyplot as plt
dif=np.diff(data.Close).tolist()
dif[:10]
time=data.Date[1:]
cjl=data.loc[:,["Date","total_value"]]
cjl.head()
plt.figure(figsize=(20,20))
plt.subplot(2,1,1)
plt.plot(time,dif)
plt.subplot(2,1,2)
plt.bar(cjl.Date,cjl.total_value)
plt.show()
4. 找出股价(收盘价)最高/最低的五个交易日的信息
data.head()
data.sort_values(by="Close").head()["Date"]
data.sort_values(by="Close").tail()["Date"]
5. 统计每周的平均交易价格和平均成交额
data.head()
data.Date=data.Date.apply(lambda x: pd.to_datetime(x,format="%Y-%m-%d"))
data.tail()
data.Date=pd.DataFrame(pd.date_range(start="20120528",end="20180223"))
data.head()
data["weekday"]=data.Date.apply(lambda x:x.weekday())
data["year"]=data.Date.apply(lambda y: y.year)
data["week_of_year"]=data.Date.apply(lambda z:z.week)
data["quarter"]=data.Date.apply(lambda q:q.quarter)
data1=data.drop(["Open","High","Low"],axis=1)
因为在执行的时候发现总是会出现有的8天这种情况。经过检查,发现2013年的最后一天居然被归到了当年1月的第一周。下面是单独取出最后一周的方法。
data1[(data.week_of_year==1) & (data1.year==2012) &(data1.week_of_year<10) &(data1.quarter==4) ]
下面对于每一周求和
l_tmp=[]
l_td=[]
ll=[]
l_week=[]
lll_w=[]
t_value=[]
for y in range(2012,2019):
for i in range(1,54):
td=data1[(data1.week_of_year==i) & (data1.year==y) & (data1.quarter)].loc[:,["aclose"]]
td2=data1[(data1.week_of_year==i) & (data1.year==y) & (data1.quarter)].loc[:,["Volume"]]
if len(td)>7:
ll.append(y)
ll.append(i)
if len(td)>0:
l_td.append(len(td))
l_tmp.append(float(td.sum()))
t_value.append(float(td2.sum()))
l_week.append(int(i))
mm=data1[(data1.week_of_year==1) & (data1.year==y) &(data1.week_of_year<10) &(data1.quarter==4)]
if len(mm)>0:
l_td.append(len(mm))
l_tmp.append(float(mm.loc[:,["aclose"]].sum()))
t_value.append(float(mm.loc[:,["Volume"]].sum()))
l_week.append(int(54))
lll_w.append(mm.loc[:,["aclose"]].sum())
下图展示的是列表里的内容 下来将列表重新转化为DateFrame.
res={"week":l_week,"week_sum":l_tmp,"days":l_td,"Volume":t_value}
data2=pd.DataFrame(res)
data2.head()
data2["average_week"]=data2.week_sum/data2.days
data2["average_Volume"]=data2.Volume/data2.days
data2.head()
data2["average_price_in_a_week"]=data2.average_week*data2.average_Volume
截图比较长,因此放出部分内容。
6. 找出波动率最高的5个交易日信息
data["bo_dong_l"]=(data.High-data.Low)/data.Low
data.sort_values(by="bo_dong_l",ascending=False)[:5]