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()
输出结果