数据挖掘工具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()
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值