目录

  • 1. 环境准备
  • 2. 数据处理与清洗
    • 2.1 导入数据
    • 2.2 数据清洗
      • 示例:处理缺失值
      • 示例:处理异常值
    • 2.3 数据转换
  • 3. 数据分析
    • 3.1 描述性统计
    • 3.2 分组分析
      • 示例:按年龄分组计算工资的平均值
    • 3.3 时间序列分析
  • 4. 数据可视化
    • 4.1 基本绘图
      • 示例:柱状图
    • 4.2 使用 Seaborn 绘制图表
      • 示例:箱型图
    • 4.3 高级可视化技巧
      • 示例:热力图
  • 5. 案例研究
    • 案例:销售数据分析
      • 步骤 1:数据导入与预处理
      • 步骤 2:数据分析
      • 步骤 3:数据可视化
  • 总结

Python 是数据分析与可视化领域中最受欢迎的编程语言之一。凭借其丰富的库和工具,Python 能够帮助我们快速处理、分析数据并生成高质量的可视化图表。本文将详细介绍 Python 中的数据分析与可视化的基础知识,并结合丰富的示例和技巧,帮助读者深入理解这些概念。

1. 环境准备

在开始之前,我们需要确保安装了必要的 Python 库。常用的库包括:

  • pandas:用于数据处理和分析。
  • numpy:用于数值计算。
  • matplotlib:用于基本绘图。
  • seaborn:基于 matplotlib 的高级可视化库。
  • scikit-learn:用于机器学习模型和数据预处理。

可以使用以下命令安装这些库:

pip install pandas numpy matplotlib seaborn scikit-learn

2. 数据处理与清洗

数据处理是数据分析的重要一步。我们将使用 pandas 来处理数据。以下是一些常用操作。

2.1 导入数据

假设我们有一个 CSV 文件 data.csv,内容如下:

NameAgeSalary
Alice3070000
Bob2548000
Carol2752000
DaveNaN60000
Eve22NaN

我们可以使用 pandas 导入这个数据:

import pandas as pd# 导入 CSV 文件
data = pd.read_csv('data.csv')
print(data)

输出:

    Name   Age   Salary
0  Alice  30.0  70000.0
1    Bob  25.0  48000.0
2  Carol  27.0  52000.0
3   Dave   NaN  60000.0
4    Eve  22.0      NaN

2.2 数据清洗

在分析数据之前,我们需要处理缺失值和异常值。

示例:处理缺失值

# 显示缺失值
print(data.isnull().sum())

输出:

Name      0
Age       1
Salary    1
dtype: int64
# 填充缺失值
data['Age'].fillna(data['Age'].mean(), inplace=True)  # 用平均值填充年龄
data['Salary'].fillna(data['Salary'].median(), inplace=True)  # 用中位数填充工资print(data)

输出:

    Name   Age   Salary
0  Alice  30.0  70000.0
1    Bob  25.0  48000.0
2  Carol  27.0  52000.0
3   Dave  26.0  60000.0
4    Eve  22.0  56000.0

示例:处理异常值

# 识别异常值
q1 = data['Salary'].quantile(0.25)
q3 = data['Salary'].quantile(0.75)
iqr = q3 - q1# 确定异常值
outliers = data[(data['Salary'] < (q1 - 1.5 * iqr)) | (data['Salary'] > (q3 + 1.5 * iqr))]
print("异常值:\n", outliers)# 移除异常值
data = data[~data['Salary'].isin(outliers['Salary'])]

输出:

异常值:Empty DataFrame
Columns: [Name, Age, Salary]
Index: []

2.3 数据转换

数据转换可以帮助我们将数据调整为适合分析的格式。例如,我们可能需要将某些列的数据类型转换为适当的格式。

# 将年龄转换为整数类型
data['Age'] = data['Age'].astype(int)

3. 数据分析

数据分析可以帮助我们发现数据中的趋势和模式。我们可以使用 pandas 的一些函数进行基本的统计分析。

3.1 描述性统计

# 获取数据的基本统计信息
statistics = data.describe()
print(statistics)

输出:

             Age        Salary
count   5.000000      5.000000
mean   26.000000  57200.000000
std     2.915476   8438.009244
min    22.000000  48000.000000
25%    25.000000  52000.000000
50%    26.000000  56000.000000
75%    27.000000  60000.000000
max    30.000000  70000.000000

3.2 分组分析

根据不同条件进行分组,并计算相关统计量。

示例:按年龄分组计算工资的平均值

# 按年龄分组并计算工资的平均值
grouped_data = data.groupby('Age')['Salary'].mean().reset_index()
print(grouped_data)

输出:

   Age   Salary
0   22  56000.0
1   25  48000.0
2   26  60000.0
3   27  52000.0
4   30  70000.0

3.3 时间序列分析

如果我们的数据包含时间戳,可以进行时间序列分析。这在销售数据、股票市场等领域特别有用。

# 假设有一个包含日期的 DataFrame
data['Date'] = pd.date_range(start='1/1/2020', periods=len(data), freq='M')# 设置日期为索引
data.set_index('Date', inplace=True)# 按月汇总数据
monthly_data = data.resample('M').sum()
print(monthly_data)

输出:

             Name  Age   Salary
Date                           
2020-01-31  Alice   30  70000.0
2020-02-29    Bob   25  48000.0
2020-03-31  Carol   27  52000.0
2020-04-30   Dave   26  60000.0
2020-05-31    Eve   22  56000.0

4. 数据可视化

数据可视化能够直观展示数据分析的结果。我们将使用 matplotlibseaborn 创建各种图表。

4.1 基本绘图

示例:柱状图

import matplotlib.pyplot as plt# 绘制柱状图
plt.figure(figsize=(10, 6))
plt.bar(data['Name'], data['Salary'], color='skyblue')
plt.title('Salary by Name')
plt.xlabel('Name')
plt.ylabel('Salary')
plt.show()

输出:
在这里插入图片描述

4.2 使用 Seaborn 绘制图表

Seaborn 提供了更美观的图表样式。

示例:箱型图

import seaborn as sns# 绘制箱型图
plt.figure(figsize=(10, 6))
sns.boxplot(x='Age', y='Salary', data=data)
plt.title('Salary Distribution by Age')
plt.show()

输出:
在这里插入图片描述

4.3 高级可视化技巧

除了基本的图表,您还可以利用 matplotlibseaborn 的高级特性来创建复杂的可视化效果。

示例:热力图

# 计算相关性矩阵,只包括数值列
correlation_matrix = data[['Age', 'Salary']].corr()
print(correlation_matrix)

输出:

             Age    Salary
Age     1.000000  0.609736
Salary  0.609736  1.000000
# 创建热力图来查看相关性
plt.figure(figsize=(10, 6))
sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm')
plt.title('Correlation Heatmap')
plt.show()

输出:
在这里插入图片描述

5. 案例研究

为了更好地理解数据分析与可视化的实际应用,让我们考虑一个具体的案例。

案例:销售数据分析

假设我们有一个销售数据集,包含以下列:

  • OrderID:订单编号
  • Product:产品名称
  • Quantity:购买数量
  • Price:单价
  • Date:订单日期

步骤 1:数据导入与预处理

sales_data = pd.read_csv('sales_data.csv')# 检查缺失值
sales_data.isnull().sum()# 填充缺失值
sales_data['Quantity'].fillna(0, inplace=True)
sales_data['Price'].fillna(sales_data['Price'].median(), inplace=True)

步骤 2:数据分析

计算每个产品的总销售额和销量:

sales_data['TotalSales'] = sales_data['Quantity'] * sales_data['Price']
product_sales = sales_data.groupby('Product')['TotalSales'].sum().reset_index()

步骤 3:数据可视化

plt.figure(figsize=(12, 6))
sns.barplot(x='Product', y='TotalSales', data=product_sales)
plt.title('Total Sales by Product')
plt.xticks(rotation=45)
plt.show()

以下是完整的示例代码,包含数据生成、预处理、分析和可视化步骤:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns# 1. 生成示例销售数据
data = {'OrderID': range(1, 11),'Product': ['A', 'B', 'C', 'A', 'B', 'C', 'A', 'B', 'C', 'A'],'Quantity': [5, 2, 0, 3, 1, 4, 6, 7, 0, 2],'Price': [10.0, 20.0, 15.0, 10.0, 20.0, 15.0, 10.0, 20.0, 15.0, 10.0],'Date': pd.date_range(start='2023-01-01', periods=10, freq='D')
}sales_data = pd.DataFrame(data)# 2. 数据预处理
# 检查缺失值
print(sales_data.isnull().sum())# 填充缺失值(若有)
sales_data['Quantity'].fillna(0, inplace=True)
sales_data['Price'].fillna(sales_data['Price'].median(), inplace=True)# 3. 计算总销售额
sales_data['TotalSales'] = sales_data['Quantity'] * sales_data['Price']# 4. 按产品分组计算总销售额
product_sales = sales_data.groupby('Product')['TotalSales'].sum().reset_index()# 5. 数据可视化
plt.figure(figsize=(10, 6))
sns.barplot(x='Product', y='TotalSales', data=product_sales)
plt.title('Total Sales by Product')
plt.xlabel('Product')
plt.ylabel('Total Sales ($)')
plt.xticks(rotation=45)
plt.show()

说明:

  1. 数据生成:我们生成了包含10条记录的示例销售数据,包括订单编号、产品名称、购买数量、单价和订单日期。
  2. 数据预处理:检查并填充缺失值(本示例中未实际出现缺失值,但提供了填充示例)。
  3. 总销售额计算:通过乘以数量和单价计算每个订单的总销售额。
  4. 分组汇总:按 Product 列进行分组,并计算每种产品的总销售额。
  5. 数据可视化:使用 seaborn 创建柱状图,展示各产品的总销售额。

输出:

OrderID     0
Product     0
Quantity    0
Price       0
Date        0
dtype: int64

在这里插入图片描述

总结

通过上述步骤,我们演示了如何使用 Python 进行数据分析与可视化。关键步骤包括数据处理、分析和可视化。我们使用 pandas 进行数据清洗与分析,使用 matplotlibseaborn 进行可视化,展示了不同的图表和分析结果。

在实际应用中,数据分析与可视化是一个迭代的过程,您可以根据需求不断调整和优化。希望这篇博客能为您提供一个清晰的入门指南,助力您在数据分析与可视化的旅程中不断前行!如果有任何问题或建议,欢迎在评论区讨论!


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

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

相关文章

【AI】AIService(基本使用与指令定制)

【AI】AIService(基本使用与指令定制) 文章目录【AI】AIService(基本使用与指令定制)1. 简介2. AIService2.1 引入依赖2.2 编写AIService接口2.3 测试代码3. 指令定制3.1 系统提示词3.2 用户提示词1. 简介 AIService可以被视为应用程序服务层的一个组件&#xff0c;提供对应的…

AAAI赶稿后的心得

总结 已经第三次和老师们一起赶稿了&#xff0c;但是还是纰漏重重&#xff0c;每次都被我的垃圾写作给吓到。每次都手忙脚乱找不到重点&#xff0c;唉&#xff0c;我大概这辈子都成为不了郭老师&#xff1a; 自己把故事先捋清楚&#xff1a; 所有的东西都要抽象出来&#xff0c…

书籍推荐算法研究

## 项目概述本项目是一个完整的书籍推荐系统第五版(Complete Book Recommendation System V5),采用混合推荐策略,能够处理6种不同的用户场景,提供智能化的书籍推荐服务。## 系统架构### 核心设计思路系统采用**混合推荐策略**,结合了以下几种推荐算法:1. **协同过滤推荐…

工具自动生成Makefile

cmake 基础 cmake主要是生成Makefile&#xff0c;以便工程管理&#xff0c;只需要编写CMakeLists.txt安装camkesudo apt install cmake 安装cmake camke --version 查看cmake版本 sudo apt upgrade cmake 升级cmake源码隔离 在工程文件下创建一个build文件&…

Java项目:基于SSM框架实现的校园活动资讯网管理系统【ssm+B/S架构+源码+数据库+毕业论文+远程部署】

摘 要 使用旧方法对校园活动资讯进行系统化管理已经不再让人们信赖了&#xff0c;把现在的网络信息技术运用在校园活动资讯的管理上面可以解决许多信息管理上面的难题&#xff0c;比如处理数据时间很长&#xff0c;数据存在错误不能及时纠正等问题。 这次开发的校园活动资讯网…

关于echarts的性能优化考虑

作为资深前端工程师&#xff0c;在处理 ECharts 性能问题时&#xff0c;核心思路是减少渲染压力、优化数据处理、避免不必要的计算&#xff0c;尤其在大数据量&#xff08;万级以上&#xff09;、高频交互或多图表场景下&#xff0c;性能优化尤为关键。以下是实战中验证过的有效…

汽车EDI:Vitesco EDI 项目案例

Vitesco Technologies&#xff08;纬湃科技&#xff09;脱胎于大陆集团的动力总成部门&#xff0c;是一家于2021年上市的全球领先汽车技术供应商。公司专注于电动出行领域&#xff0c;提供电驱动系统、电池管理系统、功率电子及热管理等关键技术解决方案。同时&#xff0c;其业…

译|Netflix 技术博客:一个利用视觉-语言模型和主动学习高效构建视频分类器的框架

本篇介绍了Netflix的视频标注器&#xff08;VA&#xff09;&#xff0c;一个利用视觉-语言模型和主动学习的交互式框架。其技术亮点在于通过人机协作系统&#xff0c;结合零样本能力和主动学习&#xff0c;引导领域专家高效标注视频数据&#xff0c;显著提升了模型样本效率和平…

前端应用权限设计面面观

目录 1. 权限设计:前端为啥要操这份心? 2. 权限模型的“内功心法”:RBAC 和 ABAC RBAC:简单粗暴的角色分配 ABAC:灵活但烧脑的属性控制 3. 权限数据的“物流体系”:从后端到前端的旅程 权限数据从哪儿来? 权限数据咋存? 权限数据咋用? 4. 路由守卫:权限的“第…

Javaweb————Apache Tomcat服务器介绍及Windows,Linux,MAC三种系统搭建Apache Tomcat

&#x1f3cd;️&#x1f3cd;️&#x1f3cd;️第一部分&#xff1a;什么是服务器&#xff1f; 服务器是远程的一个电脑,里面安装服务器程序监听对应的端口对外提供服务&#xff0c;可以根据用户的请求去获取对应的数据并返回给调用方。 &#x1f3cd;️&#x1f3cd;️&#…

winsock socket通讯为什么UDP服务器无法获取客户端IP?

针对VB6 Winsock开发中UDP服务器无法获取客户端IP的问题&#xff0c;以下是系统性排查方案&#xff1a; 一、基础协议特性确认UDP无连接特性 Winsock的UDP协议本身是无连接的&#xff0c;需通过GetPeerName方法主动获取对端IP&#xff0c;而非自动存储。数据接收处理 必须在Dat…

大模型时代,Transformer 架构中的核心注意力机制算法详解与优化实践

大模型时代&#xff0c;Transformer 架构中的核心注意力机制算法详解与优化实践Transformer 注意力机制深度解析与工业级优化实践一、注意力机制核心原理1.1 基础注意力公式1.2 多头注意力&#xff08;Multi-Head&#xff09;1.3 注意力机制可视化二、工业级优化技术2.1 计算效…

自学嵌入式 day40 51单片机

一、嵌入式&#xff1a;以应用为中心&#xff0c;计算机为基础&#xff0c;软硬件可剪裁的专用计算机系统二、MCU&#xff1a;Micro Controcler Unit 微控制单元->单片机1、特点&#xff1a;集成化高&#xff0c;集成到一块芯片外设&#xff08;GPIO、UART、ADC&#xff09;…

Minimizing Coins(Dynamic Programming)

题目描述Consider a money system consisting of n coins. Each coin has a positive integer value. Your task is to produce a sum of money x using the available coins in such a way that the number of coins is minimal. For example, if the coins are {1,5,7} and t…

Kafka——关于Kafka动态配置

引言在Kafka的运维实践中&#xff0c;参数配置的调整曾是一件令工程师头疼的事情。传统模式下&#xff0c;Broker的所有参数都需要在server.properties中静态定义&#xff0c;任何修改都必须重启Broker才能生效。对于承载着核心业务的生产集群而言&#xff0c;频繁重启不仅意味…

MSQL-聚簇索引与非聚簇索引的比较

聚簇索引详解InnoDB 的聚簇索引特性表数据本身就是聚簇索引&#xff1a;数据行实际存储在聚簇索引的叶子节点中"表就是索引&#xff0c;索引就是表"的结构每个InnoDB表有且只有一个聚簇索引聚簇索引的叶子节点存储的是&#xff1a;真实数据主键作为聚簇索引&#xff…

语音识别数据集

目录 Voice Activity Detection 自己采集&#xff1a; 1. ASR Resources&#xff08;语音识别资源&#xff09; 2. LM Resources&#xff08;语言模型资源&#xff09; 这是一个数据表&#xff1a; 噪声数据集&#xff1a; Voice Activity Detection 自己采集&#xff1a…

Linux线程同步与互斥(上)

目录 前言 1.互斥 1.先来见一种现象&#xff08;数据不一致问题&#xff09; 2.如何解决上述问题 3.理解为什么数据会不一致&&认识加锁的接口 4.理解锁 5.锁的封装 前言 在前面对线程的概念和控制的学习过程中&#xff0c;我们知道了线程是共享地址空间的&#…

Codeforces Global Round 27

ABC 略D将每个数拆成x*2的整数次幂&#xff0c;一个直接的想法是尽量把2的整数次幂给大的数。那么所有乘上2的整数次幂的数构成的序列单调递减&#xff0c;反证法&#xff0c;如果序列中存在i j 使得a[i]<a[j]&#xff0c;那么我们不如把给a[i]乘的2的幂给a[j]乘。#include …

深入 Go 底层原理(二):Channel 的实现剖析

1. 引言"Do not communicate by sharing memory; instead, share memory by communicating." (不要通过共享内存来通信&#xff0c;而应通过通信来共享内存。) 这是 Go 语言并发设计的核心哲学。而 channel 正是实现这一哲学的核心工具。Channel 为 Goroutine 之间的…