【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

  • 21
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_千思_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值