Python入门系列之九-数据分析与可视化进阶

从此鲜花赠自己,纵马踏花向自由


在本博客中,我们将结合 PandasMatplotlib 和其他常见的Python工具,进行完整的数据分析流程,涵盖数据探索、清洗、预处理、可视化,并通过一个示例项目进行演示。


Python数据分析全流程:数据探索、清洗、预处理与可视化

Python已成为数据分析和机器学习领域的首选语言。它的强大生态系统使得数据处理与可视化变得简单而高效。本文将通过Pandas和Matplotlib库,结合数据探索性分析(EDA)、数据清洗与预处理以及可视化的技巧,展示如何进行一个完整的数据分析流程。

1. 数据分析简介

数据分析是一系列过程,旨在从原始数据中提取有价值的信息。数据分析的流程通常包括以下步骤:

  1. 数据导入:从不同的文件格式(如CSV、Excel、数据库等)加载数据。
  2. 数据探索:通过描述性统计和可视化,初步了解数据的分布和特征。
  3. 数据清洗:处理缺失值、异常值和重复数据等问题。
  4. 数据预处理:对数据进行标准化、归一化等处理,使其适合建模。
  5. 数据可视化:通过图表呈现分析结果,帮助洞察数据的潜在趋势。

2. 数据导入与加载

在数据分析中,Pandas是最常用的库之一,它能够高效地读取各种格式的数据,包括CSV、Excel、JSON、SQL数据库等。

import pandas as pd# 读取CSV文件
df = pd.read_csv('data.csv')# 查看数据前五行
print(df.head())

Pandas还支持读取Excel文件,数据库中的数据等,可以灵活地根据实际需求导入不同格式的数据。

3. 数据探索性分析(EDA)

数据探索性分析(Exploratory Data Analysis, EDA)是数据分析中的重要步骤,旨在通过统计和可视化手段深入理解数据。EDA有助于发现数据中的异常、缺失值、分布特征以及潜在的关系。

3.1. 描述性统计

描述性统计是EDA的第一步,通常通过Pandas提供的describe()方法来快速获取数据的基本统计信息。

# 获取描述性统计信息
print(df.describe())

此方法返回的数据包括每列的均值、标准差、最小值、四分位数等,可以帮助我们快速了解数据的基本分布。

3.2. 数据可视化

可视化是理解数据分布和趋势的重要手段。Matplotlib和Seaborn是Python中常用的可视化工具。

  • 直方图:了解数据的分布情况。

    import matplotlib.pyplot as pltdf['column_name'].hist(bins=20)
    plt.title('Histogram of column_name')
    plt.xlabel('Value')
    plt.ylabel('Frequency')
    plt.show()
    
  • 散点图:查看两列数据之间的关系。

    df.plot(kind='scatter', x='column1', y='column2')
    plt.title('Scatter Plot between column1 and column2')
    plt.show()
    
  • 箱线图:用于检查数据的离群值和分布情况。

    df.boxplot(column='column_name')
    plt.title('Boxplot of column_name')
    plt.show()
    

4. 数据清洗与预处理

在实际的数据分析中,数据通常并不完美,可能包含缺失值、异常值、重复数据等。这时,我们需要对数据进行清洗与预处理。

4.1. 处理缺失值

数据中的缺失值需要进行处理,否则可能影响后续分析或建模。Pandas提供了多种方式来处理缺失值。

  • 检查缺失值

    df.isnull().sum()  # 查看每一列的缺失值数量
    
  • 填充缺失值

    df['column_name'].fillna(df['column_name'].mean(), inplace=True)  # 用均值填充
    df.fillna(0, inplace=True)  # 用0填充所有缺失值
    
  • 删除缺失值

    df.dropna(inplace=True)  # 删除含有缺失值的行
    
4.2. 处理重复数据

数据集中的重复数据会影响分析的准确性。Pandas提供了drop_duplicates()方法来去除重复数据。

df.drop_duplicates(inplace=True)
4.3. 数据标准化与归一化

数据的标准化和归一化是预处理中的重要步骤,尤其是在机器学习建模时。常见的标准化方法有Z-score标准化和Min-Max归一化。

# Z-score标准化
df['column_name'] = (df['column_name'] - df['column_name'].mean()) / df['column_name'].std()# Min-Max归一化
df['column_name'] = (df['column_name'] - df['column_name'].min()) / (df['column_name'].max() - df['column_name'].min())

5. 数据合并与连接

有时候,我们的数据分布在多个文件或表格中。Pandas提供了强大的合并和连接功能,可以轻松地将多个数据集合并为一个。

5.1. 合并数据

通过merge()方法,可以根据某些键将多个DataFrame合并。

df1 = pd.read_csv('data1.csv')
df2 = pd.read_csv('data2.csv')# 根据共同的列“ID”合并数据
merged_df = pd.merge(df1, df2, on='ID')
5.2. 连接数据

当数据按行或列排列时,可以通过concat()方法进行连接。

df3 = pd.read_csv('data3.csv')
concatenated_df = pd.concat([df1, df3], axis=0)  # 按行连接

6. 时间序列分析

在处理时间序列数据时,Pandas提供了强大的功能来帮助我们分析时间数据。我们可以轻松地进行日期和时间的操作,处理时间序列中的趋势、季节性和周期性。

df['Date'] = pd.to_datetime(df['Date'])  # 将日期列转换为datetime格式
df.set_index('Date', inplace=True)  # 设置日期列为索引
df.resample('M').sum()  # 按月重新采样并求和

7. 数据分析项目示例

假设我们有一个关于销售数据的CSV文件,数据包括销售日期、产品名称和销售额。我们将使用Pandas进行数据清洗、预处理,并使用Matplotlib进行可视化。

import pandas as pd
import matplotlib.pyplot as plt# 读取数据
df = pd.read_csv('sales_data.csv')# 处理缺失值
df['Sales'].fillna(0, inplace=True)# 转换日期格式并设置为索引
df['Date'] = pd.to_datetime(df['Date'])
df.set_index('Date', inplace=True)# 按日期聚合销售额
daily_sales = df.groupby('Date')['Sales'].sum()# 绘制折线图
plt.plot(daily_sales.index, daily_sales.values)
plt.title('Daily Sales Over Time')
plt.xlabel('Date')
plt.ylabel('Sales')
plt.xticks(rotation=45)
plt.show()

8. 总结

通过本文的介绍,我们学到了如何使用 Pandas 进行数据加载、清洗和预处理,并用 Matplotlib 绘制各种图表。数据分析的过程不仅仅是代码的实现,更多的是如何根据数据的特性、问题的需求进行合适的分析和处理。

  • 数据清洗:处理缺失值、重复数据等是数据分析的基础。
  • EDA:通过描述性统计和可视化快速理解数据的特性。
  • 数据预处理:标准化、归一化等步骤为后续的建模打下基础。
  • 数据合并与连接:灵活地合并多个数据集,便于分析。
  • 时间序列分析:帮助分析和预测基于时间的数据变化。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Unity3D】UGUI Canvas画布渲染流程

目录 Screen Space - Overlay Screen Space - Camera World Space UI合批分析(建议不看 直接看FrameDebugger测试) 优化UI合批 1、Image图片纹理不同导致合批失败 2、文本和图片相交以及排序对合批的影响 参考文档:画布 - Unity 手册…

计算机的错误计算(二百零一)

摘要 用两个大模型计算 ,结果保留 10位有效数字。实验表明,两个大模型的输出均只有1位正确数字;并它们几乎相同:仅最后1位数字不同。 例1. 计算 , 结果保留 10位有效数字。 下面是与一个数学解题器的对话。 以上为与一个数学解…

完全分布式部署Hadoop集群

(1)第一步:安装Hadoop,使用如下命令: tar -zvxf /export/software/Hadoop-3.3.4.tar.gz -C /export/servers (2)第二步:配置Hadoop系统环境变量 在liumengting1上执行vi /etc/profile命令配置系统环境变量profile,在…

Redis数据库笔记—— Hash(哈希)的扩容机制(rehash)

大家好,这里是Good Note,关注 公主号:Goodnote,专栏文章私信限时Free。详细介绍Hash(哈希)的扩容机制(rehash)、源码、以及扩容和缩容过程。 文章目录 Redis 字典(dict)结构源码哈希…

使用命令行管理git项目

# 初始化一个新的Git仓库 git init # 添加文件到暂存区 git add <file> # 提交暂存区的更改到仓库 git commit -m "commit message" # 查看当前仓库的状态 git status # 查看提交历史 git log # 查看文件的改动 git diff <file> # 创建一个新…

设计模式 创建型 工厂模式(Factory Pattern)与 常见技术框架应用 解析

工厂模式&#xff08;Factory Pattern&#xff09;是一种创建型设计模式&#xff0c;它提供了一种封装对象创建过程的方式&#xff0c;使得对象的创建与使用分离&#xff0c;从而提高了系统的可扩展性和可维护性。 一、核心思想 工厂模式的核心思想是将“实例化对象”的操作与…

【Block总结】Conv2Former中的Block,卷积调制块,简化了自注意力机制,提高了内存效率

论文介绍 论文链接&#xff1a;https://arxiv.org/pdf/2211.11943 研究背景&#xff1a;论文指出&#xff0c;尽管当前研究者们通过利用大核卷积、高阶空间交互或稀疏卷积核等方法对卷积神经网络&#xff08;ConvNets&#xff09;的设计进行了重新思考&#xff0c;但如何更有…

w139华强北商城二手手机管理系统

&#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;原创团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339;赠送计算机毕业设计600个选题excel文…

ThreadPoolExecutor keepAliveTime 含义

现象 在线上环境排查问题时&#xff0c;某个线程池在某个时间点新建线程达到设定的最大线程数 maximumPoolSize&#xff0c;后续流量降低后当前线程数仍未回落&#xff0c;仍然为最大线程数&#xff0c;阻塞队列中有任务&#xff0c;但是活跃线程数显著减少。 之前的认知 固…

如何恢复已删除的 Telegram 消息 [iOSamp;Android]

Telegram 是一款功能强大的消息应用程序&#xff0c;因其易用性、隐私保护和众多炫酷功能而深受用户喜爱。然而&#xff0c;有时我们会不小心删除重要的消息。在这种情况下你应该做什么&#xff1f; 本文将为您提供简单有效的解决方案来恢复 Telegram 上已删除的消息&#xff…

Outlook2024版如何回到经典Outlook

Outlook2024版如何回到经典Outlook 如果新加入一家公司&#xff0c;拿到的电脑&#xff0c;大概率是最新版的Windows, 一切都是新的。 如果不coding, 使用国产的foxmail大概就可以解决一切问题了。可惜老程序员很多Coding都是基于传统Outlook的&#xff0c;科技公司所有人都是I…

动态库dll与静态库lib编程4:MFC规则DLL讲解

文章目录 前言一、说明二、具体实现2.1新建项目2.2 模块切换的演示 总结 前言 动态库dll与静态库lib编程4&#xff1a;MFC规则DLL讲解。 一、说明 1.前面介绍的均为Win32DLL&#xff0c;即不使用MFC的DLL。 2.MFC规则DLL的特点&#xff1a;DLL内部可以使用MFC类库、可以被其他…

若依中Feign调用的具体使用(若依微服务版自身已集成openfeign依赖,并在此基础上定义了自己的注解)

若依中Feign调用具体使用 注意&#xff1a;以下所有步骤实现的前提是需要在启动类上加入注解 EnableRyFeignClients 主要是为开启feign接口扫描 1.创建服务提供者(provider) 导入依赖(我在分析依赖时发现若依本身已经引入openfeign依赖,并在此基础上自定义了自己的EnableRyF…

CSS3——3. 书写格式二

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title></head><body><!--css书写&#xff1a;--><!--1. 属性名:属性值--><!--2.属性值是对属性的相关描述--><!--3.属性名必须是…

zookeeper 数据类型

文章目录 引言I Znodezonde stat (状态信息)znode类型临时\永久序列化特性引言 在结构上与标准文件系统非常类似,拥有一个层次的命名空间,都是采用树形层次结构 Zookeeper树中的每个节点被称为:Znode,没有文件和目录之分。Znode兼具文件和目录两种特点Znode存储数据大小有…

Hadoop集群之间实现免密登录

实现虚拟机之间能够互相登录&#xff0c;比如可以在hadoop1上面登录hadoop2。 第一步&#xff1a;执行”ssh-keygen -t rsa”命令&#xff0c;生成该虚拟机的密钥 第二步&#xff1a;密钥文件存储在/root/.ssh目录&#xff0c;执行cd /root/.ssh命令进入存储密钥文件的目录&am…

【linux基础I/O(1)】文件描述符的本质重定向的本质

目录 前言1. 理解C语言的文件接口2. 操作文件的系统调用接口2.1 open函数详解2.2 close函数详解2.3 write函数详解2.4 read函数详解 3. 文件描述符fd详解4. 文件描述符的内核本质5. 怎样理解Linux下一切皆文件?6. 理解输出输入重定向7. 重定向的系统调用8. 总结 前言 “在Lin…

C++:范围for

范围for&#xff08;range-based for&#xff09;是C的一种循环结构&#xff0c; 是在 C11 这个标准中引入的&#xff0c;这种类型的for循环使得遍历数组、容器中的元素更加简便和直观。 一、范围for语法 for ( 类型 变量名 : 数组名 ) 语句 //多条语句需要加⼤括号 示例&#…

C语言 递归编程练习

1.将参数字符串中的字符反向排列&#xff0c;不是逆序打印。 要求&#xff1a;不能使用C函数库中的字符串操作函数。 比如&#xff1a; char arr[] "abcdef"; 逆序之后数组的内容变成&#xff1a;fedcba 1.非函数实现&#xff08;循环&#xff09; 2.用递归方法…

Spring Boot - 日志功能深度解析与实践指南

文章目录 概述1. Spring Boot 日志功能概述2. 默认日志框架&#xff1a;LogbackLogback 的核心组件Logback 的配置文件 3. 日志级别及其配置配置日志级别3.1 配置文件3.2 环境变量3.3 命令行参数 4. 日志格式自定义自定义日志格式 5. 日志文件输出6. 日志归档与清理7. 自定义日…