python123——numpy、scipy、pandas、matplotlib的读书报告

Posted on 2023-12-18 17:26  奇诺qwq  阅读(162)  评论(0编辑  收藏  举报

 

一、函数的基本用法

numpy

NumPy(Numerical Python)是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵(matrix)),支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。

特殊值

np.nan 和 np.inf

nan 是 not a number 的简写,意为不是数字,inf 是 infinity 的简写,意为无穷大。np.nan 也可以写作 np.Nan、np.NaN 或者 np.NAN,np.inf 也可以写作 np.Inf 或 np.Infinity。

 数学函数

数学常数、舍入函数、快速转换函数、幂函数、指数函数和对数函数、部分三角函数

统计函数

查找特殊值、求和差积、均值和方差、相关系数

对数组进行索引和切片

如使用a[i],a[i,j],a[:,j],a[i:j:k]等语法

差值函数

数据插值是数据处理过程中经常用到的技术,常用的插值有一维插值、二维插值、高阶插值等,常见的算法有线性插值、B样条插值、临近插值等。不过,NumPy只提供了一个简单的一维线性插值函数 np.interp(),其他更加复杂的插值功能放到了SciPy中。

多项式拟合函数

多项式拟合函数np.polyfit()

只需要输入一组自变量的离散值,和一组对应的函数 f ( x ) ,并指定多项式次数 k,就可以返回一组最佳系数。函数np.polyfit(),则可以将一组最佳系数转成函数 g(x)。

自定义广播函数

广播是NumPy最具特色的特性之一,几乎所有的NumPy函数都可以通过广播特性将操作映射到数组的每一个元素上。然而NumPy函数并不能完成所有的工作,有些工作还需要我们自己来定义函数。如何让我们自己定义的函数也可以广播到数组的每一个元素上,就是自定义广播函数要做的事情。

scipy

scipy是基于numpy的一个科学计算库,它提供了更多的高级函数和模块,涵盖了优化,积分,插值,傅里叶变换,信号处理,图像处理,常微分方程等领域

 

scipy.optimize.minimize():用于最小化一个目标函数的优化器。

scipy.integrate.quad():用于数值积分,计算函数在给定区间上的定积分值。

scipy.linalg.inv():计算矩阵的逆。 scipy.linalg.solve():求解线性方程组。

scipy.stats.norm():正态分布的概率密度函数、累积分布函数等统计量的计算。

scipy.fft.fft():进行快速傅里叶变换。

scipy.signal.convolve():实现信号的卷积运算。

scipy.interpolate.interp1d():进行一维数据的插值操作。

scipy.cluster.vq.kmeans():使用 k-means 算法进行聚类分析。

scipy.spatial.distance.euclidean():计算两个向量之间的欧氏距离。

pandas

Pandas 是一个开源的数据处理和分析库,它提供了高效、灵活和易于使用的数据结构和工具。主要功能包括数据读取和写入、数据清洗和预处理、数据索引和选择、数据分析和统计,以及数据可视化。它被广泛应用于数据科学、金融分析和机器学习等领域。

 

pandas.read_csv():读取 CSV 文件中的数据。

pandas.DataFrame():创建一个数据框。

pandas.Series():创建一个序列。

pandas.head():显示数据框的前几行。

pandas.tail():显示数据框的后几行。

pandas.shape():返回数据框的维度。

pandas.groupby():根据指定的列对数据进行分组。

pandas.merge():将两个数据框按照指定的列进行合并。

pandas.pivot_table():生成透视表。

pandas.apply():对数据框中的每一行或每一列应用一个自定义函数。

matplotlib

Matplotlib 是一个用于绘制图表和可视化数据的 Python 库。它简单易用,支持多种图表类型,并提供强大的定制化能力。用户可以根据需求选择合适的图表类型,并自定义图表的样式和属性。Matplotlib 还与 NumPy 和 Pandas 紧密集成,方便地处理和可视化数据。

 

matplotlib.pyplot.plot():绘制折线图。

matplotlib.pyplot.scatter():绘制散点图。

matplotlib.pyplot.bar():绘制直方图。

matplotlib.pyplot.hist():绘制柱状图。

matplotlib.pyplot.pie():绘制饼图。

matplotlib.pyplot.boxplot():绘制箱线图。

matplotlib.pyplot.imshow():显示图片。

matplotlib.pyplot.subplot():创建多个子图。

matplotlib.pyplot.legend():显示图例。

matplotlib.pyplot.title():设置图表标题。

二、解决具体问题

numpy

1、数组的转置

#数组的转置
import numpy as np
#1、np.arange(12) 生成一个从0到11的一维数组: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]。
#2、reshape(3,4) 将一维数组重新排列为3行4列的二维数组
a = np.arange(12).reshape(3,4)
print ('原数组:')
print (a)
print ('\n')
print ('转置数组:')
print (a.T)

输出结果

 2、计算数组的平均值、最大值和最小值

import numpy as np

# 创建一个数组
arr = np.array([1, 2, 3, 4, 5])

# 计算数组的平均值、最大值和最小值
mean_value = np.mean(arr)
max_value = np.max(arr)
min_value = np.min(arr)

print("数组的平均值为:", mean_value)
print("数组的最大值为:", max_value)
print("数组的最小值为:", min_value)

输出结果

 

scipy

给定一个数组 x 和一个函数 y = f(x),计算该函数在指定区间内的积分值。

import numpy as np
from scipy.integrate import quad

# 定义函数 f(x)
def f(x):
    '''-x**2 首先对数组 x 的每个元素进行平方运算,然后取负数。
    最后,np.exp() 函数将结果进行指数运算,即对每个元素求 e 的幂次方。'''
    return np.exp(-x**2)
# 定义积分区间
a, b = 0.0, 1.0
#quad() 函数 计算函数 f(x) 在区间 [a, b] 内的积分值
integral_value, error = quad(f, a, b)
print("函数 f(x) 在区间 [0, 1] 内的积分值为:", integral_value)

输出结果

 

pandas

给定一个包含学生信息的数据集,计算每个学生的平均成绩和总分

import pandas as pd

# 创建包含学生信息的数据集
data = {
    '姓名': ['张三', '李四', '王五', '赵六'],
    '语文成绩': [85, 92, 78, 88],
    '数学成绩': [90, 88, 82, 95],
    '英语成绩': [80, 85, 88, 92]
}
#使用 pd.DataFrame() 函数将数据集转换为 DataFrame 格式,并赋值给变量 df
df = pd.DataFrame(data)

# 计算每个学生的平均成绩和总分
#计算每个学生的平均成绩,并将结果赋值给新的列 '平均成绩'
'''axis=1 表示按行进行计算,即沿着横轴方向计算每行的平均值
axis=0 表示对每列进行计算,即沿着纵轴方向计算每列的平均值
'''
df['平均成绩'] = df[['语文成绩', '数学成绩', '英语成绩']].mean(axis=1)
df['总分'] = df[['语文成绩', '数学成绩', '英语成绩']].sum(axis=1)

print(df)

输出结果

 

三、图像处理

matplotlib

绘制折线图

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体(解决中文无法显示的问题)
plt.rcParams['axes.unicode_minus'] = False # 解决保存图像时负号“-”显示方块的问题

#创建画布
fig=plt.figure(dpi=100)
#创建axes
ax=fig.add_axes([0.1,0.1,0.8,0.8])
#绘图
ax.plot([1,2,3,4],[1,3,6,9],'ro-')
ax.plot([1,2,3,4],[2,5,8,12],'bH-.')
#设置图例
ax.legend(labels=('twitter','weibo'), loc='best')
#设置坐标轴
ax.set_xlabel("time")
ax.set_ylabel("visit")
#设置图像标题
ax.set_title("compare(比较)")
#展示图片
plt.show()

输出结果