Loading

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:取行索引
  • 读取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')
  • 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,高保真音乐/无损音乐
    • 音乐大概的时长
      • 10776444/44100/60
    • 写入wav文件
      • wavfile.write('mix_music.wav', 44100, m)
  • 各种滤镜效果

    • 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')
posted @ 2021-03-04 21:40  lotuslaw  阅读(98)  评论(0编辑  收藏  举报