数据挖掘工具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()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章