这个学期的Python课,我学到了很多东西,例如numpy、scipy、pandas、matplotlib几个库,接下来就是我对这几个库的基本函数的一些认识:
基本函数的用法
numpy
常用函数
一、数组创建和操作
np.array():创建numpy数组、
np.zeros():返回全0数组、
np.ones():返回全1数组、
np.arange():创建等差数列数组、
np.linspace():创建等间隔数列数组、
np.reshape():改变数组形状
二、数组运算
np.add():加法运算、
np.subtract():减法运算、
np.multiply():乘法运算、
np.divide():除法运算、
np.dot():矩阵乘法、
np.sum():求和、
np.mean():求平均值
三、数组索引和切片
数组名[i]:获取第i个元素、
数组名[start:end]:获取从start到end之间的元素、
数组名[:, col_num]:获取所有行中第col_num列的元素、
数组名[condition]:根据条件获取元素
四、数学函数
np.sin():正弦函数、
np.cos():余弦函数、
np.exp():指数函数、
np.log():自然对数函数、
np.sqrt():平方根函数、
np.power():幂函数
五、统计函数
np.min():最小值、
np.max():最大值、
np.std():标准差、
np.var():方差、
np.median():中位数
基础用法
一、创建ndarray
使用NumPy创建多维数组对象。
二、数组操作
对数组执行各种操作,例如修改维度、选择数据、切片等。
三、数学函数
使用NumPy中的数学函数进行数学运算,例如求平均值、标准差、方差等。
四、随机数生成
使用NumPy中的随机数生成函数生成随机数。
五、线性代数
使用NumPy进行线性代数运算,例如矩阵乘法、逆矩阵求解等。
六、文件操作
使用NumPy读写文件,例如将数组保存到文件或从文件加载数组。
Scipy
一、核心模块
scipy.integrate、scipy.optimize、scipy.signal、scipy.linalg、scipy.stats、scipy.sparse、scipy.fftpack、scipy.ndimage
scipy.integrate
功能: 用于数值积分和微分方程求解。
应用: 可以用于求解常微分方程(ODEs)和积分问题,如计算区域下的面积。
scipy.optimize
功能: 提供了函数最小化(或最大化)和根求解算法。
应用: 常用于科学研究和工程领域,如参数估计和非线性问题求解。
scipy.signal
功能: 信号处理工具,包括滤波器设计、频谱分析和信号处理。
应用: 在音频信号处理和图像处理等领域有广泛应用。
scipy.linalg
功能: 提供了标准线性代数运算,如矩阵乘法、分解和求解线性方程组。
应用: 在需要大量线性代数运算的数据分析和工程计算中非常重要。
scipy.stats
功能: 包含大量的概率分布和统计函数。
应用: 适用于统计分析和概率论相关领域,如假设检验和数据分析。
scipy.sparse
功能: 用于处理稀疏矩阵的工具。
应用: 在处理大规模数据集或高维数据时非常有用,尤其是当数据中的大部分元素为零时。
scipy.fftpack
功能: 快速傅里叶变换(FFT)的实现。
应用: 在信号处理、图像处理等领域中分析频率成分十分常见。
scipy.ndimage
功能: 提供了多维图像处理的功能。
应用: 在图像处理和计算机视觉领域中广泛使用。
二、数值积分和微分
使用 scipy.integrate`进行数值积分、解决常微分方程
使用 scipy.integrate 进行数值积分
scipy.optimize 模块是 SciPy 中用于数值优化的核心组件之一
三、优化算法
函数最小化:是寻找能使给定函数取得最小值的变量值的过程。scipy.optimize 提供了多种最小化方法,如 minimize 函数。
根求解:是找出使函数值为零的变量值的过程。scipy.optimize 中的 root 函数提供了这样的功能。
四、信号处理
滤波器设计:是信号处理中的一个核心任务,用于去除信号中不需要的成分或增强某些部分。
频谱分析:是信号处理中另一个重要任务,用于分析信号的频率成分。scipy.signal 提供了频谱分析的工具,如 Fourier transform。
五、线性代数
矩阵运算:在 scipy.linalg 中,可以执行各种矩阵运算,如矩阵乘法、求逆、行列式计算等
线性方程组求解:解线性方程组是线性代数中的常见问题。scipy.linalg 提供了 solve 函数来求解方程组。
特征值和特征向量:特征值和特征向量在许多领域都有重要应用。scipy.linalg 提供了计算特征值和特征向量的函数。
六、统计和随机数
描述性统计分析、概率分布、假设检验:scipy.stats 模块
pandas
一、数据导入
pd.read_csv(filename):从CSV文件导入数据
pd.read_table(filename):从限定分隔符的文本文件导入数据
pd.read_excel(filename):从Excel文件导入数据
pd.read_sql(query, connection_object):从SQL表/库导入数据
pd.read_json(json_string):从JSON格式的字符串导入数据
pd.read_html(url):解析URL、字符串或者HTML文件
pd.read_clipboard():从粘贴板获取内容
pd.DataFrame(dict):从字典对象导入数据
二、数据导出
df.to_csv(filename):导出数据到CSV文件
df.to_excel(filename):导出数据到Excel文件
df.to_sql(table_name, connection_object):导出数据到SQL表
df.to_json(filename):以Json格式导出数据到文本文件
三、创建对象
pd.DataFrame(np.random.rand(20,5)):创建20行5列的随机数组成的DataFrame对象
pd.Series(my_list):从可迭代对象my_list创建一个Series对象
df.index = pd.date_range('1900/1/30', periods=df.shape[0]):增加一个日期索引
四、数据查看
df.head(n):查看DataFrame对象的前n行
df.tail(n):查看DataFrame对象的最后n行
df.shape():查看行数和列数
df.info():查看索引、数据类型和内存信息
df.describe():查看数值型列的汇总统计
s.value_counts(dropna=False):查看Series对象的唯一值和计数
df.apply(pd.Series.value_counts):查看DataFrame对象中每一列的唯一值和计数
五、数据选取
df[col]:根据列名,并以Series的形式返回列
df[[col1, col2]]:以DataFrame形式返回多列
s.iloc[0]:按位置选取数据
s.loc['index_one']:按索引选取数据
df.iloc[0,:]:返回第一行
六、数据清洗
df.columns = ['a','b','c']:重命名列名
pd.isnull():检查DataFrame对象中的空值,并返回一个Boolean数组
pd.notnull():检查DataFrame对象中的非空值,并返回一个Boolean数组
df.dropna():删除所有包含空值的行
df.fillna(x):用x替换DataFrame对象中所有的空值
s.astype(float):将Series中的数据类型更改为float类型
s.replace(1,'one'):用‘one’代替所有等于1的值
df.rename(columns=lambda x: x + 1):批量更改列名
df.set_index('column_one'):更改索引列
七、数据处理
df[df[col] > 0.5]:选择col列的值大于0.5的行
df.sort_values(col1):按照列col1排序数据,默认升序排列
df.groupby(col):返回一个按列col进行分组的Groupby对象
df.groupby(col1).agg(np.mean):返回按列col1分组的所有列的均值
df.pivot_table(index=col1, values=[col2,col3], aggfunc=max):创建一个按列col1进行分组,并计算col2和col3的最大值的数据透视表
data.apply(np.mean):对DataFrame中的每一列应用函数np.mean
八、数据合并
df1.append(df2):将df2中的行添加到df1的尾部
df.concat([df1, df2],axis=1):将df2中的列添加到df1的尾部
df1.join(df2,on=col1,how='inner'):对df1的列和df2的列执行SQL形式的join
九、数据统计
df.describe():查看数据值列的汇总统计
df.mean():返回所有列的均值
df.corr():返回列与列之间的相关系数
df.count():返回每一列中的非空值的个数
df.max():返回每一列的最大值
df.min():返回每一列的最小值
df.median():返回每一列的中位数
df.std():返回每一列的标准差
十、补充
df.astypes: 数据格式转换
df.value_counts:相同数值的个数统计
df.hist(): 画直方图
df.get_dummies: one-hot编码,将类型格式的属性转换成矩阵型的属性。比如:三种颜色RGB,红色编码为[1 0 0]
matplotlib
一、基本绘图函数
绘制线条和标记:plot(x, y, format_string, **kwargs)
绘制散点图:scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, verts=None, edgecolors=None, **kwargs)
绘制条形图:bar(x, height, width=0.8, bottom=None, *, align='center', **kwargs)
绘制饼图:pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=None, radius=None, counterclock=True, wedgeprops=None, textprops=None, center=(0, 0), frame=False, rotatelabels=False, normalize=True, **kwargs)
绘制直方图:hist(x, bins=None, range=None, density=None, weights=None, cumulative=False, bottom=None, histtype='bar', align='mid', orientation='vertical', rwidth=None, log=False, color=None, label=None, stacked=False, normed=None, **kwargs)
二、坐标轴设置函数
设置 x 轴标签:xlabel(xlabel, fontdict=None, labelpad=None, **kwargs)
设置 y 轴标签:ylabel(ylabel, fontdict=None, labelpad=None, **kwargs)
设置图形标题:title(label, fontdict=None, loc='center', pad=None, **kwargs)
设置坐标轴范围:axis(xmin=None, xmax=None, ymin=None, ymax=None, **kwargs)
显示网格线:grid(b=None, which='major', axis='both', **kwargs)
三、图形显示和保存函数:
显示图形:show()
保存图形到文件:savefig(fname, dpi=None, facecolor='w', edgecolor='w', format=None, **kwargs)
创建子图网格并定位子图:subplot(nrows, ncols, index, **kwargs) 或 subplots_adjust(*args, **kwargs)
创建一个图形窗口和一组子图:subplots(nrows=1, ncols=1, sharex=False, sharey=False, squeeze=True, subplot_kw=None, gridspec_kw=None, **fig_kw)
四、其他函数:
在图上添加文本:text(x, y, s, fontdict=None, **kwargs)
在图上添加注释:annotate(s, xy=None, xytext=None, textcoords=None, arrowprops=None, **kwargs)
显示图像:imshow(X, cmap=None, norm=None, aspect=None, interpolation=None, alpha=None, vmin=None, vmax=None, origin=None, extent=None, shape=None, filternorm=True, filterrad=4.0, imlim=None, resample=None, url=None, **kwargs)
添加图例:legend(*args, **kwargs)
创建一个新的图形窗口:figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True, FigureClass=<class 'matplotlib.figure.Figure'>, clear=False, **kwargs)
具体问题
例子
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 6, 100)
y = np.cos(2 * np.pi * x) * np.exp(-x)+0.8
plt.plot(x, y, 'k', color='r', linewidth=3, linestyle="-")
plt.show()
第一行导入了numpy库,并给它起了一个别名np。
numpy是一个用于数值计算的Python库,特别是它提供了多维数组(ndarray)对象,以及各种派生对象(如掩码数组和矩阵)以及用于快速操作这些数组的大量数学函数。
第二行导入了matplotlib库中的pyplot模块,并给它起了一个别名plt。
matplotlib是一个用于绘制图表的Python库,而pyplot模块提供了MATLAB风格的界面,用于绘制图形。
第三行使用numpy的linspace函数创建了一个从0到6(包括0但不包括6)的等差数列,其中包含100个点。这个数列被赋值给变量x,表示x轴上的点。
第四行计算了y轴上的点
它首先计算了2 * np.pi * x(这给出了x轴上的每个点对应的角度,范围从0到12π),然后计算了这些角度的余弦值(np.cos函数)。接着,它计算了np.exp(-x)(即e的-x次方),这是一个衰减函数。最后,它将余弦值与衰减函数相乘,并加上0.8。这给出了y轴上的点,这些点被赋值给变量y。
第五行这行代码使用matplotlib.pyplot的plot函数绘制了由x和y定义的线图。
最后呈现出来的效果如下
图像处理
例子
import numpy as np
from PIL import Image
image = Image.open('iu.jpg')
angle = 45
rotated_image = image.rotate(angle)
rotated_image.show()
第一行导入了numpy库,并为其分配了别名np。
尽管在这段代码中并没有直接使用numpy,但通常numpy被用于数组和矩阵的数值计算。
第二行从PIL(Python Imaging Library,现在通常被称为Pillow)库中导入了Image模块。
PIL是一个用于图像处理的Python库,提供了很多图像处理的工具和方法。
第三行使用PIL库的Image模块中的open函数打开了一个名为iu.jpg的图像文件,并将其加载到一个Image对象中。
这个对象被赋值给变量image,这样就可以在后续的代码中使用这个对象来操作图像。
第四行定义了一个变量angle,并为其赋值45。
这个变量表示了你想要旋转图像的角度,单位是度。
第五行调用了image对象的rotate方法,该方法将图像旋转指定的角度(在这里是45度)。
旋转后的图像被赋值给rotated_image变量,这样你就可以显示或者保存这个旋转后的图像。
第六行调用了rotated_image对象的show方法,该方法会在默认的图像查看器中显示旋转后的图像。
如果在脚本中运行这段代码,它会弹出一个窗口显示旋转后的图像。如果在交互式环境中(如Jupyter Notebook)运行,它可能会直接在输出区域显示图像。
总结:这段代码加载了一个名为iu.jpg的图像文件,将其旋转45度,并在默认的图像查看器中显示了旋转后的图像。
最后呈现出来的效果如下
旋转前:
旋转后:
以上就是我对numpy、scipy、pandas、matplotlib几个库的认识