0%

【Python】练习数据分析

练习数据分析

分析数据:前往下载

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]