Python - Pandas - 数据分析(2)

news2024/9/28 13:28:08

pandas数据分析

Pandas数据分析2

  • 前言
    • 常用的21种统计方法
      • describe():
      • numeric_only:
      • 偏度skewness:
        • 功能:
        • 含义:
        • 计算公式:
        • 演示:
      • 峰度值:
        • 用途:
        • 数值:
        • 计算公式:
        • 演示:
      • cov协方差
        • 计算公式:
        • 数值:
        • 操作对象:
        • 演示:
      • corr相关系数:
        • 计算公式:
        • 数值:
        • 操作对象:
        • 演示:
    • 常用的5种数据处理函数:
      • map:
        • 功能:
        • 字典map:
        • 函数map:
      • apply:
        • 功能:
        • apply匿名lambda:
        • apply内置函数
        • apply自己的函数:
      • groupy()
        • 不必having:
      • groupby + apply:
        • 自定义排序:
        • 获取每组最值:
      • agg:
        • 功能:
        • 字典指定内置函数:
        • groupby + agg:
      • lambda匿名函数:
      • lambda匿名函数数组:
    • 常用的两种文件操作:
      • 读写csv文件:
        • 读csv:
        • 写csv:
      • 读写excel文件:
        • 读excel:
        • 写excel:

前言

Vue框架:从项目学Vue
OJ算法系列:神机百炼 - 算法详解
Linux操作系统:风后奇门 - linux
C++11:通天箓 - C++11

一行检查是否下载过Pandas:
pip list
一行下载:
pip install pandas

常用的21种统计方法

函数功能
count统计非空值个数
max最大值
min最小值
sum求和
prod乘积
cumsum累和
cumprod累乘
cummax累积最大值
cummin累积最小值
mean平均值
std标准差
var方差
median算数中位数
abs绝对值
unique唯一值列表
nunique唯一值个数
value_counts唯一值及其频数
skew三阶偏度
kurt四阶峰度
corr相关系数矩阵
cov协方差矩阵

describe():

describe将显示所有数值型特征的count(),mean(),std(),max&min()等
import pandas as pd
dataframe = pd.DataFrame({
	'a' : [1, 2, 3, 4, 5],
	'b' : [1.1, 1.2, 1.3, 1.4, 1.5],
	'c' : ['a', 'b', 'c', 'd', 'e']
})
dataframe.describe()

describe()

numeric_only:

  • 以上很多运算都只支持对int和float运算,其他类型需要对+等运算符重载
  • 若此类运算未对运算符 或 运算函数重载,则可能自动忽略,也可能报错终止
  • 大多情况上述统计学函数都搭配slice切片使用
# 均值
print(DataFrame.mean())

# 标准差
print(DataFrame.std())

# 累和
print(DataFrame.cumsum())

# 累乘
print(DataFrame.iloc[:, 0:2].cumprod())

cumsum

偏度skewness:

功能:

  • 用于描述数据的不对称性

含义:

  • skewness == 0:正态分布
  • skewness > 0:正偏差数值较大,数据右侧有很多极端值,整体分布右偏/正偏
  • skewness < 0:负偏差数值较大,数据左侧有很多极端值,整体分布左偏/负偏

计算公式:

  • s k e w n e s s = E [ ( x − E ( x ) ) / ( D ( x ) ) 3 ] skewness = E[(x - E(x)) / (\sqrt{D(x)})^3] skewness=E[(xE(x))/(D(x) )3]

演示:

import numpy as np
dataframe = pd.DataFrame({
    'id' : np.arange(10),
    #等比数列:起点、终点、个数,幂
    'value' : np.logspace(1, 10, 10, base = 2),
    #等差数列:起点、终点、个数
    'weight' : np.linspace(1, 10, 10)           
})
print(dataframe)
#skew()>0,value右侧异常值比较多
print(dataframe.skew())

skew

  • 画图看看:
#挑选数值型特征
num_feats = dataframe.dtypes[dataframe.dtypes != 'object'].index
import matplotlib.pyplot as plt
plt.figure(figsize = (8, 8))#8inch * 8inch
fig, ax = plt.subplots(2, 2) 
for row in range(2):
    for col in range(2):
        if row*2+col > 2 :
            continue
        data = dataframe[num_feats[row*2+col]]
        ax[row][col].plot(data.index, data.values)
        ax[row][col].set_title(f'{num_feats[row*2+col]}')
# 自动保持子图之间的正确间距。
fig.tight_layout()
plt.show()

skew

峰度值:

用途:

  • 描述某个变量所有取值分布形态陡缓程度的统计量,即数据分布的尖锐程度

数值:

  1. kurtosis == 0:陡缓程度和正态分布相同
  2. kurtosis > 0:比正态分布高峰陡峭,尖顶峰
  3. kurtosis < 0:比正态分布高峰平和,平顶峰

计算公式:

K u r t o s i s = E [ ( x − E ( x ) ) / ( D ( x ) ) 4 ] − 3 Kurtosis = E[(x - E(x)) / (\sqrt{D(x)})^4] - 3 Kurtosis=E[(xE(x))/(D(x) )4]3

演示:

  • 继续使用上组数据演示:
print(dataframe.kurt())

kurt

cov协方差

计算公式:

c o v ( X , Y ) = E [ ( X − E [ X ] ) ∗ ( Y − E [ Y ] ) ] , cov(X,Y)=E[ (X-E[X]) * (Y-E[Y]) ], cov(X,Y)=E[(XE[X])(YE[Y])],

  • E[X]代表变量X的期望。
  • 从直观上来看,协方差表示的是两个变量总体误差的期望。
  • 如果其中一个大于自身的期望值时另外一个也大于自身的期望值,两个变量之间的协方差就
    是正值;
  • 如果其中一个变量大于自身的期望值时另外一个却小于自身的期望值,那么两个变量之间的协方差就是负值。
  • 如果X与Y是统计独立的,那么二者之间的协方差就是0

数值:

  • corr()返回相关系数,介于[-1, 1]
  • |-1| 和 |1| 表示线性相关
  • 正负号表示正负相关

操作对象:

  • 对于含有n个特征值的DataFrame,两两之间计算协方差,构成n*n的矩阵
  • 协方差矩阵中对角线上是方差,非对角线是协方差

演示:

  • 继续使用以上数据:
dataframe.cov()

cov

corr相关系数:

计算公式:

  • 基于cov协方差
    ρ X Y = C o v ( X , Y ) / [ D ( X ) ] [ D ( Y ) ] ρXY = Cov(X,Y) / \sqrt{[D(X)]} \sqrt{[D(Y)}] ρXY=Cov(X,Y)/[D(X)] [D(Y) ]

数值:

  • corr()计算介于[-1, 1]的相关系数
  • |-1| 和 |1| 表示线性相关
  • 正负号表示正负相关

操作对象:

  • 对于含有n个特征值的DataFrame,两两之间计算相关系数,构成n*n的矩阵
  • 相关系数矩阵中对角线上永远是1

演示:

  • 继续使用上述数据:
dataframe.corr()

corr

常用的5种数据处理函数:

map:

  • 示意图:
    map

功能:

  • 依据给定的函数 / 字典,将DataFrame / Series中一列内每个值转化为其他数值

字典map:

  • 为DataFrame / Series .map()方法,传递一个字典
#转型字典
gendermap = {'F' : 0, 'M' : 1}

#数据
dataframe = pd.DataFrame({
    "name":['Jack', 'Alice', 'Lily', 'Mshis', 'Gdli', 'Agosh', 'Filu', 'Mack', 'Lucy', 'Pony'],
    "gender":['F', 'M', 'F', 'F', 'M', 'F', 'M', 'M', 'F', 'F'],
    "age":np.random.randint(15,50,10),
    "salary":np.random.randint(5,50,10),
    })

#map方法
dataframe['gender'] = dataframe['gender'].map(gendermap)
print(dataframe)

dictionary_map

函数map:

  • 为DataFrame / Series 的.map()传递进入一个函数指针
dataframe = pd.DataFrame({
    "name":['Jack', 'Alice', 'Lily', 'Mshis', 'Gdli', 'Agosh', 'Filu', 'Mack', 'Lucy', 'Pony'],
    "gender":['F', 'M', 'F', 'F', 'M', 'F', 'M', 'M', 'F', 'F'],
    "age":np.random.randint(15,50,10),
    "salary":np.random.randint(5,50,10),
    })
print(dataframe)
print('*'*40)

#转型函数
def gender_map(x) :
    gender = 0 if x == 'F' else 1
    return gender

dataframe['gender'] = dataframe['gender'].map(gender_map)

print(dataframe)

function_map

apply:

功能:

  • 遍历整个Series 和 DataFrame,对每个元素运行指定的函数,可以是自定义函数,也可以是上述的21种内置函数等等

apply匿名lambda:

df=pd.DataFrame({
    "name":['Jack', 'Alice', 'Lily', 'Mshis', 'Gdli', 'Agosh', 'Filu', 'Mack', 'Lucy', 'Pony'],
    "gender":['F', 'M', 'F', 'F', 'M', 'F', 'M', 'M', 'F', 'F'],
    "age":np.random.randint(15,50,10),
    "salary":np.random.randint(5,50,10),
    })

print(df)
print('*'*40)
print(df[['age', 'salary']].apply(lambda x: x*2))

apply内置函数

  • 确定可以执行内置函数的是哪些列
#传入的函数也可以是pandas和python内置函数
print(df[['age', 'salary']].apply(max))
print('*'*30)
print(df[['age', 'salary']].apply(np.mean))

apply内置函数

apply自己的函数:

#按值遍历调用
def apply_func(row):
    a = row['name']
    b = row['gender']
    c = row['age']
    return f'name:{a},gender:{b}, age:{c}'

#原地修改,增加一列all
df["all"] = df.apply(lambda row:apply_func(row), axis = 1)
#axis = 1,每次row为dataframe内的一行
print(df)

apply个人函数

groupy()

  • 功能同于Mysql中的groupby(),by参数可以传递入多个特征值
  • 传递入多个特征值时,分组是多个特征的排列组合,见下面的dfc.groupby(by=[‘gender’,‘age’])

不必having:

  • groupby()之后的操作都是针对每一组内部
import numpy as np
dfc=pd.DataFrame({
    "name":['Jack', 'Alice', 'Lily', 'Mshis', 'Gdli', 'Agosh', 'Filu', 'Mack', 'Lucy', 'Pony'],
    "gender":['F', 'M', 'F', 'F', 'M', 'F', 'M', 'M', 'F', 'F'],
    "age":np.random.randint(25,28,10),
    "salary":np.random.randint(5,50,10),
    })

#划分成组后求对应组的和结果
print(dfc.groupby(by='gender').sum())
print("*"*25)
# groupby查传入的可以时多个属性
print(dfc.groupby(by=['gender','age']).sum())

groupby()

groupby + apply:

  • apply()传入参数:
    1. lambda
    2. 内置func()
    3. 个人所写函数
  • apply对象:
    经过groupby()之后的多个小组,也就是子DataFrame

自定义排序:

  • 对于每个子DataFrame执行sort_values()即可
df=pd.DataFrame({
    "name":['Jack', 'Alice', 'Lily', 'Mshis', 'Gdli', 'Agosh', 'Filu', 'Mack', 'Lucy', 'Pony'],
    "gender":['F', 'M', 'F', 'F', 'M', 'F', 'M', 'M', 'F', 'F'],
    "age":np.random.randint(25,28,10),
    "salary":np.random.randint(5,50,10),
    })
print(df)
print('*'*40)

#此处的x也是一个dataframe
def group_staff_salary(x):
    df1 = x.sort_values(by = 'salary',ascending=True)
#ascending = True为从大到小的顺序,默认倒序
    return df1

df.groupby('gender',as_index=True).apply(group_staff_salary)

groupby + apply = order

获取每组最值:

  • 限制每个子DataFrame返回对象即可
#只看每组最高工资:
df=pd.DataFrame({
    "name":['Jack', 'Alice', 'Lily', 'Mshis', 'Gdli', 'Agosh', 'Filu', 'Mack', 'Lucy', 'Pony'],
    "gender":['F', 'M', 'F', 'F', 'M', 'F', 'M', 'M', 'F', 'F'],
    "age":np.random.randint(25,28,10),
    "salary":np.random.randint(5,50,10),
    })
print(df)
print("*"*40)

#此处的x也是一个dataframe
def group_staff_salary(x):
    df1 = x.sort_values(by = 'salary',ascending=True)
    return df1.iloc[-1, :]

df.groupby('gender',as_index=True).apply(group_staff_salary)
  • 查询到男女两方最高工资者信息:
    groupby + apply = max

agg:

功能:

  • 同时为一组数据指定多个执行函数

字典指定内置函数:

  • 字典的key是DataFrame的特征,字典的value是要对特征值执行的函数
  • 要对字典执行的函数很多时,可以传递数组
# 1:字典:key为列,val为操作函数
df=pd.DataFrame({
    "name":['Jack', 'Alice', 'Lily', 'Mshis', 'Gdli', 'Agosh', 'Filu', 'Mack', 'Lucy', 'Pony'],
    "gender":['F', 'M', 'F', 'F', 'M', 'F', 'M', 'M', 'F', 'F'],
    "age":np.random.randint(25,28,10),
    "salary":np.random.randint(5,50,10),
    })


df.agg({'age':['max'], 'salary':['mean', 'std']})
  • value作为行Index,key作为列Index
    字典指定agg

groupby + agg:

  • agg内许多函数的操作对象是groupby之后的子DataFrame的所有列:
df.groupby('gender').agg(['max', 'min', 'median'])
  • group作行Index,agg内函数作列index:
    groupby  + agg

lambda匿名函数:

  • agg内参数也可以是lambda表达式
df.groupby(['gender']).agg(lambda x: x.mean()-x.min())
  • groupby的特征值作为行Index,非by的特征值作为列Index
    groupby + agg + lambda

lambda匿名函数数组:

  • agg()内参数也可以是lambda表达式数组
df.groupby(['gender']).agg([lambda x: x.max()-x.min(), lambda x: x.mean()-x.min()])
  • 行Index为by的特征,列Index为lambda函数名
    groupby + agg + lambda

常用的两种文件操作:

读写csv文件:

读csv:

pd.read_csv('./test.csv')

写csv:

df.to_csv('./test.csv',index=False)
#不写行名

读写excel文件:

读excel:

pd.read_excel('./test.xlsx')

写excel:

df.to_excel('./test.xlsx',index=True)
#写行名

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/399138.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[Java·算法·中等]LeetCode34. 在排序数组中查找元素的第一个和最后一个位置

每天一题&#xff0c;防止痴呆题目示例分析思路1题解1&#x1f449;️ 力扣原文 题目 给你一个按照非递减顺序排列的整数数组 nums&#xff0c;和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target&#xff0c;返回 [-1,…

Windows 安装 MongoDB 并内网穿透远程连接

本文目录1.前言2.MongoDB数据库的安装2.1 MongoDB下载安装2.2 MongoDB连接测试2.3 cpolar下载安装3.Cpolar端口设置3.1 Cpolar云端设置3.2.Cpolar本地设置4.公网访问测试5.结语1.前言 现代电子技术日新月异&#xff0c;并且快速应用到我们的生活中&#xff0c;与之相应的&…

SAP BTEs的简介及实现

一、认识BTE BTE&#xff08;Business Transaction Event&#xff09;也称之为“业务交易事件”,一般的增强(Tcode:SMOD|CMOD)依旧使用ABAP进行二次开发,然而BTE则提供了RFC调用其它产品的可能(Tcode:FIBF)。BTE的设计思路更加简单&#xff0c;和BADI有点类似。在标准程序中留有…

ssm框架之spring:浅聊IOC

IOC 前面体验了spring&#xff0c;不过其运用了IOC&#xff0c;至于IOC( Inverse Of Controll—控制反转 ) 看一下百度百科解释&#xff1a; 控制反转&#xff08;Inversion of Control&#xff0c;缩写为IoC&#xff09;&#xff0c;是面向对象编程中的一种设计原则&#x…

训练自己的GPT2-Chinese模型

文章目录效果抢先看准备工作环境搭建创建虚拟环境训练&预测项目结构模型预测续写训练模型遇到的问题及解决办法显存不足生成的内容一样文末效果抢先看 准备工作 从GitHub上拉去项目到本地&#xff0c;准备已训练好的模型百度网盘&#xff1a;提取码【9dvu】。 gpt2对联训…

又一个开源第一!飞桨联合百舸,Stable Diffusion推理速度遥遥领先

AIGC(AI Generated Content)&#xff0c;即通过人工智能方法生成内容&#xff0c;是当前深度学习最热门的方向之一。其在绘画、写作等场景的应用也一直层出不穷&#xff0c;其中&#xff0c;AI绘画是大家关注和体验较多的方向。 Diffusion系列文生图模型可以实现AI绘画应用&…

八股总结(一)C++语言特性、基础语法、类与模板、内存管理、拷贝控制、STL及C++11新特性

layout: post title: 八股总结&#xff08;一&#xff09;C语言特性、基础语法、类与模板、内存管理、拷贝控制、STL及C11新特性 description: 八股总结&#xff08;一&#xff09;C语言特性、基础语法、类与模板、内存管理、拷贝控制、STL及C11新特性 tag: 八股总结 总结的大部…

使用python求PLS-DA的方差贡献率

以鸢尾花数据集为例&#xff0c;实现PLS-DA降维&#xff0c;画出降维后数据的散点图并求其方差贡献率。 效果图 完整代码 # 导入所需库 import numpy as np from sklearn.cross_decomposition import PLSRegression from sklearn.datasets import load_iris from sklearn.pre…

synchronized原理mointor

Monitor对象头 在java中普通对象的对象头信息 Mark Word记录分代年龄、加锁的状态&#xff1b;Klass Word指向类对象的指针&#xff1b; 其中Mark Word结构 monitor执行原理 我们在加了重量级锁synchronize后&#xff0c;对象头的mark word会指向一个monitor&#xff0c;mon…

pandas库中的read_csv函数读取数据时候的路径问题详解(ValueError: embedded null character)

read_csv()函数不仅是R语言中的一个读取csv文件的函数&#xff0c;也是pandas库中的一个函数。pandas是一个用于数据分析和处理的python库。它的read_csv函数可以读取csv文件里的数据&#xff0c;并将其转化为pandas里面的DataFrame对象。它由很多参数可以设置&#xff0c;例如…

Express的详细教程

Express 文章目录Express初识ExpressExpress简介Express的基本使用安装创建基本的web服务器监听GET请求监听POST请求把内容响应给客户端获取URL中携带的查询参数获取URL中的动态参数托管静态资源express.static()托管多个静态资源挂载路径前缀nodemon为什么要使用nodemon安装no…

【专项训练】动态规划-1

动态规划 以上,并没有什么本质的不一样,很多时候,就是一些小的细节问题! 要循环,要递归,就是有重复性! 动态规划:动态递推 分治 + 最优子结构 会定义状态,把状态定义对 斐波那契数列 递归、记忆化搜索,比较符合人脑思维 递推:直接开始写for循环,开始递推 这里…

mysql无法启动服务及其他问题总结

文章目录1.安装后关于配置的问题显示【发生系统错误&#xff0c;拒绝访问】命令行Command Line Client闪退2.显示【MySQL服务无法启动】问题检查端口被占用删除data文件并初始化配置my.ini/.conf文件重新安装MySQL1.安装后关于配置的问题 显示【发生系统错误&#xff0c;拒绝访…

Apache Dubbo 存在反序列化漏洞(CVE-2023-23638)

漏洞描述 Apache Dubbo 是一款轻量级 Java RPC 框架 该项目受影响版本存在反序列化漏洞&#xff0c;由于Dubbo在序列化时检查不够全面&#xff0c;当攻击者可访问到dubbo服务时&#xff0c;可通过构造恶意请求绕过检查触发反序列化&#xff0c;执行恶意代码 漏洞名称Apache …

【Linux】 -- make/Makefile

目录 Linux项目自动化构建工具 – make/Makefile 背景 依赖关系和依赖方法 多文件编译 项目清理 make原理 Linux项目自动化构建工具 – make/Makefile 背景 一个工程的源文件不计其数 按照其类型、功能、模块分别放在若干个目录当中 Makefile定义了一系列的规则来指定&…

DJ1-3 计算机网络和因特网

目录 一、物理介质 1. 双绞线 2. 同轴电缆 3. 光纤线缆 4. 无线电磁波 二、端系统上的 Internet 服务 1. 面向连接的服务 TCP&#xff08;Transmission Control Protocol&#xff09; 2. 无连接的服务 UDP&#xff08;User Datagram Protocol&#xff09; TCP 和 UD…

TypeScript(四)接口

目录 前言 定义 用法 基本用法 约定规则 属性控制 任意属性 可选属性 只读属性 定义函数 冒号定义 箭头定义 接口类型 函数接口 索引接口 继承接口 类接口 总结 前言 在介绍TS对象类型中&#xff0c;为了让数组每一项更具体&#xff0c;我们使用 string [ ]…

C++面向对象编程之四:成员变量和成员函数分开存储、this指针、const修饰成员和对象

在C中&#xff0c;成员变量和成员函数是分开存储的&#xff0c;只有非静态成员变量才存储在类中或类的对象上。通过该类创建的所有对象都共享同一个函数#include <iostream> using namespace std;class Monster {public://成员函数不占对象空间&#xff0c;所有对象共享同…

数据库基本功之复杂查询的子查询

子查询返回的值可以被外部查询使用,这样的复合查询等效与执行两个连续的查询. 1. 单行单列子查询 (>,<,,<>,>,<)内部SELECT子句只返回一行结果 2.多行单列子查询 (all, any, in,not in) all (>大于最大的,<小于最小的) SQL> select ename, sal from…

Linux创建并挂载NAS

1 目标 在Linux服务器1上创建nas服务器&#xff0c;并指定可读写目录在Linux服务器2上挂载上述nas磁盘在Linux服务器2上设置开机自动挂载nas磁盘 2 搭建环境 两台Linux系统服务器&#xff0c;如下&#xff1a; 服务器1 IP为192.168.31.101 服务器2 IP为192.168.31.102 3 在服…