數據挖掘工具pandas(十二)交叉表和透視表

一,交叉表

交叉表用於計算一列數據對於另外一列數據的分組個數(尋找兩個列之間的關係)
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()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章