由信计1班 01 创作此文
目录
一、基本函数的用法
(1)NumPy
*多维数组:NumPy提供了强大的多维数组对象(ndarray),用于存储和操作数据。这些数组可以是高维的,通常用于科学计算和数据分析。
*基本操作:包括创建数组、数组运算、线性代数、傅里叶变换和随机数生成等功能。
np.array([x,y,z],dtype=int) | 从Python列表和元组创造数组 |
np.arange(x,y,i) | 创建一个由x到y,以i为步长的数组 |
np.linspace(x,y,n) | 创建一个由x到y,等分成n个元素的数组 |
np.indices((m,n)) | 创建一个m行n列的矩阵 |
np.random.rand(m,n) | 创建一个m行n列的随机数组 |
np.ones((m,n),dtype) | 创建一个m行n列全1的数组,dtype是数据类型 |
np.empty((m,n),dtype) | 创建一个m行n列全0的数组,dtype是数据类型 |
(2)Pandas
*DataFrame:Pandas的核心数据结构是DataFrame,它类似于Excel表格,可以进行复杂的数据处理和分析。
*索引和切片: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]) | 增加一个日期索引 |
(3)Matplotlib
*绘图功能:Matplotlib是Python中最流行的绘图库,支持创建各种类型的静态、交互式和动态图形,如折线图、柱状图、散点图等。
*基本绘图:包括基本简介、基础绘图功能演示、图像保存、xy轴刻度添加、网格显示等。
(4)Scipy
*科学计算:Scipy基于NumPy,提供了一系列高级数学函数和物理模型,适用于更复杂的科学计算任务。
*信号处理:例如,Scipy可以用于进行傅立叶变换和滤波器设计等信号处理模型。
二、具体问题的解决方案
(1)数据分析
*数据处理:使用Pandas进行数据清洗和预处理,利用NumPy进行高效的数值计算。
*数据可视化:通过Matplotlib将数据分析结果可视化,生成出版质量级别的图形。
(2)实际案例
*金融数据分析:使用NumPy和Pandas对金融数据集进行分析,探索matplotlib、statsmodels和scikit-learn等库进行高级分析。
*科研论文绘图:利用Matplotlib实现科研论文中的各种图表,如散点图、直方图和曲线图等。
*使用Numpy和Pandas生成的矩阵如:
import numpy as np
import pandas as pd
df = pd.DataFrame({'A':np.random.randint(1, 100, 4),
'B':pd.date_range(start='20130101', periods=4, freq='D'),
'C':pd.Series([1, 2, 3, 4],\
index=['zhang', 'li', 'zhou', 'wang'],dtype='float32'),
'D':np.array([3] * 4,dtype='int32'),
'E':pd.Categorical(["test","train","test","train"]),
'F':'foo'})
print(df)
代码所生成的结果是:
*Spicy中画的图像:
import numpy as np
from scipy import signal, misc
import matplotlib.pyplot as plt
image = misc.face(gray=True)
shape = image.shape
w = np.zeros(shape)
w[0][0] = 1.0
w[shape[0]-1][shape[1]//2] = 1.0
image_new = signal.fftconvolve(image, w)
print(image_new.shape)
plt.figure()
plt.imshow(image_new)
plt.gray()
plt.title('Filtered image')
plt.show()
代码运行的结果:
*Matplotlib的绘图:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df = pd.DataFrame(np.random.randn(1000, 2), columns=['B', 'C']).cumsum()
df['A'] = pd.Series(list(range(len(df))))
plt.figure()
df.plot(x='A')
plt.show()
代码运行的结果为:
阻尼衰减曲线绘制代码如下:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.family']='SimHei'
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
def Draw(pcolor, nt_point, nt_text, nt_size):
plt.plot(x, y, 'k', label="$exp_decay$", color=pcolor, linewidth=3, linestyle="-")
plt.plot(x, z, "b--", label="$cos(x^2)$", linewidth=1)
plt.xlabel('时间(s)')
plt.ylabel('幅度(mV)')
plt.title("阻尼衰减曲线绘制")
plt.annotate('$\cos(2 \pi t) \exp(-t)$', xy=nt_point, xytext=nt_text, fontsize=nt_size,\
arrowprops=dict(arrowstyle='->', connectionstyle="arc3,rad=.1"))
def Shadow(a, b):
ix = (x>a) & (x<b)
plt.fill_between(x,y,0,where=ix,facecolor='grey', alpha=0.25)
plt.text(0.5 * (a + b), 0.2, "$\int_a^b f(x)\mathrm{d}x$", \
horizontalalignment='center')
def XY_Axis(x_start, x_end, y_start, y_end):
plt.xlim(x_start, x_end)
plt.ylim(y_start, y_end)
plt.xticks([np.pi/3, 2 * np.pi/3, 1 * np.pi, 4 * np.pi/3, 5 * np.pi/3], \
['$\pi/3$', '$2\pi/3$', '$\pi$', '$4\pi/3$', '$5\pi/3$'])
x = np.linspace(0.0, 6.0, 100)
y = np.cos(2 * np.pi * x) * np.exp(-x)+0.8
z = 0.5 * np.cos(x ** 2)+0.8
note_point,note_text,note_size = (1, np.cos(2 * np.pi) * np.exp(-1)+0.8),(1, 1.4), 14
fig = plt.figure(figsize=(8, 6), facecolor="white")
plt.subplot(111)
Draw("red", note_point, note_text, note_size)
XY_Axis(0, 5, 0, 1.8)
Shadow(0.8, 3)
plt.legend()
plt.savefig('sample.JPG')
plt.show()
运行结果:
三、图像分析
*图像滤波:原图像
from scipy import misc
from scipy import ndimage
import matplotlib.pyplot as plt
face = misc.face() # face是测试图像之一
plt.figure() # 创建图形
plt.imshow(face) # 绘制测试图像
plt.show() # 原始图像
运行结果:
*高斯滤波下的代码及图像:
from scipy import misc
from scipy import ndimage
import matplotlib.pyplot as plt
face = misc.face() # face是测试图像之一
plt.figure() # 创建图形
plt.imshow(face) # 绘制测试图像
blurred_face = ndimage.gaussian_filter(face, sigma=7) # 高斯滤波
plt.imshow(blurred_face)
plt.show() # 显示结果图像
*中值滤波下的代码及图像:
from scipy import misc
from scipy import ndimage
import matplotlib.pyplot as plt
face = misc.face() # face是测试图像之一
plt.figure() # 创建图形
plt.imshow(face) # 绘制测试图像
median_face = ndimage.median_filter(face, 7) # 中值滤波
plt.imshow(median_face)
plt.show()
# 显示结果图像
*边缘锐化下的代码及图像:
from scipy import misc
from scipy import ndimage
import matplotlib.pyplot as plt
face = misc.face() # face是测试图像之一
plt.figure() # 创建图形
plt.imshow(face) # 绘制测试图像
blurred_face1 = ndimage.gaussian_filter(face, sigma=1) # 边缘锐化
blurred_face3 = ndimage.gaussian_filter(face, sigma=3)
sharp_face = blurred_face3 + 6*(blurred_face3-blurred_face1)
plt.imshow(sharp_face)
plt.show()
四、总结
通过学习Numpy、Scipy、Pandas和Matplotlib这四个库,我们可以掌握Python数据分析和科学计算的核心技能。这些库不仅提供了强大的数据处理和科学计算功能,还能帮助我们进行高效的数据可视化和分析。
Pandas:专注于数据处理和分析,提供了灵活的索引和切片功能,适合处理结构化和时间序列数据。
Matplotlib:用于绘制数据图表,支持创建各种类型的静态和动态图形,是数据可视化的重要工具。
Scipy:基于Numpy,提供了高级数学函数和物理模型,适用于更复杂的科学计算任务。
通过系统地学习和实践这些库的基本函数和具体应用,我们可以在数据分析和科学计算领域取得显著的进步。