一,交叉表
交叉表用於計算一列數據對於另外一列數據的分組個數(尋找兩個列之間的關係)
pandas.crosstab(value1,value2)
import numpy as np
import pandas as pd
np.random.seed(2)
day_data = np.random.normal(0,1,(500,507))
# 構造行索引列表
stock_list = ["股票"+ str(i) for i in range(day_data.shape[0])]
# 構造列索引列表
day = pd.date_range("2018-01-01",periods=day_data.shape[1],freq='B')
# 設置行、列索引
data = pd.DataFrame(day_data,index=stock_list,columns=day)
data = data.T
# 數據組列中加入week字段
week = pd.to_datetime(data.index).weekday
data["week"] = week
# 數據組列中加入是否漲幅字段
posi_reg = np.where(data["股票0"]>=0 ,1,0)
data["posi_reg"] = posi_reg
# 創建交叉表數據
wp = pd.crosstab(data["week"],data["posi_reg"])
print(wp)
# 實現比例計算
print(wp.div(wp.sum(1).astype(np.float64),axis=0))
二,透視表
import numpy as np
import pandas as pd
np.random.seed(2)
day_data = np.random.normal(0,1,(500,507))
# 構造行索引列表
stock_list = ["股票"+ str(i) for i in range(day_data.shape[0])]
# 構造列索引列表
day = pd.date_range("2018-01-01",periods=day_data.shape[1],freq='B')
# 設置行、列索引
data = pd.DataFrame(day_data,index=stock_list,columns=day)
data = data.T
# 數據組列中加入week字段
week = pd.to_datetime(data.index).weekday
data["week"] = week
# 數據組列中加入是否漲幅字段
posi_reg = np.where(data["股票0"]>=0 ,1,0)
data["posi_reg"] = posi_reg
# 創建透視圖數據
print(data.pivot_table(['posi_reg'],index=['week']))
三,圖表表示
1,柱狀圖
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
np.random.seed(2)
day_data = np.random.normal(0,1,(500,507))
# 構造行索引列表
stock_list = ["股票"+ str(i) for i in range(day_data.shape[0])]
# 構造列索引列表
day = pd.date_range("2018-01-01",periods=day_data.shape[1],freq='B')
# 設置行、列索引
data = pd.DataFrame(day_data,index=stock_list,columns=day)
data = data.T
# 數據組列中加入week字段
week = pd.to_datetime(data.index).weekday
data["week"] = week
# 數據組列中加入是否漲幅字段
posi_reg = np.where(data["股票0"]>=0 ,1,0)
data["posi_reg"] = posi_reg
# 創建交叉表數據
wp = pd.crosstab(data["week"],data["posi_reg"])
print(wp)
# 實現比例計算
pro = wp.div(wp.sum(1).astype(np.float64),axis=0)
# 柱狀圖
pro.plot(kind='bar')
plt.show()
2,嵌入的柱狀圖
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
np.random.seed(2)
day_data = np.random.normal(0,1,(500,507))
# 構造行索引列表
stock_list = ["股票"+ str(i) for i in range(day_data.shape[0])]
# 構造列索引列表
day = pd.date_range("2018-01-01",periods=day_data.shape[1],freq='B')
# 設置行、列索引
data = pd.DataFrame(day_data,index=stock_list,columns=day)
data = data.T
# 數據組列中加入week字段
week = pd.to_datetime(data.index).weekday
data["week"] = week
# 數據組列中加入是否漲幅字段
posi_reg = np.where(data["股票0"]>=0 ,1,0)
data["posi_reg"] = posi_reg
# 創建交叉表數據
wp = pd.crosstab(data["week"],data["posi_reg"])
print(wp)
# 實現比例計算
pro = wp.div(wp.sum(1).astype(np.float64),axis=0)
# 嵌入的柱狀圖
pro.plot(kind='bar',stacked=True)
plt.show()