6-数据加载&Pandas绘图&Scipy初步
数据加载
-
read_csv
- pd.read_csv('../data/SMSSpamCollection', sep="\t", header=None)
- sep分隔符,默认为逗号
- header是否讲第一行作为表头行
-
read_table
- pd.read_table('../data/SMSSpamCollection', header=None)
- 默认sep为'\t',制表符
- Tab
-
read_excel
- pd.read_excel('../data/test.xlsx',sheet_name=2,header=[0,1],index_col=[0,1])
- sheet_name:Excel中的第几个sheet
- header:取列索引
- index_col:取行索引
- pd.read_excel('../data/test.xlsx',sheet_name=2,header=[0,1],index_col=[0,1])
-
读取sqlite文件
- import sqlite3
- 连接sqlite
- con = sqlite3.connect('../data/data.sqlite')
- 读取
- pd.read_sql('select * from Weather_2022 limit 10;',con,index_col='index')
- 写入
- w_2022.to_csv('w_2022.csv')
- w_2022.to_json('w_2022.json')
- w_2022.to_sql('w_New',con)
- 写入sql文件
-
MySQL
-
读取
-
import pymysql
- conda install pymysql
-
连接MySQL
-
db = pymysql.connect(host='localhost',port=3306,user='root',password='***',database='spider2003')
-
-
读取
- pd.read_sql('select * from tb_douban_movie',db)
-
写入
-
from sqlalchemy import create_engine
-
engine = create_engine('mysql+pymysql://root:***@localhost/spider2003?charset=utf8')
-
写入
- w_2022.to_sql('w_New',engine)
-
-
-
Pandas绘图
-
Series
- s = Series([100,200,100,110,119,300,200])
- s.plot()
- s = Series(data=y,index=x)
- s.plot()
-
DataFrame
- df.plot()
-
柱状图
- Series柱状图示例,kind = 'bar'/'barh'
- s = Series([100,200,300,100,230,478],index=['js','python','html','c','c++','java'])
- s.plot(kind='bar') # 柱状图
- s.plot(kind='barh') # 条形图
- df.div(df_day,axis=0)
- 注意使用div时改轴
-
直方图
- rondom生成随机数百分比直方图,调用hist方法
- 柱高表示数据的频数,柱宽表示各组数据的组距
- 参数bins可以设置直方图方柱的个数上限,越大柱宽越小,数据分组越细致
- 设置density参数为True,可以把频数转换为概率
- s = Series([1,1,2,2,2,3,3,3,4,5,6,6,6,7])
- s.plot(kind='hist',bins=4,density=True)
- kde图:核密度估计,用于弥补直方图由于参数bins设置的不合理导致的精度缺失问题
- s.plot(kind='hist',bins=4,density=True)
- s.plot(kind='kde') # 配合直方图,显示效果更好
-
散点图
-
散点图是观察两个一维数据数列之间的关系的有效方法,DataFrame对象可用
-
使用方法: 设置kind = 'scatter',给明标签columns
-
df = DataFrame( data=np.random.normal(size=(1000,2)), columns=['A','B'] ) df.plot(kind='scatter',x='A',y='B')
-
散点图矩阵,当有多个点时,两两点的关系
- 使用函数:pd.plotting.scatter_matrix()
- 参数diagnol:设置对角线的图像类型
- pd.plotting.scatter_matrix(df)
- 直方图改核密度图
- pd.plotting.scatter_matrix(df,diagonal='kde')
-
-
Scipy初步
-
scipy.fftpack模块
- from scipy.fftpack import fft2, ifft2
- fft2表示傅里叶变换
- ifft2表示逆傅里叶变变换
- scipy.fftpack模块用来计算快速傅里叶变换
- 速度比传统傅里叶变换更快,是对之前算法的改进
- 读取数据
- moon = plt.imread('../data2/moonlanding.png')
- 设置画布大小
- plt.figure(figsize=(10,8))
- 设置黑白
- plt.imshow(moon,cmap='gray')
- 快速傅里叶变换
- 会得到复数,会得到频率
- moon_fft = fft2(moon)
- 设定阈值
- a = 5000
- 查找满足条件的值(噪点),将对应的值改成0
- moon_fft2 = np.where(np.abs(moon_fft)>a,0,moon_fft)
- 逆傅里叶变换,还原
- moon_ifft = ifft2(moon_fft2)
- 去除虚部,保留实部
- moon2 = np.real(moon_ifft)
- 绘图显示
- plt.figure(figsize=(10,8))
- plt.imshow(moon2,cmap='gray')
- from scipy.fftpack import fft2, ifft2
-
Scipy文件输入/输出
- import scipy.io as spio
- 存储到二进制文件mat
- spio.savemat('moon.mat',mdict={'moon':moon,'moon2':moon2})
- 使用spio.loadmat()读取数据
- result = spio.loadmat('moon.mat')
-
使用scipy处理wav文件
- wav文件是高频音乐(无损音乐), 但音乐文件比较大
- wav是微软定制的一种音频格式
- from scipy.io import wavfile
- 读取数据
- hz, music1 = wavfile.read('../data2/邓紫棋-喜欢你.wav')
- hz:44100,44.1KHZ,高保真音乐/无损音乐
- hz, music1 = wavfile.read('../data2/邓紫棋-喜欢你.wav')
- 音乐大概的时长
- 10776444/44100/60
- 写入wav文件
- wavfile.write('mix_music.wav', 44100, m)
- wav文件是高频音乐(无损音乐), 但音乐文件比较大
-
各种滤镜效果
-
from PIL import Image, ImageFilter
-
打开图片
- cat = Image.open('../data2/cat.jpg')
-
cat.filter(ImageFilter.BLUR)
-
cat.filter(ImageFilter.CONTOUR)
-
cat.filter(ImageFilter.DETAIL)
-
cat.filter(ImageFilter.SMOOTH)
-
cat.filter(ImageFilter.EMBOSS)
-
cat.filter(ImageFilter.SHARPEN)
-
''' blur 模糊, contour轮廓 detail 细节增加 edge_enhance边缘强化 emboss浮雕, find_edges找到边缘, sharpen锐化, Smooth柔化 '''
-
-
使用scipy.ndimage图片处理
- from scipy import misc, ndimage
- 使用scipy.misc.face(gray=True)获取图片
- 获取图片
- face = misc.face()
- 显示图片
- plt.figure(figsize=(10,8))
- plt.imshow(face)
- shift对第一个维度/第二个维度/第三个维度做偏移
- res = ndimage.shift(face,shift=(-300,-200,0),mode='wrap')
- plt.figure(figsize=(10,8))
- plt.imshow(res)
- mode :
- rotate旋转图片
- res = ndimage.rotate(face,40)
- plt.figure(figsize=(10,8))
- plt.imshow(res)
- 缩放图片
- res = ndimage.zoom(face,zoom=1.2)
- res = ndimage.zoom(face,zoom=(0.5,0.7,1))
- plt.figure(figsize=(10,8))
- plt.imshow(res)
- 使用切片切割图片
- res = face[200:400,500:800]
- plt.figure(figsize=(10,8))
- plt.imshow(res)
- 加载图片,使用灰色图片misc.face()并添加噪声
- face = misc.face(gray=True)
- plt.figure(figsize=(10,8))
- plt.imshow(face,cmap='gray')
- face2 = face2.astype(np.float64)
- face2 += np.random.randn(768,1024) * face.std() * 0.6
- plt.figure(figsize=(10,8))
- plt.imshow(face2,cmap='gray')
- 将类型转换成float64
- gaussian高斯滤波参数sigma:高斯核的标准偏差
- sigma:取指定范围内的色素的平均值
- g_face = ndimage.gaussian_filter(face2,sigma=1)
- plt.figure(figsize=(10,8))
- plt.imshow(g_face,cmap='gray')
- median中值滤波参数size:给出在每个元素上从输入数组中取出的形状位置,定义过滤器功能的输入
- size:取的几个色素中的中位数
- m_face = ndimage.median_filter(face2,size=5)
- plt.figure(figsize=(10,8))
- plt.imshow(m_face,cmap='gray')
- signal维纳滤波参数mysize:滤镜尺寸的标量
- from scipy.signal import wiener
- w_face = wiener(face2,mysize=6)
- plt.figure(figsize=(10,8))
- plt.imshow(w_face,cmap='gray')
- from scipy import misc, ndimage