Pandas从基础统计到高级分析的完整指南【第77篇—Pandas高级分析】

Pandas从基础统计到高级分析的完整指南

在数据科学和分析领域中,Pandas是Python中最受欢迎的数据处理库之一。它提供了丰富而强大的功能,其中包括各种统计方法,用于更好地理解和分析数据。本文将介绍Pandas中常用的统计方法,通过代码实例和解析,帮助读者更好地掌握这些强大的工具。

image-20240212234032203

1. 基本统计方法

1.1 描述性统计

Pandas的describe()方法提供了数据的基本描述性统计信息,包括均值、标准差、最小值、最大值等。

import pandas as pd

# 创建DataFrame
data = {'A': [1, 2, 3, 4, 5],
        'B': [10, 20, 30, 40, 50]}
df = pd.DataFrame(data)

# 描述性统计
statistics = df.describe()
print(statistics)

image-20240212234053644

1.2 汇总统计

sum()mean()等方法提供了对数据进行求和、计算平均值等汇总统计功能。

# 汇总统计
total_sum = df.sum()
mean_value = df.mean()
print("总和:", total_sum)
print("平均值:", mean_value)

image-20240212234110479

2. 分类统计方法

2.1 唯一值统计

value_counts()方法用于计算Series中唯一值的频率。

# 唯一值统计
unique_counts = df['A'].value_counts()
print("唯一值统计:\n", unique_counts)
2.2 分组统计

groupby()方法可以对数据进行分组,然后使用聚合函数进行统计。

# 分组统计
grouped = df.groupby('A')
grouped_sum = grouped.sum()
print("分组统计:\n", grouped_sum)

3. 缺失值处理

3.1 缺失值统计

isnull()sum()结合使用,可以统计每列的缺失值数量。

# 缺失值统计
missing_values = df.isnull().sum()
print("缺失值统计:\n", missing_values)
3.2 缺失值填充

fillna()方法用于填充缺失值,可以使用均值、中位数等进行填充。

# 缺失值填充
df_filled = df.fillna(df.mean())
print("填充缺失值后的DataFrame:\n", df_filled)

通过上述代码实例,我们介绍了Pandas中一些常用的统计方法,包括基本统计、分类统计以及缺失值处理等。这些功能使得Pandas成为数据分析和处理的得力助手,为用户提供了丰富的工具来更深入地理解和探索数据。希望本文对你在数据分析的实践中能够起到指导作用,让你更加熟练地运用Pandas进行数据处理。

4. 相关性和协方差

4.1 相关性分析

corr()方法用于计算DataFrame中列之间的相关性。

# 相关性分析
correlation_matrix = df.corr()
print("相关性分析:\n", correlation_matrix)
4.2 协方差分析

cov()方法用于计算DataFrame中列之间的协方差。

# 协方差分析
covariance_matrix = df.cov()
print("协方差分析:\n", covariance_matrix)

5. 窗口统计方法

5.1 移动平均

rolling()方法可以创建一个滑动窗口对象,结合mean()等函数,实现移动平均的计算。

# 移动平均
rolling_window = df['A'].rolling(window=2)
moving_average = rolling_window.mean()
print("移动平均:\n", moving_average)
5.2 指数加权窗口

ewm()方法用于创建指数加权窗口对象,可用于计算指数加权移动平均。

# 指数加权移动平均
ewm_window = df['B'].ewm(span=2)
ewm_average = ewm_window.mean()
print("指数加权移动平均:\n", ewm_average)

6. 数据采样

resample()方法用于对时间序列数据进行重采样,可以实现数据的降采样和升采样。

# 数据采样
df_time = pd.DataFrame({'value': [10, 20, 30, 40, 50]}, index=pd.date_range('2022-01-01', periods=5, freq='D'))
resampled_data = df_time.resample('W').sum()
print("周采样:\n", resampled_data)

image-20240212234142340

7. 数据透视表

数据透视表是一种强大的数据分析工具,通过pivot_table()方法,可以实现对数据进行灵活的透视和聚合。

# 数据透视表
pivot_table = pd.pivot_table(df, values='B', index='A', aggfunc='mean')
print("数据透视表:\n", pivot_table)

8. 分位数和离群值

8.1 分位数计算

quantile()方法用于计算数据的分位数,帮助理解数据的分布情况。

# 分位数计算
quantiles = df['B'].quantile([0.25, 0.5, 0.75])
print("分位数计算:\n", quantiles)
8.2 离群值检测

通过箱线图和quantile()等方法,可以识别并处理数据中的离群值。

# 离群值检测
Q1 = df['B'].quantile(0.25)
Q3 = df['B'].quantile(0.75)
IQR = Q3 - Q1
outliers = df[(df['B'] < (Q1 - 1.5 * IQR)) | (df['B'] > (Q3 + 1.5 * IQR))]
print("离群值检测:\n", outliers)

9. 时间序列分析

9.1 时间索引设置

通过set_index()方法,可以将DataFrame的列设置为时间索引,便于时间序列分析。

# 时间索引设置
df_time_indexed = df.set_index(pd.date_range('2022-01-01', periods=5, freq='D'))
print("时间索引设置:\n", df_time_indexed)
9.2 移动窗口时间序列统计

结合rolling()方法,可以对时间序列数据进行滑动窗口统计。

# 移动窗口时间序列统计
rolling_window_time = df_time_indexed['B'].rolling(window=2)
moving_average_time = rolling_window_time.mean()
print("移动窗口时间序列统计:\n", moving_average_time)

通过这些高级的统计方法,你可以更深入地分析时间序列数据,发现数据中的趋势和规律,为预测和决策提供更多有力的支持。

10. 数据可视化

为了更直观地理解数据,数据可视化是至关重要的一环。Pandas与其他可视化库(如Matplotlib和Seaborn)结合使用,提供了强大的数据可视化功能。

10.1 直方图

使用hist()方法可以绘制直方图,帮助了解数据的分布情况。

# 直方图
df['B'].plot.hist(bins=5, alpha=0.7)
plt.title('Histogram of Column B')
plt.xlabel('Values')
plt.ylabel('Frequency')
plt.show()
10.2 箱线图

箱线图是识别离群值的重要工具,通过boxplot()方法可以轻松绘制。

# 箱线图
df.boxplot(column='B')
plt.title('Boxplot of Column B')
plt.show()
10.3 散点图

散点图是用于观察两个变量之间关系的有效手段,通过scatter()方法实现。

# 散点图
df.plot.scatter(x='A', y='B')
plt.title('Scatter Plot between A and B')
plt.xlabel('A')
plt.ylabel('B')
plt.show()

通过这些可视化方法,你可以更直观地发现数据中的模式、趋势和异常值,为进一步分析提供了更深入的视角。

11. 高级统计方法

Pandas还提供了一些高级统计方法,用于处理更复杂的数据分析问题。以下是其中一些方法的示例:

11.1 主成分分析(PCA)

主成分分析是一种降维技术,通过PCA类实现。

from sklearn.decomposition import PCA

# 创建DataFrame
data = {'Feature1': [1, 2, 3, 4, 5],
        'Feature2': [5, 4, 3, 2, 1]}
df_pca = pd.DataFrame(data)

# 主成分分析
pca = PCA(n_components=1)
result = pca.fit_transform(df_pca)
print("PCA Result:\n", result)
11.2 线性回归

使用statsmodelsscikit-learn库,可以进行线性回归分析。

import statsmodels.api as sm
from sklearn.linear_model import LinearRegression

# 创建DataFrame
data = {'X': [1, 2, 3, 4, 5],
        'Y': [2, 4, 5, 4, 5]}
df_regression = pd.DataFrame(data)

# 使用statsmodels进行线性回归
X = sm.add_constant(df_regression['X'])
model = sm.OLS(df_regression['Y'], X).fit()
print("Statsmodels Linear Regression Summary:\n", model.summary())

# 使用scikit-learn进行线性回归
regressor = LinearRegression()
regressor.fit(df_regression[['X']], df_regression['Y'])
print("Scikit-learn Linear Regression Coefficients:\n", regressor.coef_)
11.3 时间序列分解

时间序列分解可以将时间序列数据拆分为趋势、季节性和残差部分,通过seasonal_decompose()方法实现。

from statsmodels.tsa.seasonal import seasonal_decompose

# 创建时间序列
time_series_data = pd.Series([1, 2, 3, 4, 5, 6, 7, 8, 9], index=pd.date_range('2022-01-01', periods=9, freq='M'))

# 时间序列分解
result = seasonal_decompose(time_series_data, model='additive')
print("Time Series Decomposition Result:\n", result.plot())

image-20240212234205920

总结:

本文全面介绍了Pandas中常用的统计方法,从基础的描述性统计到高级的主成分分析、线性回归和时间序列分解,为数据科学家和分析师提供了强大的工具。通过代码实例和解析,读者可以深入了解如何使用Pandas进行数据分析,包括数据的汇总统计、分类统计、缺失值处理、相关性分析、时间序列分析等多个方面。

在基本统计方法中,我们学习了如何使用describe()sum()mean()等函数进行数据的描述性统计和汇总统计。在分类统计方法中,value_counts()groupby()方法展示了如何对数据进行唯一值统计和分组统计。对于缺失值处理,我们介绍了如何统计和填充缺失值。在相关性和协方差分析中,使用corr()cov()方法计算了列之间的相关性和协方差。窗口统计方法包括移动平均和指数加权移动平均,以及数据采样、数据透视表和分位数处理等,都为更深入的数据分析提供了支持。

在高级统计方法中,我们探讨了主成分分析、线性回归和时间序列分解等方法,帮助读者应对更复杂的数据分析任务。最后,通过数据可视化,我们展示了如何使用Matplotlib和Seaborn库对数据进行可视化,更直观地理解数据的分布、趋势和异常值。

总体而言,Pandas作为Python中强大的数据处理库,为数据科学家和分析师提供了丰富而灵活的工具,本文通过详细的代码实例和解析,旨在帮助读者更深入地掌握这些工具,提高在数据分析领域的技能水平。希望本文对你在数据分析实践中的应用有所帮助。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Github 2024-02-07 开源项目日报 Top9

根据Github Trendings的统计&#xff0c;今日(2024-02-07统计)共有9个项目上榜。根据开发语言中项目的数量&#xff0c;汇总情况如下&#xff1a; 开发语言项目数量Rust项目2TypeScript项目2Python项目2Ruby项目1HTML项目1NASL项目1Go项目1C项目1Svelte项目1C项目1 React Nat…

【Java EE初阶十二】网络编程TCP/IP协议(二)

1. 关于TCP 1.1 TCP 的socket api tcp的socket api和U大片的socket api差异很大&#xff0c;但是和前面所讲的文件操作很密切的联系 下面主要讲解两个关键的类&#xff1a; 1、ServerSocket&#xff1a;给服务器使用的类&#xff0c;使用这个类来绑定端口号 2、Socket&#xf…

【后端高频面试题--SpringBoot篇】

&#x1f680; 作者 &#xff1a;“码上有前” &#x1f680; 文章简介 &#xff1a;后端高频面试题 &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; 这里写目录标题 1.什么是SpringBoot&#xff1f;它的主要特点是什么&#xff1f;2.列举一些Spri…

Stable Diffusion教程——stable diffusion基础原理详解与安装秋叶整合包进行出图测试

前言 在2022年&#xff0c;人工智能创作内容&#xff08;AIGC&#xff09;成为了AI领域的热门话题之一。在ChatGPT问世之前&#xff0c;AI绘画以其独特的创意和便捷的创作工具迅速走红&#xff0c;引起了广泛关注。随着一系列以Stable Diffusion、Midjourney、NovelAI等为代表…

【开源】SpringBoot框架开发农家乐订餐系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用户2.2 管理员 三、系统展示四、核心代码4.1 查询菜品类型4.2 查询菜品4.3 加购菜品4.4 新增菜品收藏4.5 新增菜品留言 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的农家乐订餐系统&#xff0c…

Vulnhub靶机:hackable3

一、介绍 运行环境&#xff1a;Virtualbox 攻击机&#xff1a;kali&#xff08;10.0.2.15&#xff09; 靶机&#xff1a;hackable3&#xff08;10.0.2.53&#xff09; 目标&#xff1a;获取靶机root权限和flag 靶机下载地址&#xff1a;https://www.vulnhub.com/entry/hac…

HarmonyOS 横屏调试与真机横屏运行

我们有些程序 需要横屏才能执行出效果 我们在预览器上 点击如下图指向出 就进入一个横屏调试了 但 我们真机运行 依旧是竖着的 我们如下图 找到 module.json5 在 abilities 下面 第一个对象 最下面 加上 "orientation": "landscape"然后 我们再真机运…

matlab入门,在线编辑,无需安装matab

matlab相关教程做的很完善&#xff0c;除了B站看看教程&#xff0c;官方教程我觉得更加高效。跟着教程一步一步编辑&#xff0c;非常方便。 阅读 MATLAB 官方教程&#xff1a; MATLAB 官方教程提供了从基础到高级的教学内容&#xff0c;内容包括 MATLAB 的基本语法、数据处理…

[ai笔记5] 个人AI资讯助手实战

欢迎来到文思源想的ai空间&#xff0c;这是技术老兵重学ai以及成长思考的第5篇分享&#xff0c;也是把ai场景化应用的第一篇实操内容&#xff01; 既然要充分学习和了解ai&#xff0c;自然少不了要时常看看ai相关资讯&#xff0c;所以今天特地用字节的“扣子”做了一个ai的资讯…

第2讲投票系统后端架构搭建

创建项目时&#xff0c;随机选择一个&#xff0c;后面会生成配置properties文件 生成文件 maven-3.3.3 设置阿里云镜像 <?xml version"1.0" encoding"UTF-8"?><!-- Licensed to the Apache Software Foundation (ASF) under one or more cont…

一个三极管引脚识别的小技巧,再也不用对照手册啦

三极管是一个非常常用的器件,时不时的就需要用到他们,有些时候当我们拿到一颗三极管时 ,对于常用的友来说,三极管的引脚可能早已烂熟于心,而对于不常用或者初学者来说,三极管的引脚可以说是今天记下明天忘,后天搞混大后天重看手册(玩笑话),但是这种情况可以说每个人都…

springboot185基于vue.js的客户关系管理系统(crm)的设计与实现

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计&#xff0c;课程设计参考与学习用途。仅供学习参考&#xff0c; 不得用于商业或者非法用途&#xff0c;否则&#xff0c;一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…

Linux:开源世界的王者

在科技世界中&#xff0c;Linux犹如一位低调的王者&#xff0c;统治着开源世界的半壁江山。对于许多技术爱好者、系统管理员和开发者来说&#xff0c;Linux不仅仅是一个操作系统&#xff0c;更是一种信仰、一种哲学。 一、开源的魅力 Linux的最大魅力在于其开源性质。与封闭的…

【SpringBoot】Validator组件+自定义约束注解实现手机号码校验和密码格式限制

&#x1f3e1;浩泽学编程&#xff1a;个人主页 &#x1f525; 推荐专栏&#xff1a;《深入浅出SpringBoot》《java对AI的调用开发》 《RabbitMQ》《Spring》《SpringMVC》 &#x1f6f8;学无止境&#xff0c;不骄不躁&#xff0c;知行合一 文章目录 前言一、Cons…

Arcgis使用过程中常见问题解决方法

Arcgis无法连接数据库/数据库连接或创建失败解决方法 最近在使用arcgis过程中出现无法连接数据库或者是无法创建数据库。连接到数据库失败&#xff1b;无法创建新的数据库&#xff0c;权限被拒绝&#xff08;如下图&#xff09;。 出现这个原因是你所用的电脑系统文件dao360.…

在spring中操作Redis

目录 创建项目 ​编辑 配置Redis 创建类 StringRedisTemplate set / get list set Hash zset 新年快乐&#xff01;&#xff01;&#xff01;&#xff01; 创建项目 选中maven项目&#xff0c;然后选择java8&#xff0c;输入名称之后&#xff0c;点击next。 随后选择…

蓝桥杯2023真题(2)

1.硬币兑换 #include <iostream> using namespace std; int main() {int a[5000] {0}, ans 0;//coin1for(int i 1; i < 2023; i){//coin2for(int j i 1; j < 2023; j){a[i j] i;ans max(ans, a[i j]);}}cout<<ans;return 0; }2.更小的数 //暴力枚举…

【python】print输出的格式化

在Python中&#xff0c;有几种方式来格式化prin函数的输出。以下是一些常见的方法&#xff1a; 1. 使用百分号 % 运算符&#xff08;传统方法&#xff09;: 使用 % 操作符来进行格式化是一种较老的方法&#xff0c;但它仍然有效。 name "Alice"age 25print("…

Python爬虫之Ajax数据爬取基本原理

前言 有时候我们在用 requests 抓取页面的时候&#xff0c;得到的结果可能和在浏览器中看到的不一样&#xff1a;在浏览器中可以看到正常显示的页面数据&#xff0c;但是使用 requests 得到的结果并没有。这是因为 requests 获取的都是原始的 HTML 文档&#xff0c;而浏览器中…

Swift 初见

Swift 初见 学习swift的记录 控制台输出 print("hello world")可以无分号&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 变量声明 let 常量声明 如果在常量声明后再次修改他会报错 var 变量声明 一个常量的值&#xf…