【Python】【数据分析】Python 数据分析与可视化:全面指南

【Python】【数据分析】Python 数据分析与可视化:全面指南

目录

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 进行可视化,展示了不同的图表和分析结果。

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


Read more

MySQL:事务的理解

MySQL:事务的理解

一、CURD不加控制,会有什么问题  (1)因为,MySQL里面存的是数据,所以很有可能会被多个客户访问,所以mysqld可能一次会接受到多个关于CURD的请求。(2)且mysql内部是采用多线程来完成数据存储等相关工作的,所以必然会存在对数据并发访问的场景      ——>会导致一些多请求并发可能产生的异常结果        比如同行转账,按道理是我减100,你加100,但是因为我是同行所以用的是一张数据库的表,可能我减100的时候还没做完网络或者数据库出问题等其他原因导致没有给你加100,那么整个操作就会出现一个中间过程(我减了但是你没有加),这就有问题,在这种情况下我们允许异常产生,一旦操作没有完成我们应该把减掉的100再加回来,就好像什么都没做,等待下次合适的时候再去转账。这就相当于转账之后不要有中间过程,而是在转的时候一旦出现异常就直接进行回滚,因为不回滚的话就会有问题,必须得回滚保证和初始的状态一样,这就叫我们的回滚操作。在高并发的场景下数据或多或少都会出现这样的问题,所以这也就要求mysql必须要有针对这类问题的解决方案。 二、CURD满足什么属性,能解决上述

By Ne0inhk
华为OD机试双机位C卷:采购订单 (Py/Java/C/C++/Js/Go)

华为OD机试双机位C卷:采购订单 (Py/Java/C/C++/Js/Go)

采购订单 华为OD机试双机位C卷 - 华为OD上机考试双机位C卷 100分题型 华为OD机试双机位c卷真题目录点击查看: 华为OD机试双机位C卷真题题库目录|机考题库 + 算法考点详解 题目描述 在一个采购系统中,采购申请(PR)需要经过审批后才能生成采购订单(PO)。每个PR包含商品的单价(假设相同商品的单价一定是一样的)及数量信息。系统要求对商品进行分类处理:单价高于100元的商品需要单独处理,单价低于或等于100元的相同商品可以合并到同一采购订单PO中。针对单价低于100的小额订单,如果量大可以打折购买。 具体规则如下: 如果PR状态为"审批通过",则将其商品加入到PO中。如果PR的状态为"审批拒绝"或"待审批",则忽略改PR。 对于单价高于100元的商品,每个商品单独生成一条PO记录。对于单价低于100元的商品,将相同商品的数量合并到一条PO记录中。 如果商品单价<100且商品数量>=100,则单价打9折。 输入描述 第一行包含整数N,

By Ne0inhk
本文介绍如何利用Trae国际版的Agent Skill功能大幅提升Java后端开发效率,特别针对Spring Cloud微服务架构,包含完整的实战案例、代码示例和最佳实践。

本文介绍如何利用Trae国际版的Agent Skill功能大幅提升Java后端开发效率,特别针对Spring Cloud微服务架构,包含完整的实战案例、代码示例和最佳实践。

如何在Trae国际版中使用Agent Skill提升Java后端开发效率 引言 对于Java后端开发者,尤其是Spring Cloud微服务架构的使用者来说,日常工作中充满了重复的样板代码编写、繁琐的配置管理和复杂的调试工作。Trae国际版的Agent Skill功能就像是为Java开发者量身打造的"瑞士军刀",能够自动化这些重复劳动,让我们专注于更有创造性的架构设计和业务逻辑实现。 本文将结合Java后端开发的实际场景,特别是Spring Cloud微服务架构,详细介绍如何使用Trae国际版的Agent Skill大幅提升开发效率。 一、Trae国际版Agent Skill简介 1.1 什么是Agent Skill Agent Skill是Trae国际版中一种模块化的AI能力扩展机制,每个Skill都是一个专注于特定领域的"智能助手"。对于Java开发者来说,这些Skill可以理解为精通Java生态的"虚拟专家",能够处理从代码生成到架构设计的各种任务。 1.2 适合Java开发者的核心Skill * Spring Boot代码生成器:快速生成符合最佳实践的Sp

By Ne0inhk
【抽奖系统开发实战】Spring Boot 项目的用户模块设计:注册登录、权限管控与敏感数据加密

【抽奖系统开发实战】Spring Boot 项目的用户模块设计:注册登录、权限管控与敏感数据加密

文章目录 * 一、注册 * 1.1 敏感字段加密 * 1.2 用户注册 * 1.3 TypeHandler * 二、控制层通用异常处理 * 三、登录 * 3.1 发送验证码 * 3.2 Redis的配置与使用 * > 核心工具类`RedisUtil` * 3.3 JWT * > JWT 令牌介绍 * > 核心工具类`JWTUtil` * 3.4 管理员登录 * 四、强制登录 * 4.1 前端处理 * 4.2 后端处理 * 五、用户管理 * 5.1 后台管理页面

By Ne0inhk