方差:当数据分布比较分散(即数据在平均数附近波动较大)时,各个数据与平均数的差的平方和
较大,方差就较大;当数据分布比较集中时,各个数据与平均数的差的平方和较小。因此方差越
大,数据的波动越大;方差越小数据的波动就越小
标准差:标准差 = 方差的算术平方根
df.var() # 方差
df.std() # 标准差
其他的数学函数:
df.count() # 非空的数量
df.count(axis=1)
df.max() # 默认求在每一列中不同行之间的最大值
df.max(axis=1)
df.min() # 最小值
df.min(axis=1)
df.median() # 中位数
df.sum() # 求和
# df.values.sum() # 求所有元素的和
df.sum(axis=1)
df.mean() # 平均值
df.mean(axis=1)
df[1].value_counts() # 统计元素出现次数
df.cumsum() # 累加
df.cumprod() # 累乘
协方差:两组数值中每对变量的偏差乘积的平均值。
协方差>0 : 表式两组变量正相关。
如果两个变量的变化趋势一致,也就是说如果其中一个大于自身的期望值时另外一个也大于自身的
期望值,那么两个变量之间的协方差就是正值;
协方差<0 : 表式两组变量负相关。
如果两个变量的变化趋势相反,即其中一个变量大于自身的期望值时另外一个却小于自身的期望
值,那么两个变量之间的协方差就是负值。
协方差=0 : 表式两组变量不相关。
df.cov() # 协方差
df[0].cov(df[1]) # 第0列和第1列的协方差
相关系数r:相关系数 = X与Y的协方差 / (X的标准差 * Y的标准差);
相关系数值的范围在-1和+1之间;
r>0为正相关,r<0为负相关。r=0表示不相关;
r 的绝对值越大,相关程度越高。
df.corr() # 所有特征相关系数
df.corrwith(df[2]) # 单一特征相关系数
连续属性离散化的目的是为了简化数据结构,数据离散化技术可以用来减少给定连续属性值的个
数。离散化方法经常作为数据挖掘的工具。
股票的涨跌幅离散化:
①先读取股票的数据,筛选出p_change数据
data = pd.read_csv("./data/stock_day.csv")
p_change= data['p_change']
②将股票涨跌幅数据进行分组
使用的工具: pd.qcut(data, q):
对数据进行分组,一般会与value_counts搭配使用
series.value_counts():统计分组次数
# 自行分组
qcut = pd.qcut(p_change, 10)
# 计算分到每个组数据个数
qcut.value_counts()
自定义区间分组: pd.cut(data, bins)
# 自己指定分组区间
bins = [-100, -7, -5, -3, 0, 3, 5, 7, 100]
p_counts = pd.cut(p_change, bins)
③股票涨跌幅分组数据变成one-hot编码
把每个类别生成一个布尔列,这些列中只有一列可以为这个样本取值为1.其又被称为独热编码。
pandas.get_dummies(data, prefix=None)
data:array-like, Series, or DataFrame prefix:分组名字
# 得出one-hot编码矩阵
dummies = pd.get_dummies(p_counts, prefix="rise")
数据聚合通常是要使每一个数组生成一个单一的数值。
数据分类处理:
分组:先把数据分为几组
用函数处理:为不同组的数据应用不同的函数以转换数据
合并:把不同组得到的结果合并起来
数据分类处理的核心: groupby()函数
# 创建DataFrame
df = pd.DataFrame(
{
'color': ['green', 'green', 'yellow', 'blue', 'blue', 'yellow', 'yellow'],
'price': [4, 5, 3, 2, 1, 7, 6]
}
)
# 按 color 来进行分组
df.groupby(by='color')
# 结果是
使用.groups属性查看各行的分组情况:
df.groupby(by='color').groups
# 结果是
{'blue': [3, 4], 'green': [0, 1], 'yellow': [2, 5, 6]}
# 分组 + 聚合
df.groupby('color').sum()
分组+聚合例子:
ddd = pd.DataFrame(
data={
"item": ["萝卜","白菜","辣椒","冬瓜","萝卜","白菜","辣椒","冬瓜"],
'color':["白","青","红","白","青","红","白","青"],
'weight': [10,20,10,10,30,40,50,60],
'price': [0.99, 1.99, 2.99, 3.99, 4, 5, 6,7]
}
)
# 对ddd进行聚合操作,求出颜色为白色的价格总和
ddd.groupby('color')['price'].sum() # Series
ddd.groupby('color')[['price']].sum() # DataFrame
ddd.groupby('color')[['price']].sum().loc[['白']]
# 对ddd进行聚合操作,分别求出萝卜的所有重量以及平均价格
df1 = ddd.groupby('item')[['weight']].sum()
df2 = ddd.groupby('item')[['price']].mean()
# 使用merge合并总重量及平均价格
display(df1, df2)
df1.merge(df2, left_index=True, right_index=True)