【python】随笔 - 知识点小课堂 -13.数据分析、科学计算与可视化

前言

本文是关于数据分析、科学计算与可视化的习题整理和讲解

13.1

假设已执行语句import numpy asnp和x=np.array((1,2,3,45)),那么表达式 sum(x*2)的值为

结果是30,因为数组x中的元素是[1, 2, 3, 4, 5],将每个元素乘以2后得到[2, 4, 6, 8, 10],然后将这些元素相加得到30。

13.3

表达式np.random.randn(3).shape 的值为

结果为:
一个一行三列的矩阵
(3,)

扩展:
一个三行四列的矩阵
(3,4)

13.6

np.argmax(x) 是一个NumPy函数,它用于找出数组 x 中最大元素的索引位置。在多维数组中,argmax 默认返回最大元素的第一个索引。如果数组中有多个相同的最大值,它返回遇到的第一个最大值的索引。

函数的基本语法是:

np.argmax(array, axis=None, out=None)
  • array:要在其上找到最大元素索引的输入数组。
  • axis:沿哪个轴(维度)查找最大值。如果不指定(None),函数会在扁平化后的数组上操作。
  • out:一个可选的输出数组,如果提供,结果将被存储在这个数组中。

对于一维数组,使用非常简单:

import numpy as np

x = np.array([3, 5, 1, 4, 2])
index_of_max_value = np.argmax(x)

如果 x 是上面定义的数组,np.argmax(x) 将会返回 1,因为在数组 x 中,元素 5 是最大值,它位于索引 1 的位置(索引从 0 开始计数)。

对于多维数组,如果指定了 axis 参数,argmax 会返回该轴上的最大值索引。例如:

import numpy as np

x = np.array([[1, 2], [3, 4]])
index_of_max_value_along_axis = np.argmax(x, axis=1)

在这个例子中,index_of_max_value_along_axis 将会返回数组 [1, 1],因为沿着轴 1(列),每一列的最大值分别是第二列的 2 和第二行的 4,它们的索引分别是 11

在这里插入图片描述

这里的话最大的值是9,位置是3(注意0开始)

13.7

Pandas 库中的 DataFrame 对象的 sort_values() 方法用于对数据框(DataFrame)进行排序。这个方法非常灵活,可以根据一个或多个列的值对行进行排序,并且可以选择升序或降序。

以下是 sort_values() 方法的一些关键参数:

  • by:用于排序的列名或列名列表。这是必需的参数,指定了要根据哪些列的值来排序。
  • axis:指定沿哪个轴排序,默认为 0,表示沿着行(即默认按列排序)。
  • ascending:一个布尔值或布尔值列表,用于指定排序的方向。如果为 True,则升序排序;如果为 False,则降序排序。可以对不同的列指定不同的排序方向。
  • inplace:布尔值,表示排序是否直接在原始 DataFrame 上进行。如果为 True,则原地修改并返回 None;如果为 False(默认),则返回一个新的 DataFrame,并保持原始 DataFrame 不变。
  • kind:指定排序算法的类型,可选值有 'quicksort''mergesort''heapsort',但在大多数情况下,Pandas 会自动选择最合适的算法。

下面是一个使用 sort_values() 方法的示例:

import pandas as pd

# 创建一个简单的DataFrame
df = pd.DataFrame({
    'Name': ['John', 'Anna', 'Peter', 'Linda'],
    'Age': [45, 22, 36, 28],
    'Salary': [70000, 35000, 48000, 59000]
})

# 根据Age列进行升序排序
df_sorted_by_age = df.sort_values(by='Age')

# 根据Salary列进行降序排序,同时根据Age列进行升序排序
df_sorted_by_salary_and_age = df.sort_values(by=['Salary', 'Age'], ascending=[False, True])

# 原地对Age列进行升序排序
df.sort_values(by='Age', inplace=True)

使用 sort_values() 方法可以根据数据的需要进行多种排序操作

13.8

describe():这个方法会自动计算数值型列的计数、平均值、标准差、最小值和最大值。对于非数值列,它不会产生描述性统计。

13.9

Pandas库中的 DataFrame 对象的 head() 方法用于查看该数据框的前几行,默认情况下显示前5行。这个方法非常适合对数据框进行快速的初步检查,了解其结构和前几条记录的样子。

head() 方法的基本用法

df.head(n=5)
  • n:一个整数,表示要返回的行数。默认值为5。

示例

假设一个名为 dfDataFrame

import pandas as pd

# 创建一个简单的DataFrame
df = pd.DataFrame({
    'Column1': [1, 2, 3, 4, 5, 6],
    'Column2': ['A', 'B', 'C', 'D', 'E', 'F']
})

使用 head() 方法查看前几行:

print(df.head())  # 默认显示前5行

如果想要查看前3行,可以指定 n 参数:

print(df.head(3))  # 显示前3行

注意

  • 如果 DataFrame 中的行数少于 n,那么 head() 方法将返回所有行。
  • head() 方法不会修改原始的 DataFrame,它只是返回一个新的视图(或拷贝),除非 DataFrame 中的数据是不可变类型。

head() 是Pandas中用于数据探索和分析的众多便捷方法之一。与之相对的是 tail() 方法,它用于查看数据框的最后几行。

13.18

在Pandas库中,DataFrame 对象的 fillna() 方法用于填充数据中的缺失值。fillna() 方法中的 inplace 参数决定了是否在原始DataFrame上进行修改。

inplace 参数

  • 如果 inplace 设置为 True,则 fillna() 方法会直接在原始DataFrame上进行修改,即原地修改数据,而不返回新的DataFrame对象。这意味着原始DataFrame中的缺失值将被指定的值替换,并且没有新的DataFrame被创建。

  • 如果 inplace 设置为 False(这默认值),则 fillna() 方法会返回一个新的DataFrame对象,其中包含填充后的值,而原始DataFrame保持不变。

示例

假设我们有一个包含缺失值的DataFrame:

import pandas as pd

# 创建一个包含缺失值的DataFrame
df = pd.DataFrame({
    'A': [1, 2, None, 4],
    'B': [None, 2, 3, 4]
})

使用 fillna() 方法填充缺失值,并设置 inplace=True 以原地修改:

df.fillna(value=0, inplace=True)

在这个例子中,原始的 df DataFrame中的所有缺失值(None)将被数字 0 替换。由于 inplace=True,这个修改直接发生在原始DataFrame df 上,并没有产生或返回一个新的DataFrame。

注意

  • 使用 inplace=True 时,需要谨慎,因为这会更改原始数据,如果后续需要原始数据而没有备份,可能会造成问题。
  • 在某些情况下,如果DataFrame很大,原地修改可以节省内存,因为不需要创建并存储一个新的DataFrame对象。
  • 并非所有的Pandas方法都提供 inplace 参数,但许多用于修改DataFrame的方法都包含这个选项。

13.11

扩展库Pandas中DataFrame 对象的分组,分组后的对象支持 sum()、mean()等方法进行分组计算。
在Pandas中,groupby() 是一个非常强大的方法,它允许我们对DataFrame进行分组操作,以便对不同的组执行聚合计算。groupby() 主要基于一个或多个键(即列)对数据进行分组,类似于SQL中的 GROUP BY 子句。

groupby() 的基本用法

grouped_df = df.groupby(by=['key1', 'key2'])
  • by:一个或多个列名的列表,用于指定分组的依据。

分组后的操作

分组后,可以对每个分组执行各种聚合操作,如:

  • sum():计算每个分组的列的和。
  • mean():计算每个分组的列的平均值。
  • max():找出每个分组的列的最大值。
  • min():找出每个分组的列的最小值。
  • count():计算每个分组中的非空元素数量。
  • size():返回每个分组的大小,即分组中的行数。
  • std():计算每个分组的列的标准差。
  • var():计算每个分组的列的方差。

示例

假设我们有一个名为 df 的DataFrame,其中包含了员工的ID、部门和销售额:

import pandas as pd

# 创建一个简单的DataFrame
df = pd.DataFrame({
    'Employee': ['John', 'Anna', 'Peter', 'Linda'],
    'Department': ['A', 'A', 'B', 'B'],
    'Sales': [200, 380, 150, 210]
})

使用 groupby() 对部门进行分组,并计算每个部门的平均销售额:

grouped_by_department = df.groupby('Department')
average_sales_by_department = grouped_by_department['Sales'].mean()

对分组后的数据执行多个聚合操作,可以传递一个聚合函数的字典:

grouped_by_department = df.groupby('Department')
agg_operations = grouped_by_department.agg(
    {
        'Sales': ['mean', 'sum', 'max']
    }
)

注意

  • 分组操作返回的是一个 DataFrameGroupBy 对象,它是一个特殊的迭代器,可以用来迭代产生聚合结果。
  • 分组操作不会修改原始的DataFrame。
  • 可以用 reset_index() 方法来重置分组后DataFrame的索引。

groupby() 是进行数据分析和统计时非常有用的工具

13.12

扩展库Pandas中DataFrame对象的plot()方法用来绘制图形进行可视化,其参数用来指定图形的类型,例如折线图、柱状图、饼状图等。
在Pandas中,DataFrame 对象的 plot() 方法是一个用于快速生成数据图形的便捷方法。该方法实际上是调用了 matplotlib 库的绘图功能,因此它允许用户通过参数来定制图形的多种属性。

kind 参数

kind 参数是 plot() 方法中用于指定图形类型的一个关键参数。不同的 kind 值会生成不同类型的图表:

  • 'line':折线图,用于展示连续数据的变化趋势。
  • 'bar':柱状图,用于展示不同类别的数量差异。
  • 'barh':水平柱状图,与柱状图相似,但条形是水平的。
  • 'hist':直方图,用于展示数据分布。
  • 'box':箱型图,用于展示数据的分布情况及异常值。
  • 'kde':密度图,用于展示数据的概率分布。
  • 'density':同 'kde'
  • 'scatter':散点图,用于展示两个变量之间的关系。
  • 'hexbin':六边形分箱图,类似于散点图,但用六边形表示点的密度。
  • 'pie':饼状图,用于展示每个部分占整体的比例(仅适用于一维数据)。

示例

假设我们有一个名为 df 的DataFrame,其中包含了一列日期和一列销售额:

import pandas as pd

# 创建一个简单的DataFrame
df = pd.DataFrame({
    'Date': pd.date_range(start='2021-01-01', periods=5, freq='D'),
    'Sales': [230, 410, 350, 280, 390]
})

使用 plot() 方法绘制折线图:

df.plot(kind='line', x='Date', y='Sales')

绘制柱状图:

df.plot(kind='bar', x='Date', y='Sales')

注意

  • 使用 plot() 方法时,需要确保已经安装了 matplotlib 库。
  • 除了 kind 参数,plot() 方法还接受其他参数,如 xy 用于指定横纵坐标的列,figsize 用于指定图形的大小等。
  • 通过 plot() 方法生成的图形可以通过 matplotlib 的API进一步定制和优化。

plot() 方法为数据可视化提供了一个快速而简单的入口,使得用户可以迅速生成图形并进行数据分析。

kind 在英语中的意思是“类别”或“种类”

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

END

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

达梦数据库使用dmlcvt命令找回更改前的数据

在生产系统上不小心修改了表数据后最快的方法是用闪回查询找回。但时间不能超过undo_retention(默认90秒)。其实最标准的处理方法是在其他机器上将数据库恢复到修改前的时刻。但数据库比较大时恢复时间较长。真实场景可能比较急。那么也可以分析归档日志…

kubernetes之prometheus kube-controller-manager。 scheduler报错问题

项目场景: prometheus scheduler及kube-controller-manager监控报错 问题描述 kubeadm搭建完kube-prometheus 会有这个报错 原因分析: rootmaster2:~# kubectl describe servicemonitor -n kube-system kube-controller-manager通过以上图片我们发现 k…

东哥一句兄弟,你还当真了?

关注卢松松,会经常给你分享一些我的经验和观点。 你还真把自己当刘强东兄弟了?谁跟你是兄弟了?你在国外的房子又不给我住,你出去旅游也不带上我!都成人年了,东哥一句客套话,别当真! 今天,东哥在高管会上直言&…

从零训练yolov8

1.收集数据 2.数据标注 pip install labelimg3.划分数据集 0.2的验证机0.8的训练集 import os from shutil import copyfile from sys import exit import randomsource r"D:\Data\imgs\screenc" \\ target_train r"D:\Data\imgs\datasets\mydata\images\t…

生产制造边角料核算说明及ODOO演示

今天群里有伙伴提到边角料的处理问题,我们梳理了一下,在生产过程中,如果产生了边角料,核算产成品的投料成本时需要考虑边角料的价值,以确保成本核算的准确性。以下是注意的几点: 一、边角料的入账价值 在生…

ROS学习记录:用C++实现IMU航向锁定

前言 获取IMU数据的C节点 在了解了如何获取到IMU的姿态信息(链接在上面)后,接下来尝试实现让一个节点在订阅IMU数据的时候,还能发布运动控制指令,使机器人能对姿态变化做出反应,达到一个航向锁定的效果。 …

自己手写一个单向链表【C风格】

//单链表 #include <iostream> #define MAX_SIZE 20 #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0typedef int ElemType;//元素的类型 typedef int Status;//返回状态typedef struct Node {ElemType data;//链表中保存的数据struct Node* next;//指向下…

从零开始学逆向,js逆向启蒙:有道翻译

语言&#xff1a;js、python 工具&#xff1a;pycharm、chrome浏览器F12调试、chatgpt&#xff08;补充js第三方库&#xff0c;转python&#xff09;、node.js(js运行)&#xff08;必须&#xff09; 目标&#xff1a;学习掌握基本js逆向知识。 对象&#xff1a; 有道翻译 &a…

使用C/C++ API接口操作 Zookeeper 数据

ZooKeeper 支持 Java 和 C 的API接口。本文将介绍使用 C/C 语言客户端库的编译安装和使用入门。 一、编译安装 PS&#xff1a;就在上一篇文章还觉得安装和配置 jdk 、maven 麻烦&#xff0c;所以当时选择 apache-zookeeper-[version]-bin.tar.gz 的版本。然而&#xff0c;本文…

K8S认证|CKA题库+答案| 12. 查看Pod日志

12、查看Pod日志 您必须在以下Cluster/Node上完成此考题&#xff1a; Cluster Master node Worker node k8s master …

企业ov代码签名证书1300

我们在下载一些软件代码时&#xff0c;有时候操作系统会出现未知软件拦截&#xff0c;各个杀毒软件也会因为软件身份不明拦截软件下载。而代码签名证书可以对软件进行数字签名&#xff0c;以验证软件的身份和完整性。这种数字签名机制确保了软件在传输和安装过程中没有被篡改或…

1小时从0开始搭建自己的直播平台(详细步骤)

本文讲述了如何从0开始&#xff0c;利用腾讯云的平台&#xff0c;快速搭建一个直播平台的过程。 文章目录 效果图详细步骤准备工作第一步&#xff1a;添加域名并检验cname配置1.先填加一个推流域名2. 点击完下一步&#xff0c;得到一个cname地址3. 将cname地址&#xff0c;配置…

哥白尼哨兵系列卫星数据不能下载的解决方法

自2023年1月24日起&#xff0c;一个新的哥白尼数据空间生态系统已经启动&#xff0c;为所有哨兵数据&#xff08;Sentinel-1, Sentinel-2, Sentinel-3 and Sentinel-5P&#xff09;提供可视化和数据处理&#xff0c;地址为&#xff1a;https://dataspace.copernicus.eu/。详细介…

重构2:重构的原则之笔记

最近在看重构2&#xff1a;改善既有代码的设计这本书&#xff0c;对于代码重构指导非常有帮助&#xff0c;然后也是做个笔记记录下&#xff0c;以下是我阅读本书的前两章的时候整理的思维导图&#xff1a;

若依框架对于后端返回异常后怎么处理?

1、后端返回自定义异常serviceException 2、触发该异常后返回json数据 因为若依对请求和响应都封装了&#xff0c;所以根据返回值response获取不到Code值但若依提供了一个catch方法用来捕获返回异常的数据 3、处理的方法

Golang的基本使用

目录 变量的声明 Golang常用容器 defer 有趣的多态 结构体标签和reflect 反射 Golang最强的协程 channel go可能造成的内存泄露 变量的声明 方法 1:有类型,有var,不赋值 在Golang中默认值为0 方法 2:无类型,有var,赋值 方法 3:无类型,无var,赋值 多变量声明 多变…

Volatile的内存语义

1、volatile的特性 可见性&#xff1a;对一个volatile变量的读&#xff0c;总能够看到任意一个线程对这个volatile变量的写入。 原子性&#xff1a;对任意单个volatile变量的读/写具有原子性&#xff0c;但类似于volatile这种复合操作不具有原子性。 接下来我们用程序验证。…

Springboot开发 -- Postman 调试类型详解

引言 在 Spring Boot 应用开发过程中&#xff0c;接口测试是必不可少的一环。Postman 作为一款强大的 API 开发和测试工具&#xff0c;可以帮助开发者轻松构建、测试和管理 HTTP 请求。本文将为大家介绍如何在 Spring Boot 开发中使用 Postman 进行接口测试。 一、准备工作 安…

3D透视图转的时候模型闪动怎么解决?---模大狮模型网

在3D建模与渲染的世界中&#xff0c;透视图是我们观察和操作模型的重要窗口。然而&#xff0c;有时候在旋转透视图时&#xff0c;模型会出现闪动的现象&#xff0c;这不仅影响了我们的工作效率&#xff0c;还可能对最终的渲染效果产生负面影响。本文将探讨这一问题的成因&#…

魔众文库系统v6.6.0分销功能,后台日志重构,文档转换优化

分销功能&#xff0c;后台日志重构&#xff0c;文档转换优化 [新功能] 升级支持支付宝授权登录最新方式 [新功能] 后台左上角标题支持自定义&#xff0c;修改 modstart.php 中 admin.title 配置 [新功能] 日志界面重构&#xff0c;全新日志查看体验 [新功能] 链接选择弹窗增…