数据分析之scipy常用方法(五)

简介: 1 Scipy简介Scipy依赖于NumpyScipy提供了真正的矩阵Scipy包含的功能:最优化、线性代数、积分、插值、拟合、特殊函数、快速傅里叶变换、信号处理、图像处理、常微分方程求解器等Scipy是高端科学计...

1 Scipy简介

Scipy依赖于Numpy
Scipy提供了真正的矩阵
Scipy包含的功能:最优化、线性代数、积分、插值、拟合、特殊函数、快速傅里叶变换、信号处理、图像处理、常微分方程求解器等
Scipy是高端科学计算工具包
Scipy由一些特定功能的子模块组成

2 图片消噪:傅里叶变换

#模块用来计算快速傅里叶变换
import scipy.fftpack as fftpack
import matplotlib.pyplot as plt
%matplotlib inline
#读取图片
data = plt.imread('moonlanding.png')
#
data2 = fftpack.fft2(data)

data3 = np.where(np.abs(data2)>8e2,0,data2)

data4 = fftpack.ifft2(data3)

data5 = np.real(data4)

plt.figure(figsize=(12,9))

plt.imshow(data5,cmap = 'gray')

3 图片灰度处理

最大值法: R=G=B=max(R,G,B) 这种方法灰度亮度比较高

data2 = data.mean(axis = 2)

平均值法: R=G=B=(R+G+B)/3 这种方法灰度图像比较柔和

加权平均值 : R=G=B=(w1*R+w2*G+w3*B) 根据不同的权重得到不同底色的图片

data3 = np.dot(data,[0.299,0.587,0.114])

4 Matplotlib中的绘图技巧

单条曲线

x = np.arange(0.0,6.0,0.01)
plt.plot(x, x**2)
plt.show()

多条曲线

x = np.arange(1, 5,0.01)
plt.plot(x, x**2)
plt.plot(x, x**3.0)
plt.plot(x, x*3.0)
plt.show()

x = np.arange(1, 5)
plt.plot(x, x*1.5, x, x*3.0, x, x/3.0)
plt.show()

标题与标签

plt.plot([1, 3, 2, 4])
plt.xlabel('This is the X axis')
plt.ylabel('This is the Y axis')
plt.show()

plt.plot([1, 3, 2, 4])
plt.title('Simple plot')
plt.show()

根据线型绘制图片

numpy.random.randn(d0, d1, …, dn)是从标准正态分布中返回一个或多个样本值。

numpy.random.rand(d0, d1, …, dn)的随机样本位于[0, 1)中。

numpy.random.standard_normal(size=None):随机一个浮点数或N维浮点数组,标准正态分布随机样本

cumsum :计算轴向元素累加和,返回由中间结果组成的数组 , 重点就是返回值是“由中间结果组成的数组”

plt.plot(np.random.randn(1000).cumsum(), linestyle = ':',marker = '.', label='one')
plt.plot(np.random.randn(1000).cumsum(), 'r--', label='two') 
plt.plot(np.random.randn(1000).cumsum(), 'b.', label='three')
plt.legend(loc='best') # loc='best'
plt.show()

5 scipy积分求圆周率

绘制圆

f = lambda x : (1 - x**2)**0.5
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-1,1,1000)
plt.figure(figsize = (4,4))
plt.plot(x,f(x),'-',x,-f(x),'-',color = 'r')

使用Scipy.integrate.quad()来进行计算

#integrate.quad(函数,区间端点) ,返回值为面积与精度
from scipy import integrate
def g(x):
    return (1- x**2)**0.5
area,err = integrate.quad(g,-1,1)
print(area,err)

6 scipy文件的输入与输出

保存二进制文件

from scipy import io as spio
import numpy as np
a = np.ones((3,3))
#mat文件是标准的二进制文件
spio.savemat('./data/file.mat',mdict={'a':a})

读取图片

from scipy import misc
data = misc.imread('./data/moon.png')

读取保存的文件

data = spio.loadmat('./data/file.mat')
data['a']

保存图片

#模糊,轮廓,细节,edge_enhance,edge_enhance_more, 浮雕,find_edges,光滑,smooth_more,锐化
misc.imsave('./data/save.png',arr=data)

7 使用ndimage处理图片

导包提取数据处理数据

misc.face(gray=True,cmap='gray') 读取图片并可以进行灰度预处理

ndimage.rotate(图片,角度) 旋转图片

ndimage.zoom(图片,比例) 缩放图片

face[0:400,450:900] 切割图片,一维从0-400,二维从450-900

from scipy import misc,ndimage
#原始图片
face = misc.face(gray=True)
#移动图片坐标
shifted_face = ndimage.shift(face, (50, 50))
#移动图片坐标,并且指定模式
shifted_face2 = ndimage.shift(face, (-200, 0), mode='wrap')
#旋转图片
rotated_face = ndimage.rotate(face, -30)
#切割图片
cropped_face = face[10:-10, 50:-50]
#对图片进行缩放
zoomed_face = ndimage.zoom(face, 0.5)
faces = [shifted_face,shifted_face2,rotated_face,cropped_face,zoomed_face]

绘制图片

plt.figure(figsize = (12,12))
for i,face in enumerate(faces):
    plt.subplot(1,5,i+1)
    plt.imshow(face,cmap = plt.cm.gray)
    plt.axis('off')

图片的过滤

#导包处理滤波
from scipy import misc,ndimage
import numpy as np
import matplotlib.pyplot as plt
face = misc.face(gray=True)
face = face[:512, -512:]  # 做成正方形
#图片加噪
noisy_face = np.copy(face).astype(np.float)
#噪声图片
noisy_face += face.std() * 0.5 * np.random.standard_normal(face.shape)
#高斯过滤
blurred_face = ndimage.gaussian_filter(noisy_face, sigma=1)
#中值滤波
median_face = ndimage.median_filter(noisy_face, size=5)

#signal中维纳滤波
from scipy import signal
wiener_face = signal.wiener(noisy_face, (5, 5))

titles = ['noisy','gaussian','median','wiener']
faces = [noisy_face,blurred_face,median_face,wiener_face]

绘制图片

plt.figure(figsize=(12,12))
plt.subplot(141)
plt.imshow(noisy_face,cmap = 'gray')
plt.title('noisy')
plt.subplot(142)
plt.imshow(blurred_face,cmap = 'gray')
plt.title('gaussian')
plt.subplot(143)
plt.imshow(median_face,cmap = 'gray')
plt.title('median')
plt.subplot(144)
plt.imshow(wiener_face,cmap = 'gray')
plt.title('wiener')
plt.show()

8 pandas绘图函数

线型图

#采用Series做法
import numpy as np
import pandas as pd
from pandas import Series,DataFrame
import matplotlib.pyplot as plt
np.random.seed(0)
s = Series(np.random.randn(10).cumsum(),index = np.arange(0,100,10))
s.plot()
plt.show(s.plot())
#DataFrame图标实例
np.random.seed(0)
df = DataFrame(np.random.randn(10,4).cumsum(0),
              columns= ['A','B','C','D'],
              index = np.arange(0,100,10))
plt.show(df.plot())

柱状图

#水平与垂直柱状图Series
fig,axes = plt.subplots(2,1)
data = Series(np.random.rand(16),index = list('abcdefghijklmnop'))
data.plot(kind = 'bar',ax = axes[0],color = 'b',alpha = 0.9)
data.plot(kind = 'barh',ax = axes[1],color = 'b',alpha = 0.9)
#DataFrame柱状图
df = DataFrame(np.random.rand(6,4),
              index = ['one','two','three','four','five','six'],
              columns = pd.Index(['A','B','C','D'],name = 'Genus'))
plt.show(df.plot(kind = 'bar'))

df = DataFrame(np.random.rand(6,4),
              index = ['one','two','three','four','five','six'],
              columns = pd.Index(['A','B','C','D'],name = 'Genus'))
plt.show(df.plot(kind = 'bar',stacked = True))

直方图与密度图

a = np.random.random(10)
b = a/a.sum()
s = Series(b)
plt.show(s.hist(bins = 100)) #bins直方图的柱数
#密度图
a = np.random.random(10)
b = a/a.sum()
s = Series(b)
plt.show(s.plot(kind = 'kde'))

带有密度估计的规格化直方图

%matplotlib inline
comp1 = np.random.normal(0,1,size = 200)
comp2 = np.random.normal(10,2,size = 200)
values = Series(np.concatenate([comp1,comp2]))
p1 = values.hist(bins = 100,alpha = 0.3,color = 'k',density = True)

p2 = values.plot(kind = 'kde',style = '--',color = 'r')

散布图

#简单的散布图
df = DataFrame(np.random.randint(0,100,size = 100).reshape(50,2),columns = ['A','B'])
df.plot('A','B',kind = 'scatter',title = 'x Vs y')

散步矩阵图

import numpy as np
import pandas as pd
from pandas import Series,DataFrame
%matplotlib inline
df = DataFrame(np.random.randn(200).reshape(50,4),columns = ['A','B','C','D'])
pd.plotting.scatter_matrix(df,diagonal = 'kde',color = 'k')

相关文章
|
24天前
|
数据可视化 数据挖掘 数据管理
问卷调查数据分析指南!掌握方法,精准把握用户需求!
本文介绍了如何利用自定义报表、交叉报表和过滤器进行问卷调查数据分析。文章首先区分了定量和定性数据,强调了定量数据在分析中的重要性,并列举了客户体验(CSAT、CES、NPS)和市场调研的关键指标。接着,提到了定性数据分析方法,如情感分析和词云图。文章还讨论了自定义报表、交叉报表和过滤器在数据筛选和相关性探索中的作用,以及收集器在多源数据收集上的应用。最后,强调了仪表板在数据可视化和比较中的优势,并推荐了Zoho Survey作为综合的数据管理平台。
32 0
问卷调查数据分析指南!掌握方法,精准把握用户需求!
|
1月前
|
数据可视化 数据挖掘 Linux
Python数据分析(四)——plot方法
Python数据分析(四)——plot方法
|
2月前
|
搜索推荐 数据挖掘 C++
数据分析方法-对比分析和用户画像
数据分析方法-对比分析和用户画像
67 1
数据分析方法-对比分析和用户画像
|
3月前
|
机器学习/深度学习 数据采集 存储
基于振弦采集仪的工程监测数据分析方法研究
基于振弦采集仪的工程监测数据分析方法研究主要涉及以下几个方面:
基于振弦采集仪的工程监测数据分析方法研究
|
4月前
|
供应链 搜索推荐 数据挖掘
数据分析方法与模型
数据分析方法与模型
|
4月前
|
机器学习/深度学习 数据采集 运维
重要的数据分析方法:时间序列分析
重要的数据分析方法:时间序列分析
107 1
重要的数据分析方法:时间序列分析
|
5月前
|
数据挖掘 索引 Python
【Python】数据分析:numpy的常用方法
【Python】数据分析:numpy的常用方法
43 0
|
4月前
|
自然语言处理 数据可视化 数据挖掘
【数据分析与可视化】Scipy中的图像处理信号处理讲解与实战(附源码 超详细)
【数据分析与可视化】Scipy中的图像处理信号处理讲解与实战(附源码 超详细)
39 0
|
4月前
|
数据可视化 数据挖掘 计算机视觉
【数据分析与可视化】Scipy中常用函数及线性代数基本运算讲解(附源码 超详细)
【数据分析与可视化】Scipy中常用函数及线性代数基本运算讲解(附源码 超详细)
46 0
|
6月前
|
机器学习/深度学习 运维 数据可视化
chat GPT在常用的数据分析方法中的应用
ChatGPT在常用的数据分析方法中有多种应用,包括描述统计分析、探索性数据分析、假设检验、回归分析和聚类分析等。下面将详细介绍ChatGPT在这些数据分析方法中的应用。 1. 描述统计分析: 描述统计分析是对数据进行总结和描述的方法,包括计算中心趋势、离散程度和分布形状等指标。ChatGPT可以帮助你理解和计算这些描述统计指标。你可以向ChatGPT询问如何计算平均值、中位数、标准差和百分位数等指标,它可以给出相应的公式和计算方法。此外,ChatGPT还可以为你提供绘制直方图、箱线图和散点图等图表的方法,帮助你可视化数据的分布和特征。 2. 探索性数据分析: 探索性数据分析是对数据进行探
153 0