pandas---数学函数、离散化处理、分组聚合

本文介绍了数据分析中的基本统计概念,如方差和标准差用于衡量数据波动,协方差和相关系数判断变量间关系,以及如何使用pandas进行数据离散化,如pd.qcut和pd.cut进行分组,one-hot编码处理分类变量。此外,还探讨了利用groupby进行数据分组和聚合操作,例如求和、平均值等。
摘要由CSDN通过智能技术生成

1. 数学函数

方差:当数据分布比较分散(即数据在平均数附近波动较大)时,各个数据与平均数的差的平方和

较大,方差就较大;当数据分布比较集中时,各个数据与平均数的差的平方和较小。因此方差越

大,数据的波动越大;方差越小数据的波动就越小

标准差:标准差 = 方差的算术平方根

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])  # 单一特征相关系数

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")

3. 分组聚合

 数据聚合通常是要使每一个数组生成一个单一的数值。

数据分类处理:

分组:先把数据分为几组

用函数处理:为不同组的数据应用不同的函数以转换数据

合并:把不同组得到的结果合并起来

数据分类处理的核心: 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')
# 结果是
<pandas.core.groupby.generic.DataFrameGroupBy object at 0x000002A252DC04F0>

使用.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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三月七꧁ ꧂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值