欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

【学习笔记】PYTHON数据分析与展示(北理工 嵩天)

程序员文章站 2022-07-02 13:04:16
0 数据分析之前奏课程主要内容:常用IDE:本课程主要使用:AnacondaAnaconda:一个集合,包括conda、某版本Python、一批第三方库等 -支持近800个第三方库 -适合科学计算领域 -包含多个主流工具 -开源免费 -跨平台本身不是个ide 是将多个工具集成在一起的conda -一... ......

0 数据分析之前奏

课程主要内容:【学习笔记】PYTHON数据分析与展示(北理工 嵩天)常用ide:【学习笔记】PYTHON数据分析与展示(北理工 嵩天)本课程主要使用:anaconda

anaconda:一个集合,包括conda、某版本python、一批第三方库等

  -支持近800个第三方库

  -适合科学计算领域

  -包含多个主流工具

  -开源免费

  -跨平台

本身不是个ide 是将多个工具集成在一起的

conda

  -一个工具,用于包管理和环境管理

  -包管理与pip类似,管理python第三方库

  -环境管理能够允许用户使用不同版本的python,并能灵活切换

conda将工具、第三方库、python版本、conda都当作包,同等对待

conda有命令行工具    

c:\users\king\anaconda3\scripts\conda.exe –version 可以查看conda版本

conda update conda    升级conda

刚开始的是命令行,现在也集成为gui,anaconda默认生成root的环境空间【学习笔记】PYTHON数据分析与展示(北理工 嵩天)编程工具:spyder【学习笔记】PYTHON数据分析与展示(北理工 嵩天)默认不舒服  改下【学习笔记】PYTHON数据分析与展示(北理工 嵩天)

交互式编程环境:ipython

-是一个功能强大的交互式shell

  -适合进行交互式数据可视化和gui相关应用

ipython几个技巧

?:可以在变量或者函数前面加?获得通用信息

%run :可以执行.py程序 注意:%run在一个空的命名空间执行%【学习笔记】PYTHON数据分析与展示(北理工 嵩天)

trouble shooting:

在ubuntu18中安装了anaconda3,启动spyder报错segmentation fault (core dumped)

安装conda install pyopengl  然后再启动 卡住半天没了 出现killed报错 我日  然后升级了下anaconda3到最新才好了

1. 数据分析之表示

1.1 numpy库入门

数据的维度

一维数据   列表、集合

二维数据   表格是经典的二维数据    用列表表示

多维数据   二维数据在更多维度上展开 比如时间维度  用列表表示

高维数据   仅使用最基本的二元关系展示复杂关系 key-value形式组织数据   用字典类型或者其他json、xmal、yaml等


numpy的数组对象:ndarray

numpy是一个开源的python科学计算基础库

  -一个强大的n维数组对象ndarray

  -广播函数功能

  -整合c/c++/fortran代码的工具

  -线性代数、傅里叶变换、随机数生成等功能

numpy是scipy、pandas等数据处理或科学计算库的基础

使用 import numpy as np

ndarray是一个多维数组,由两部分组成,要求数组元素类型相同,数组下标从0开始

  -元数据(数据维度,数据类型等)

  -实际数据

np.array()                  –ndarray别名是array

轴(axis):保存数据的维度

秩(rank):轴的数量【学习笔记】PYTHON数据分析与展示(北理工 嵩天)例子:【学习笔记】PYTHON数据分析与展示(北理工 嵩天)里面的int32不是python基础类型,是numpy定义的类型,更多类型如下:【学习笔记】PYTHON数据分析与展示(北理工 嵩天)【学习笔记】PYTHON数据分析与展示(北理工 嵩天)【学习笔记】PYTHON数据分析与展示(北理工 嵩天)

为啥要这么多数据类型?

  -科学计算涉及大量数据,对性能和存储都有较高要求

  -对元素类型精细定义,有助于numpy合理使用存储空间并优化性能,有助于程序员对程序规模由合理评估

ndarray数组也可以由非同质对象构成

非同质ndarray元素为对象类型

非同质ndarray数组无法发挥numpy优势,尽量避免使用


ndarray数组的创建和变换【学习笔记】PYTHON数据分析与展示(北理工 嵩天)

1) 从python列表元组等类型创建数组

  x = np.array(list/tuple)

  x = np.array(list/tuple,dtype=np.float32)   不指定类型的时候numpy自动关联一个合适的【学习笔记】PYTHON数据分析与展示(北理工 嵩天)【学习笔记】PYTHON数据分析与展示(北理工 嵩天)【学习笔记】PYTHON数据分析与展示(北理工 嵩天)【学习笔记】PYTHON数据分析与展示(北理工 嵩天)除了arange函数,其他都是浮点数【学习笔记】PYTHON数据分析与展示(北理工 嵩天)ndarray数组的变换:维度变换、元素类型变换【学习笔记】PYTHON数据分析与展示(北理工 嵩天)

ndarray数组向列表变换

ls = a.tolist()


ndarray数组的操作

索引和切片

ndarray一维数组的索引和列表一样【学习笔记】PYTHON数据分析与展示(北理工 嵩天)

ndarray数组的运算

数组与标量的运算等于每个元素都和这个标量算一下【学习笔记】PYTHON数据分析与展示(北理工 嵩天)【学习笔记】PYTHON数据分析与展示(北理工 嵩天)

maximum等经过运算存在数据类型隐式转换

1.2 numpy数据存取与函数

数据的csv文件存取【学习笔记】PYTHON数据分析与展示(北理工 嵩天)

csv只能存储读取一维和二维数据,这是它的局限


多维数据的存取

对于ndarray数组 有个方法  a.tofile(frame,sep=’’,format=’%s’)

  -frame 文件、字符串  sep:数据分隔符,如果是空串,写入文件为二进制 format:写入数据的格式【学习笔记】PYTHON数据分析与展示(北理工 嵩天)

可以保存为二进制,小些,但是无法人类读懂,如果知道是这样写的,可以还原,作为一种保存数据的方法

如何还原呢,np.fromfile(frame,dtype=float,count=-1,sep=’’)

  -dtype:读取的数据类型  count:读入元素的个数-1表示全部【学习笔记】PYTHON数据分析与展示(北理工 嵩天)

使用这个方法需要知道存入文件时候的数组维度和元素类型,就是元数据,所以fromfile和tofile需要配合使用,可以将元数据另外存储解决

numpy的便捷文件存取

np.save(fname,array)或者np.savez(fname,array)

  -fname:文件名以.npy或者.npz

np.load(fname)

numpy的随机数函数

numpy的random子库 np.random.*【学习笔记】PYTHON数据分析与展示(北理工 嵩天)numpy的统计函数

【学习笔记】PYTHON数据分析与展示(北理工 嵩天)【学习笔记】PYTHON数据分析与展示(北理工 嵩天)numpy的梯度函数【学习笔记】PYTHON数据分析与展示(北理工 嵩天)【学习笔记】PYTHON数据分析与展示(北理工 嵩天)

1.3 实例1:图像的手绘效果

图像的数组表示

rgb色彩表示

pil库  处理图像的第三方库 pip install pillow                   from pil import image

image是pil库中代表图像的类(对象)

图像是一个由像素组成的二维矩阵,每个元素是一个rgb值【学习笔记】PYTHON数据分析与展示(北理工 嵩天)图像的变换【学习笔记】PYTHON数据分析与展示(北理工 嵩天)【学习笔记】PYTHON数据分析与展示(北理工 嵩天)【学习笔记】PYTHON数据分析与展示(北理工 嵩天)

图像的手绘实例

手绘特征:黑白灰色、边界线条较重、相同或者相近色彩趋于白色、略有光源效果【学习笔记】PYTHON数据分析与展示(北理工 嵩天)【学习笔记】PYTHON数据分析与展示(北理工 嵩天)【学习笔记】PYTHON数据分析与展示(北理工 嵩天)

from pil import image
import numpy as np
 
a = np.asarray(image.open('./beijing.jpg').convert('l')).astype('float')
 
depth = 10.                      # (0-100)
grad = np.gradient(a)             #取图像灰度的梯度值
grad_x, grad_y = grad               #分别取横纵图像梯度值
grad_x = grad_x*depth/100.
grad_y = grad_y*depth/100.
a = np.sqrt(grad_x**2 + grad_y**2 + 1.)
uni_x = grad_x/a
uni_y = grad_y/a
uni_z = 1./a
 
vec_el = np.pi/2.2                   # 光源的俯视角度,弧度值
vec_az = np.pi/4.                    # 光源的方位角度,弧度值
dx = np.cos(vec_el)*np.cos(vec_az)   #光源对x 轴的影响
dy = np.cos(vec_el)*np.sin(vec_az)   #光源对y 轴的影响
dz = np.sin(vec_el)              #光源对z 轴的影响
 
b = 255*(dx*uni_x + dy*uni_y + dz*uni_z)     #光源归一化
b = b.clip(0,255)
 
im = image.fromarray(b.astype('uint8'))  #重构图像
im.save('./beijinghd.jpg')

【学习笔记】PYTHON数据分析与展示(北理工 嵩天)【学习笔记】PYTHON数据分析与展示(北理工 嵩天)

2. 数据分析与展示

2.1 matplotlib库入门【学习笔记】PYTHON数据分析与展示(北理工 嵩天)

由各种数据可视化类组成,内部结构复杂,是受matlab启发

matplotlib.pyplot是绘制各类可视化图形的命令子库,相当于快捷方式

import matplotlib.pyplot as plt

【学习笔记】PYTHON数据分析与展示(北理工 嵩天)

plt.savefig(‘test’,dpi=600) #保存为png文件

绘制多个图形,分区域plt.subplot(3,2,4)【学习笔记】PYTHON数据分析与展示(北理工 嵩天)【学习笔记】PYTHON数据分析与展示(北理工 嵩天)

pylot的plot函数

plt.plot(x,y,format_string,**kwargs)

  -format_string 表示曲线的格式字符串   **kwargs表示第二组或更多(x,y,format_string)   当绘制多条曲线x不能省略,当绘制一条时候可以省略x用索引值【学习笔记】PYTHON数据分析与展示(北理工 嵩天)format_string由颜色字符、风格字符、标记字符组成【学习笔记】PYTHON数据分析与展示(北理工 嵩天)【学习笔记】PYTHON数据分析与展示(北理工 嵩天)

pyplot的中文显示

方法1:修改绘制区域的全部字体【学习笔记】PYTHON数据分析与展示(北理工 嵩天)方法2:【学习笔记】PYTHON数据分析与展示(北理工 嵩天)pylot的文本显示【学习笔记】PYTHON数据分析与展示(北理工 嵩天)【学习笔记】PYTHON数据分析与展示(北理工 嵩天)首先字符串前边的r代表是原始字符串,也就是里边的内容不需要转移,这个一般在正则表达式的时候也这么用,而这里是latext的用法,在python中使用latext,需要在文本的前后加上$符号,也就是你所用的那样,然后就是latext的文本了,当你输入了以上内容,matplotlib会自动为你解析的,\pi代表的就是π

【学习笔记】PYTHON数据分析与展示(北理工 嵩天)pylot子绘图区域【学习笔记】PYTHON数据分析与展示(北理工 嵩天)【学习笔记】PYTHON数据分析与展示(北理工 嵩天)【学习笔记】PYTHON数据分析与展示(北理工 嵩天)这种方法每次都要写(3,3),用另外一种方法gridspec类【学习笔记】PYTHON数据分析与展示(北理工 嵩天)【学习笔记】PYTHON数据分析与展示(北理工 嵩天)

2.2 matplotlib基础绘图函数示例(5个实例)

【学习笔记】PYTHON数据分析与展示(北理工 嵩天)【学习笔记】PYTHON数据分析与展示(北理工 嵩天)pylot饼图绘制【学习笔记】PYTHON数据分析与展示(北理工 嵩天)pylot直方图绘制【学习笔记】PYTHON数据分析与展示(北理工 嵩天)pylot极坐标绘制【学习笔记】PYTHON数据分析与展示(北理工 嵩天)pyplot散点图绘制【学习笔记】PYTHON数据分析与展示(北理工 嵩天)面向对象的绘制方法是matplotlib库的推荐方法,pillow库的函数变为对象的方法

2.3 实例2:引力波的绘制

引力波数据源


import numpy as np
import matplotlib.pyplot as plt
from scipy.io import wavfile
 
rate_h, hstrain= wavfile.read(r"h1_strain.wav","rb")
rate_l, lstrain= wavfile.read(r"l1_strain.wav","rb")
#reftime, ref_h1 = np.genfromtxt('gw150914_4_nr_waveform_template.txt').transpose()
reftime, ref_h1 = np.genfromtxt('wf_template.txt').transpose() #使用python123.io下载文件
 
htime_interval = 1/rate_h
ltime_interval = 1/rate_l
fig = plt.figure(figsize=(12, 6))
 
# 丢失信号起始点
htime_len = hstrain.shape[0]/rate_h
htime = np.arange(-htime_len/2, htime_len/2 , htime_interval)
plth = fig.add_subplot(221)
plth.plot(htime, hstrain, 'y')
plth.set_xlabel('time (seconds)')
plth.set_ylabel('h1 strain')
plth.set_title('h1 strain')
 
ltime_len = lstrain.shape[0]/rate_l
ltime = np.arange(-ltime_len/2, ltime_len/2 , ltime_interval)
pltl = fig.add_subplot(222)
pltl.plot(ltime, lstrain, 'g')
pltl.set_xlabel('time (seconds)')
pltl.set_ylabel('l1 strain')
pltl.set_title('l1 strain')
 
pltref = fig.add_subplot(212)
pltref.plot(reftime, ref_h1)
pltref.set_xlabel('time (seconds)')
pltref.set_ylabel('template strain')
pltref.set_title('template')
fig.tight_layout()
 
plt.savefig("gravitational_waves_original.png")
plt.show()
plt.close(fig)

结果【学习笔记】PYTHON数据分析与展示(北理工 嵩天)

3. 数据分析之概要

3.1 pandas库入门

pandas提供高性能易用数据类型和分析工具

import pandas as pd【学习笔记】PYTHON数据分析与展示(北理工 嵩天)pandas库的series类型     –一维【学习笔记】PYTHON数据分析与展示(北理工 嵩天)也支持自定义索引【学习笔记】PYTHON数据分析与展示(北理工 嵩天)【学习笔记】PYTHON数据分析与展示(北理工 嵩天)

b.index  b.values   获得索引和数据  类似ndarray和字典

两套索引并存  但是不能混用【学习笔记】PYTHON数据分析与展示(北理工 嵩天)series类型也与字典类型类似 可以in, get()【学习笔记】PYTHON数据分析与展示(北理工 嵩天)【学习笔记】PYTHON数据分析与展示(北理工 嵩天)【学习笔记】PYTHON数据分析与展示(北理工 嵩天)

pandas库的dataframe类型  –二维

由共用相同索引的一组列组成,实际上就是一个表格【学习笔记】PYTHON数据分析与展示(北理工 嵩天)

是一个表格型的数据类型,每列值类型可以不同

既有行索引也有列索引

常用于表达二维数据,单可以表达多维数据【学习笔记】PYTHON数据分析与展示(北理工 嵩天)【学习笔记】PYTHON数据分析与展示(北理工 嵩天)【学习笔记】PYTHON数据分析与展示(北理工 嵩天)

dataframe基本操作类似series,根据行列索引


pandas库的数据数据类型操作

如何改变结构呢 增加 或重排:重新索引    删除:drop【学习笔记】PYTHON数据分析与展示(北理工 嵩天)【学习笔记】PYTHON数据分析与展示(北理工 嵩天)索引是不可修改类型  索引的操作就是对数据的操作   numpy不存在索引 必须通过维度来操作【学习笔记】PYTHON数据分析与展示(北理工 嵩天)【学习笔记】PYTHON数据分析与展示(北理工 嵩天)

series只有0轴    dataframe由0轴 1轴,drop默认操作0轴


pandas库的数据类型运算

算术类型运算【学习笔记】PYTHON数据分析与展示(北理工 嵩天)【学习笔记】PYTHON数据分析与展示(北理工 嵩天)【学习笔记】PYTHON数据分析与展示(北理工 嵩天)比较运算【学习笔记】PYTHON数据分析与展示(北理工 嵩天)数据和索引建立关联关系  达到操作索引就是操作数据【学习笔记】PYTHON数据分析与展示(北理工 嵩天)

3.2 pandas数据特征分析【学习笔记】PYTHON数据分析与展示(北理工 嵩天)

数据的排序

可以对索引排序

也可以对数据排序【学习笔记】PYTHON数据分析与展示(北理工 嵩天)【学习笔记】PYTHON数据分析与展示(北理工 嵩天)基本的统计分析函数【学习笔记】PYTHON数据分析与展示(北理工 嵩天)【学习笔记】PYTHON数据分析与展示(北理工 嵩天)【学习笔记】PYTHON数据分析与展示(北理工 嵩天)累计统计分析【学习笔记】PYTHON数据分析与展示(北理工 嵩天)滚动计算(窗口计算)【学习笔记】PYTHON数据分析与展示(北理工 嵩天)数据的相关分析【学习笔记】PYTHON数据分析与展示(北理工 嵩天)【学习笔记】PYTHON数据分析与展示(北理工 嵩天)【学习笔记】PYTHON数据分析与展示(北理工 嵩天)