当前位置: 首页 > news >正文

Python数据分析基础(一)

一、数据分析概述与环境搭建

数据分析学习主要涵盖以下几个部分:

  • 数据分析概述与环境搭建
  • Numpy 科学计算
  • Pandas 数据处理
  • 数据可视化
  • 项目实战

1.2 Anaconda 安装

Anaconda 简介

Anaconda 是一个用于科学计算的 Python 发行版,包含了众多流行的科学计算、数据分析的 Python 包。下面将 Anaconda 方案与原生 Python+pip 方案从多个维度进行对比:

对比维度Anaconda 方案原生 Python+pip 方案
安装难度一键安装所有工具需手动装每个库
依赖管理Conda 自动解决依赖冲突pip 可能遇到版本兼容问题
磁盘占用较大 (3GB + 基础包)可按需安装 (最小仅几十 MB)
适用场景初学者 / 快速开始数据分析开发者 / 需要精确控制环境
典型案例学校教学 / 个人学习生产服务器部署

1.3 Jupyter 笔记本的使用

Jupyter 是一个开源的交互式计算环境,广泛应用于数据科学、机器学习、科学研究等领域,主要组件有 Jupyter Notebook 和 Jupyter Lab。

JupyterLab 作为 Jupyter Notebook 的继承者,提供了更现代化和功能丰富的界面。其多文档界面、内置协作功能和扩展系统使其成为数据科学家和研究人员的首选。

在 PyCharm 中集成 Jupyter

在 PyCharm 中可通过以下路径创建 Jupyter Notebook:New -> Jupyter Notebook

Jupyter 快捷键
快捷键功能
esc从输入模式退出到命令模式
a在当前 cell 上面创建一个新的 cell
b在当前 cell 下面创建一个新的 cell
dd删除当前 cell
m切换到 markdown 模式
y切换到 code 模式
ctrl + 回车运行 cell
shift + 回车运行当前 cell 并创建一个新的 cell

二、Numpy 科学计算

2.1 Numpy 介绍

numpy 是 Python 中科学计算的基础包。它是一个 Python 库,提供多维数组对象、各种派生对象(例如掩码数组和矩阵)以及用于对数组进行快速操作的各种方法,包括数学、逻辑、形状操作、排序、选择、I/O、离散傅里叶变换、基本线性代数、基本统计运算、随机模拟等等。

numpy 的部分功能如下:

  • ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组。
  • 用于对整组数据进行快速运算的标准数学函数(无需编写循环)。
  • 用于读写磁盘数据的工具以及用于操作内存映射文件的工具。
  • 线性代数、随机数生成以及傅里叶变换功能。
  • 用于集成由 C、C++、Fortran 等语言编写的代码的 API。

2.2 ndarray

ndarray 的核心特性
  • 多维性:支持 0 维(标量)、1 维(向量)、2 维(矩阵)及更高维数组。
  • 同质性:所有元素类型必须一致(通过 dtype 指定)。
  • 高效性:基于连续内存块存储,支持向量化运算。
ndarray 的属性
属性名称通俗解释使用示例
shape数组的形状:行数和列数(或更高维度的尺寸)。arr.shape
ndim维度数量:数组是几维的(1 维、2 维、3 维等)。arr.ndim
size总元素个数:数组中所有元素的总数。arr.size
dtype元素类型:数组中元素的类型(整数、浮点数等)。arr.dtype
T转置:行变列,列变行。arr.T
itemsize单个元素占用的内存字节数。arr.itemsize
nbytes数组总内存占用量:size * itemsize。arr.nbytes
flags内存存储方式:是否连续存储(高级优化)。arr.flags

矩阵相关概念

矩阵是一个由行(row)和列(column)排列成的矩形数组。

名称维度示例备注
标量0 维5, 3.14单个数字,无行列
向量1 维[1, 2, 3]只有行或列(一维数组)
矩阵2 维[[1, 2], [3, 4]]严格的行列结构(二维表)
张量≥3 维[[[1, 2], [3, 4]]]高阶数组(如 RGB 图像)

一些特殊矩阵:

  • 零矩阵:所有元素为 0。
  • 单位矩阵:对角线上为 1,其余为 0。
  • 对角矩阵:只有对角线有非零值。
  • 对称矩阵:A=Aᵀ(A 的转置等于自身)。
ndarray 的数据类型 
数据类型说明
bool布尔类型
int8、uint8有符号、无符号的 8 位(1 字节)整型
int16、uint16有符号、无符号的 16 位(2 字节)整型
int32、uint32有符号、无符号的 32 位(4 字节)整型
int64、uint64有符号、无符号的 64 位(8 字节)整型
float16半精度浮点型
float32单精度浮点型
float64双精度浮点型
complex64用两个 32 位浮点数表示的复数
complex128用两个 64 位浮点数表示的复数
ndarray 的创建

ndarray 的创建方法多样,适用于不同场景:

创建方式方法用途
基础构造np.array()、np.copy()适用于手动构建小规模数组或复制已有数据。
预定义形状填充np.zeros、np.ones()、np.empty()、np.full()用于快速初始化固定形状的数组(如全 0 占位、全 1 初始化)。
基于数值范围生成np.arange()、np.linspace()、np.logspace()生成数值序列,常用于模拟时间序列、坐标网格等。
特殊矩阵生成np.eye()、np.diag()数学运算专用(如线性代数中的单位矩阵)。
随机数组生成np.random.rand()、np.random.randn()、np.random.randint()模拟实验数据、初始化神经网络权重等场景。
高级构造方法np.loadtxt()、np.array()、np.fromfunction()处理非结构化数据(如文件、字符串)或通过函数生成复杂数组。

1.基础构造方法
import numpy as np
# 直接从列表创建数组
arr = np.array([1, 2, 3, 4, 5])
print(arr)  # 输出:[1 2 3 4 5]# 从列表变量创建数组
list1 = [1, 2, 3, 4, 5]
arr1 = np.array(list1)
print(arr1)  # 输出:[1 2 3 4 5]
2. 复制数组
import numpy as np
# 复制数组(生成独立副本)
arr2 = np.copy(arr1)
print("原始数组arr1:", arr1)  # 输出:原始数组arr1: [1 2 3 4 5]
print("复制数组arr2:", arr2)  # 输出:复制数组arr2: [1 2 3 4 5]# 修改复制数组不影响原始数组
arr2[0] = 10
print("修改后arr1:", arr1)  # 输出:修改后arr1: [1 2 3 4 5]
print("修改后arr2:", arr2)  # 输出:修改后arr2: [10  2  3  4  5]
3. 全 0 数组
import numpy as np
# 创建2行3列的全0数组(默认float类型)
arr3 = np.zeros((2, 3))
print(arr3)
# 输出:
# [[0. 0. 0.]
#  [0. 0. 0.]]# 创建一维全0数组
arr3 = np.zeros((2,))
print(arr3)  # 输出:[0. 0.]
4. 全 1 数组
import numpy as np
# 创建5行8列的int类型全1数组
arr4 = np.ones((5, 8), dtype=int)
print(arr4)
# 输出:
# [[1 1 1 1 1 1 1 1]
#  [1 1 1 1 1 1 1 1]
#  [1 1 1 1 1 1 1 1]
#  [1 1 1 1 1 1 1 1]
#  [1 1 1 1 1 1 1 1]]
5. 未初始化数组(谨慎使用)
import numpy as np
# 创建3行4列的未初始化数组(元素值为随机垃圾值)
arr5 = np.empty((3, 4))
print(arr5)  # 输出结果为随机值,每次运行可能不同
6. 指定值填充数组
import numpy as np
# 创建3行4列的全5数组
arr6 = np.full((3, 4), 5)
print(arr6)
# 输出:
# [[5 5 5 5]
#  [5 5 5 5]
#  [5 5 5 5]]
7. 形状复制类数组
import numpy as np
# 创建与arr6形状相同的全0数组
arr7 = np.zeros_like(arr6)
print(arr7)
# 输出:
# [[0 0 0 0]
#  [0 0 0 0]
#  [0 0 0 0]]# 创建与arr7形状相同的全2025数组
arr8 = np.full_like(arr7, 2025)
print(arr8)
# 输出:
# [[2025 2025 2025 2025]
#  [2025 2025 2025 2025]
#  [2025 2025 2025 2025]]
8. 数值范围生成数组
import numpy as np
# 生成等差数列(1到10,步长2)
arr9 = np.arange(1, 10, 2)
print(arr9)  # 输出:[1 3 5 7 9]# 生成等间隔序列(0到10,取5个点)
arr10 = np.linspace(0, 10, 5)
print(arr10)  # 输出:[ 0.   2.5  5.   7.5 10. ]# 生成特定步长序列(0到100,步长25)
arr11 = np.arange(0, 101, 25)
print(arr11)  # 输出:[  0  25  50  75 100]# 生成对数间隔序列(以2为底,0到4次方,取3个点)
arr12 = np.logspace(0, 4, 3, base=2)
print(arr12)  # 输出:[ 1.  4. 16.]
9. 特殊矩阵构造
import numpy as np
# 创建3x3单位矩阵
arr1 = np.eye(3, dtype=int)
print(arr1)
# 输出:
# [[1 0 0]
#  [0 1 0]
#  [0 0 1]]# 创建3x4单位矩阵
arr2 = np.eye(3, 4, dtype=int)
print(arr2)
# 输出:
# [[1 0 0 0]
#  [0 1 0 0]
#  [0 0 1 0]]# 创建对角矩阵(对角线元素为1,2,3)
arr3 = np.diag([1, 2, 3])
print(arr3)
# 输出:
# [[1 0 0]
#  [0 2 0]
#  [0 0 3]]
10. 随机数组生成
import numpy as np
# 生成3行4列的0-1均匀分布随机浮点数
arr4 = np.random.rand(3, 4)
print(arr4)
# 输出示例:
# [[0.01509913 0.77429605 0.08387621 0.11136891]
#  [0.46665429 0.932956   0.45962575 0.16040936]
#  [0.63886266 0.40999997 0.9272048  0.65846277]]# 生成2行2列的3-6区间均匀分布随机浮点数
arr5 = np.random.uniform(3, 6, (2, 2))
print(arr5)
# 输出示例:
# [[5.94723917 4.73325818]
#  [5.49598497 3.95144181]]# 生成2行2列的3-6区间随机整数
arr6 = np.random.randint(3, 6, (2, 2))
print(arr6)
# 输出示例:
# [[5 3]
#  [4 5]]# 生成2行2列的标准正态分布随机数(均值0,标准差1)
arr7 = np.random.randn(2, 2)
print(arr7)
# 输出示例:
# [[-0.37140525  1.19865143]
#  [-1.02207119  0.08113326]]# 设置随机种子(保证结果可复现)
np.random.seed(42)
arr8 = np.random.rand(2, 2)
print(arr8)
# 输出:
# [[0.37454012 0.95071431]
#  [0.73199394 0.59865848]]
ndarray 的索引与切片
索引 / 切片类型描述 / 用法
基本索引通过整数索引直接访问元素,索引从 0 开始
行 / 列切片使用冒号:切片语法选择行或列的子集
连续切片从起始索引到结束索引按步长切片
slice 函数通过slice(start, stop, step)定义切片规则
布尔索引通过布尔条件筛选满足条件的元素,支持逻辑运算符&(与)、``(或)
1. 基本索引(以 2 维数组为例)
import numpy as np# 创建一个3行4列的数组
arr = np.array([[1, 2, 3, 4],[5, 6, 7, 8],[9, 10, 11, 12]])# 访问第2行第3列的元素(索引从0开始)
print("第2行第3列的元素:", arr[1, 2])  #第2行第3列的元素:7
2. 行 / 列切片
import numpy as nparr = np.array([[1, 2, 3, 4],[5, 6, 7, 8],[9, 10, 11, 12]])# 取所有行的第2列元素(:表示所有行)
print("所有行的第2列元素:")
print(arr[:, 1])  # 输出:[ 2  6 10]# 取第2行的所有列元素
print("\n第2行的所有列元素:")
print(arr[1, :])  # 输出:[5 6 7 8]
3. 连续切片(按步长访问)
import numpy as np# 创建一个1维数组
arr = np.array([10, 20, 30, 40, 50, 60, 70, 80])# 从索引1开始到索引6结束,步长为2(不包含结束索引)
print("连续切片结果:", arr[1:6:2])  # 输出:连续切片结果: [20 40 60]
4. 使用 slice 函数
import numpy as nparr = np.array([10, 20, 30, 40, 50, 60, 70, 80])# 定义切片规则:从索引2开始,到索引7结束,步长为1
s = slice(2, 7, 1)
print("使用slice函数的切片结果:", arr[s])  # 输出:使用slice函数的切片结果: [30 40 50 60 70]
5. 布尔索引
import numpy as nparr = np.array([[1, 2, 3],[4, 5, 6],[7, 8, 9]])# 筛选出所有大于3的元素
bool_mask = arr > 3
print("大于3的元素:")
print(arr[bool_mask])  # 输出:[4 5 6 7 8 9]# 筛选出大于3且小于7的元素(注意布尔运算需用&,且条件需加括号)
bool_mask2 = (arr > 3) & (arr < 7)
print("\n大于3且小于7的元素:")
print(arr[bool_mask2])  # 输出:[4 5 6]

http://www.lryc.cn/news/601337.html

相关文章:

  • 沪深L2逐笔十档委托队列分时Tick历史数据分析处理
  • RK3568 Linux驱动学习——U-Boot使用
  • 15.7 DeepSpeed实战:单卡38GB到多卡12GB,3倍效率提升的ZeRO-3配置全解
  • golang设置http代理
  • 2025年Solar应急响应公益月赛-7月wp
  • 将 JsonArray 类型的数据导出到Excel文件里的两种方式
  • 新手向:IDM下载失败排查
  • keepalived入门及其基础运用实验
  • Java面试宝典:MySQL执行原理二
  • 字节跳动Coze Studio开源了!架构解析
  • 数据处理实战(含代码)
  • Web Worker:解锁浏览器多线程,提升前端性能与体验
  • 数据结构基础内容(第十篇:排序)
  • 力扣129. 求根节点到叶节点数字之和
  • 力扣热题100----------53最大子数组和
  • 【多模态】天池AFAC赛道四-智能体赋能的金融多模态报告自动化生成part2-报告输出
  • logstash采集springboot微服务日志
  • Spring经典“送命题”:BeanFactory vs FactoryBean
  • 力扣131:分割回文串
  • JavaScript单线程实现异步
  • 探秘CommonJS:Node.js模块化核心解析
  • GPT-4o实战应用指南:从入门到精通的技术心得
  • 物联网安装调试-物联网网关
  • 【图像处理基石】Segment Anything Model (SAM) 调研
  • MGRE综合实验
  • 望言OCR视频字幕提取2025终极评测:免费版VS专业版提全方位对比(含免费下载)
  • 20250707-2-Kubernetes 网络-Ingress暴露应用(http与https)_笔记
  • Flutter中实现页面跳转功能
  • iOS安全和逆向系列教程 第21篇:iOS应用加密与混淆技术深度剖析
  • macOS配置 GO语言环境