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

数据分析三剑客

数据分析三剑客

1.课程介绍和工具安装

1.1课程导论

数据分析的流程

  • 数据收集:数据从哪里来
  • 数据清洗:缺失值、错误数据、格式混乱
  • 数据分析:统计(平均值、最大值、比例);分组数据对比
  • 数据可视化:折线图、柱状图、散点图

数据分析工具链

  • numpy:高性能数值计算(矩阵、向量),数据的发动机
  • pandas:表格数据处理(类似于高级execl),数据的手术刀
  • matplotlib:数据可视化(绘图库),数据的翻译官

Anaconda + Jupyter Notebook

课程主要内容

  1. 数据分析概述与环境搭建
  2. Numpy科学计算
  3. Pandas数据处理
  4. 数据可视化
  5. 项目实战

1.2 Anaconda

  • 方便安装:就像安装一个应用程序一样简单,预先安装好了许多常用工具,无需单独配置。

  • 包管理器:包含一个名为Conda的包管理器,用于安装、更新和管理软件包。

  • 环境管理:可以轻松创建和管理多个独立的python环境

  • 集成工具和库:捆绑了许多用于数据科学、机器学习和科学计算的重要工具和库。

  • 跨平台:可在windows、macOS、Linux等操作系统上运行

    https://blog.csdn.net/kinsman2016/article/details/134861263
    

    由于本人电脑已经安装了python,后续实战使用的是pip

1.3 Jupyter笔记本的使用(pycharm中集成Jupyter)

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

在命令行输入如下命令,启动jupyter服务

jupyter notebook

在命令行查看对应的,登录字符串,每次token都不一样

 http://127.0.0.1:8888/tree?token=bf1950fb7cc439719c200ae9e454c3b52904da329f0670d2

在浏览器中复制粘贴上述字符串,即可使用jupyter 编写代码了。

或者直接在pycharm中新建jupyter 文件,直接使用pycharm编辑和运行即可。

2.Numpy科学计算

2.1 Numpy介绍

是 Python 生态中用于‌科学计算的核心库‌,提供高性能的‌多维数组对象‌(ndarray)及数学运算工具,是数据科学、机器学习和数值计算的基础依赖

2.2 ndarray

高效存储同构数据(同类型元素),支持向量化操作(无需显式循环)。
维度(shape):一维向量、二维矩阵、更高维张量

属性名称 通俗解释 使用示例
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
2.2.1 多维性
import numpy as np
arr = np.array(5) # 0维数组
print(arr)
print(arr.ndim) # 数组的维度
import numpy as np
arr = np.array([1, 2, 3]) # 1维数组
print(arr)
print(arr.ndim) # 数组的维度
import numpy as np
arr = np.array([[1, 2, 3],[2, 3 ,4]]) # 2维数组
print(arr)
print(arr.ndim) # 数组的维度
2.2.2 同质性
import numpy as np
arr = np.array([1, 'hello']) # 不同的数据类型,会被强制转换为相同的数据类型
print(arr) # ['1' 'hello']
arr = np.array([1, 2.8])  # 数据类型强行转换为浮点数
print(arr) # [1.  2.8]
2.2.3 属性
arr = np.array([[1,2,3],[2,3,4]])
print(arr.ndim)  # 2
print(arr.shape) #(2,3)
print(arr.dtype) # int64
print(arr.size)  # 6
print(arr.itemsize) # 8
print(arr.nbytes) # 48
print(arr.T) # 转置
print(arr.flags)
2.2.4 ndarray的创建方法

1.基础构造:适用于手动构建小规模数组或复制已有数据
2.预定义形状填充:用于快速初始化固定形状的数组(如全0占位、全1初始化)
3.基于数值范围生成:生成数值序列,常用于模拟时间序列、坐标网格等
4.特殊矩阵生成:数学运算专用(如线性代数中的单位矩阵)
5.随机数组生成:模拟实验数据、初始化神经网络权重等场景
6.高级构造函数:处理非结构化数据(如文件、字符串)或通过函数生成复杂数组

用途 方法
基础构造 np.array() np.copy()
预定义形状填充 np.zeros() np.ones() np.empty() np.full()
基于数值范围生成 np.arange() np.linspace() np.logspace()
特殊矩阵生成 np.eye() np.diag()
随机数组生成 np.random.rand() np.random.randn() np.random.randint()
高级构造函数 np.array() np.loadtxt() np.fromfunction()
名称 维度 示例 备注
标量 0 5,3,4 单个数字,无行列
向量 1 [1,2,3] 只有行或者列(一位数组)
矩阵 2 [[1,2,3],[2,3,4]] 严格的行列结构(二维表)
张量 ≥3 [[[1,2],[2,3]]] 高阶数组(如RGB图像)
矩阵类型 定义 例子
零矩阵 所有元素为0 [0 0]
[0 0]
单位矩阵 对角线上为1,其余为0 [1 0]
[0 1]
对角矩阵 只有对角线有非0值 [2 0]
[0 3]
对称矩阵 A=AT(转置后和原来相同) [1 2]
[2 3]
# 基础创建方法
list1 = [1, 2, 3]
arr = np.array( list1 , dtype=np.float32)
print(arr)
arr1 = np.copy(arr) # 元素和原始的数据相同,但不是同一个数组
print(arr1)
# 预定义形状
# 全0数组
arr = np.zeros((2, 3), dtype=np.uint8)
print(arr)# 全1的数组
arr = np.ones((3, 3), dtype=np.uint8)
print(arr)# 未初始化
arr = np.empty((2, 3), dtype=np.float32)
print(arr)# 全部填充同一个数值
arr = np.full((2, 3), fill_value=3)
print(arr)
# 基于数值范围生成(等差数列)
arr = np.arange(1, 10, 2)  # start, end, step
print(arr)
# 等间隔数列
arr = np.linspace(0, 2 * np.pi, 50) # start, stop, num
print(arr)# 对数间隔数列
arr = np.logspace(0, 1, 20, base=2) # start, stop, num
print(arr)
# 特殊矩阵
# 单位矩阵,主对角线上的元素为1, 其他元素为0
arr = np.eye(3, 4, dtype=np.uint8) # N, M
print(arr)# 对角矩阵,主对角线上是非0的数字,其他的数字为0
arr = np.diag([1, 2, 3])
print(arr)
# 随机数的生成
# 生成0-1之间的随机浮点数,均匀分布
arr = np.random.rand(2, 3) # 2行3列
print(arr)# 生成指定范围区间的随机浮点数 np.random.uniform(low=0.0, high=1.0, size=None)
arr = np.random.uniform(3, 6, size=(2, 3))
print(arr)# 生成指定范围区间的随即整数
arr = np.random.randint(3,10,(2,3))
print(arr)# 生成随机数列--正态分布,两边小,中间大
arr = np.random.randn(2,3)
print(arr)# 设置随机种子
np.random.seed(20)
arr = np.random.randint(1, 10, (2, 5))
print(arr)
2.2.5 ndarray的数据类型
数据类型 说明
bool 布尔类型
int8 int16 int32 int64
uint8 uint16 uint32 uint64
有符号、无符号的 8位(1字节)整型
有符号、无符号的16位(2字节)整型
有符号、无符号的32位(4字节)整型
有符号、无符号的64位(8字节)整型
float16 float32 float64 半精度浮点型、单精度浮点型、双精度浮点型
complex64 complex128 用2个32位浮点数表示的复数
用2个64位浮点数表示的复数
# ndarray的数据类型
# bool
arr = np.array([1, 0, -1], dtype=np.bool)
print(arr)
#整数
arr = np.array([1, 0, -1], dtype=np.int8)
print(arr)
#浮点数
arr = np.random.uniform(2,9,(3,4))
print(arr)
#复数
real = np.array([1,2,3])
imag = np.array([3,4,5])
complex_arr = real + 1j*imag
print(complex_arr)x = np.real(complex_arr)
y = np.imag(complex_arr)
print(x, y)
2.2.6 索引和切片
索引、切片类型 描述、用法
基本索引 通过整数索引直接访问元素,索引从0开始
行列切片 使用 : 切片语法,选择行列的子集
连续切片 从起始索引到结束索引按步长切片
使用slice函数 通过slice(start,stop, step)定义切片规则
布尔索引 通过布尔条件筛选满足条件的元素,支持逻辑运算符& |
# 一维数组的索引与切片arr = np.random.randint(1, 100, 30)
print(arr)# 下标索引
print(arr[0])
# 连续切片
print(arr[0:10])
# 布尔
print(arr[arr>10])# 布尔索引
print(arr[ (10<arr) & (arr<50)])# slice函数,等价于 index=2 到index=7
print(arr[slice(2, 7)])
# 二维数组的索引与切片arr = np.random.randint(1, 100, (6, 7))
print(arr)
# 行列index
print(arr[2, 3])# 行列切片范围
print(arr[0:2, 0:3])# bool 返回一个一维数组
print(arr[arr>50])# 嵌套使用
print(arr[2][arr[2]>50])print(arr[:, 3][arr[:, 3] > 50])
2.2.7 ndarray的运算
# 算术运算 ,对应的元素做算术运算
a = np.array([1,2,3])
b = np.array([2,3,4])
print(a+b)
print(a-b)
print(a*b)
print(a/b)
# 二维数组 也是对应位置的元素互相算术运算
a = np.array([[1,2,3],[4,5,6]])
b = np.array([[1,2,3],[4,5,6]])
print(a+b)
print(a-b)
print(a*b)
print(a/b)print(a+3) # 每个元素+3
print(a*3) # 每个元素*3
import numpy as np
# 广播机制 1.先获取shape 2.是否广播
# 同一纬度 或者行列为=其中一个为1,
a = np.array([1,2,3])        # 1*3
b = np.array([[2],[3],[4]])  # 3*1
print(a)
print(b)
print(a+b)
print(a-b)
"""
a:扩充
1 2 3
1 2 3
1 2 3b:扩充
2   2   2
3   3   3
4   4   4
"""
# 矩阵相乘(@)运算
"""
前提条件:左矩阵的列数必须等于右矩阵的行数(即若 A为 m×n 矩阵,则 B 必须是 n×p 矩阵)
运算规则:结果矩阵 C 的维度为 m×p(行数同左矩阵,列数同右矩阵)元素计算:即左矩阵第 i 行与右矩阵第 j列的点积)C11 = [1,2] * [3, 6] = 1*3 + 2*6 = 15c12 = [1,2] * [4, 7] = 1*4 + 2*7 = 18c13 = [1,2] * [5, 8] = 1*5 + 2*8 = 21C21 = [2,4] * [3, 6] = 2*3 + 4*6 = 30c22 = [2,4] * [4, 7] = 2*4 + 4*7 = 36c23 = [2,4] * [5, 8] = 2*5 + 4*8 = 42C31 = [3,4] * [3, 6] = 3*3 + 4*6 = 33c32 = [3,4] * [4, 7] = 3*4 + 4*7 = 40c33 = [3,4] * [5, 8] = 3*5 + 4*8 = 47c = [[15 18 21][30 36 42][33 40 47]]
"""
a = np.array([[1,2],[2,4],[3,4]]) # mxn = 3*2  3行2列
b = np.array([[3,4,5],[6,7,8]])   # nxp = 2*3  2行3列c = a @ b  # c的预算结果应该是 mxp = 3*3  3行3列print(a @ b)

2.3 numpy 常用函数

基本数学函数 统计 比较 去重 其他 排序
np.sqrt(x) np.sum(x) np.greater(a,b) np.unique(x) np.concatenate((a,b)) np.sort(x)
np.exp(x) :e为底的指数 np.mean(x) np.less(a,b) np.in1d(a,b) np.split(x, indices) x.sort()
np.log(x) np.median(x) np.equal(x,b) np.reshape(x,shape) np.argsort(x)
np.sin(x) np.std(x) np.logical_and(a,b) np.copy(x) np.lexsort(keys)
np.abs(x) np.var(x) np.where(condition,x,y) np.isnan(x)
np.power(x1,x2):
x1底

x2:指数
np.min(x) np.max(x)
np.round(x) np.percentitle(x, q)
2.3.1基本函数
# 计算平方根
a = np.sqrt(7)
print(a)
a = np.sqrt([1,2,3])
print(a)
arr = np.array([1,2,3])
a = np.sqrt(arr)
print(a)# 计算指数
print(np.exp(1))  # e的1次方  2.71828# 计算自然对数 lnx  
print(np.log(2.71))# 计算三角函数的值
print(np.sin(np.pi/2))
print(np.cos(np.pi))# 计算绝对值
arr = np.array([-1, 2, -3])
print(np.abs(arr))# 计算a^b
arr = np.array([-1, 2, -3])
print(np.power(arr, 2))# 向上取整
arr = np.array([-1.5, 2.5, -3.223])
print(np.ceil(arr))#向下取整
print(np.floor(arr))# 检测缺失值 NaN  空值
arr = np.array([-1.5, 2.5, -3.223, np.nan])
np.isnan(arr)
2.3.2统计函数
arr = np.random.randint(1, 20, 10)
print(arr)
# 求和
print(np.sum(arr))
# 平均值
print(np.mean(arr))
# 中位数 如果是奇数个,就是排序后中间的值, 如果是偶数个,就是排序后中间两位数的平均值
print(np.median(arr))
# 方差  1 2 3的平均值是2  方差=(1-2)^2 + (2-2)^2 + (3-2)^2
print(np.var([1,2,3]))
# 标准差  是方差开根号 ,表示数据的离散程度,质量控制、风险评估,值越小,越稳定
print(np.std([1,2,3]))
# 最大值,以及下标
print(np.max(arr), np.argmax(arr))# 最小值
print(np.min(arr), np.argmin(arr))
# 分位数, 统计出20%的数字小于计算出来的结果
print(np.percentile(arr, 20))
# 累积和 An 等于前n个数的和
arr = np.array([1,2,3])
print(np.cumsum(arr)) # [1 3 6]
# 累积积 An = 前n个数的积
print(np.cumprod(arr))
2.3.3比较函数
# 大于、小于、等于
print(np.greater([3,4,5,6,7], 4)) # [False False  True  True  True]
print(np.less([3,4,5,6,7], 4)) # [ True False False False False]
print(np.equal([3,4,5,6,7], 4)) # [False  True False False False]
print(np.equal([1,2,3],[3,2,3])) # [False  True  True]# 逻辑与或非
print(np.logical_and([0,1],[1,1])) # [False  True]
print(np.logical_not([0,1])) # [ True False]
print(np.logical_or([0,1],[1,1])) # [ True  True]
#检查数组中是否所有的都为True,或者有一个为True
print(np.all([0,0,0,1])) # False
print(np.any([0,0,0,1])) # True# 自定义条件
# print(np.where(条件, 符合条件, 不符合条件))
arr = np.array([1,2,3,5,6])
print(np.where(arr>3, arr, 0)) # [0 0 0 5 6]score = np.random.randint(50, 100, 45)
score_80 = np.sum(np.where(score>80, 1, 0)) # 计算出大于80分的学生的人数
print(score_80)# np.where 嵌套使用
print(np.where(score>=80,'优秀',np.where(score>=60, '良好', '不及格')))
# np.select(条件, 返回结果)
print(score)
print(np.select([score>=80, (score<80) & (score>=60), score < 60],['优秀', '良好', '不及格'], default='未知'))
2.3.4去重
# 去重
print(np.unique(arr))
2.3.5其他
# 数组的拼接
arr1 = np.array([1,2,3])
arr2 = np.array([4,5,6])
print(np.concatenate((arr1, arr2)))# 数组的分割
arr = np.random.randint(1, 30, 20)
print(arr)
print(np.split(arr, 2)) # 分割为2份
print(np.split(arr, [3,6]))  # 按照下标进行分割
http://www.dtcms.com/a/342918.html

相关文章:

  • 如何解读京东按图搜索(拍立淘)API(jd.item_search_img)的返回值
  • AI大模型支持下的:CMIP6数据分析与可视化、降尺度技术与气候变化的区域影响、极端气候分析
  • JVM-(7)堆内存逻辑分区
  • 3个脱节,5大特征,1套方法:破解AI落地难题
  • 37、需求预测与库存优化 (快消品) - /供应链管理组件/fmcg-inventory-optimization
  • 【互动屏幕】大屏拼接在数字展厅展示上有哪些优势?
  • (CVPR-2025)通过频率分解实现身份保持的文本到视频生成
  • 【音视频】闭合GOP和开放GOP
  • 旅游小程序开发指南
  • 第三阶段数据库-5:数据库的主键,索引,约束,表间关系的图形化操作
  • 8.Shell脚本修炼手册---sed工具的基本使用
  • HarmonyOS 实战:6 种实现实时数据更新的方案全解析(含完整 Demo)
  • JavaScript中的深浅拷贝
  • Llama-Factory微调 Qwen2.5-VL-3B 模型
  • 人工智能未来趋势如何?
  • 【秋招笔试】2025.08.19百度秋招机考第一套
  • 算法训练营day57 图论⑦ prim算法精讲、kruskal算法精讲
  • 前端无感刷新 Token 的 Axios 封装方案
  • Github 下载加速--2025-08-21 亲测好用
  • 神经网络(Neural Network, NN)
  • gemini cli 用命令行玩转 AI 多模态开发
  • 网络安全大模型测试指标体系设计思路
  • 我与 ChatGPT 5:一段时间的深度编程体验与全栈评测
  • Zabbix状态图标灯显示
  • K8s部署dashboard平台和基本使用
  • MySQL:MVCC机制及其在Java秋招中的高频考点
  • AutoTrack-IR-DR200平台的构建与实现过程
  • python采集义乌购(yiwugo)商品详情API接口,json数据返回
  • 透射TEM 新手入门:快速掌握核心技能
  • 【每日一道算法题 day5】盛最多水的容器 (Container With Most Water) - LeetCode 题解