[Python学习笔记]Python数据分析与展示(北理工 …

2018-10-13 06:31:15来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

嵩天老师的课感觉很好呀,啦啦啦

0. 数据分析之前奏

课程主要内容:

image


常用IDE:

image

本课程主要使用: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的环境空间

image

 

编程工具:spyder

image

默认不舒服  改下

image

image

 

交互式编程环境:IPython

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

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

 

IPython几个技巧

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

%run :可以执行.py程序 注意:%run在一个空的命名空间执行%

image

 

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):轴的数量

image

例子:

image

里面的int32不是Python基础类型,是NumPy定义的类型,更多类型如下:

image

image

image

为啥要这么多数据类型?

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

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

 

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

非同质ndarray元素为对象类型

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


ndarray数组的创建和变换

image

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

  x = np.array(list/tuple)

  x = np.array(list/tuple,dtype=np.float32)   不指定类型的时候numpy自动关联一个合适的

image

image

image

image

除了arange函数,其他都是浮点数

image

 

ndarray数组的变换:维度变换、元素类型变换

image

image

ndarray数组向列表变换

ls = a.tolist()


ndarray数组的操作

索引和切片

ndarray一维数组的索引和列表一样

image


ndarray数组的运算

数组与标量的运算等于每个元素都和这个标量算一下

image

image

image

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

1.2 NumPy数据存取与函数

数据的csv文件存取

image

image

image

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


多维数据的存取

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

  -frame 文件、字符串  sep:数据分隔符,如果是空串,写入文件为二进制 format:写入数据的格式

image

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

 

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

  -dtype:读取的数据类型  count:读入元素的个数-1表示全部 

image

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

 

NumPy的便捷文件存取

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

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

np.load(fname)

 

NumPy的随机数函数

NumPy的random子库 np.random.*

image

image

image

 

NumPy的统计函数

image

image

image

image

 

NumPy的梯度函数

image

image

image

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

图像的数组表示

RGB色彩表示

PIL库  处理图像的第三方库 pip install pillow                   from PIL import Image

Image是PIL库中代表图像的类(对象)

图像是一个由像素组成的二维矩阵,每个元素是一个RGB值

image

 

图像的变换

image

image

image

image

image

 

 

图像的手绘实例

手绘特征:黑白灰色、边界线条较重、相同或者相近色彩趋于白色、略有光源效果

image

image

image

image

image

from PIL import Image
import numpy as np

a = np.asarray(Image.open('./test.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('./test2.jpg')

结果

image

image

 

2. 数据分析与展示

2.1 Matplotlib库入门

image

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

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

import matplotlib.pyplot as plt

image

 

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

 

绘制多个图形,分区域plt.subplot(3,2,4)

image

image


pylot的plot函数

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

  -format_string 表示曲线的格式字符串   **kwargs表示第二组或更多(x,y,format_string)   当绘制多条曲线x不能省略,当绘制一条时候可以省略x用索引值

image

format_string由颜色字符、风格字符、标记字符组成

image

image

image

image


pyplot的中文显示

方法1:修改绘制区域的全部字体

image

image

image

方法2:

image


pylot的文本显示

image

image

首先字符串前边的r代表是原始字符串,也就是里边的内容不需要转移,这个一般在正则表达式的时候也这么用,而这里是laText的用法,在python中使用laText,需要在文本的前后加上$符号,也就是你所用的那样,然后就是laText的文本了,当你输入了以上内容,matplotlib会自动为你解析的,\pi代表的就是π

image


pylot子绘图区域

image

image

image

 

这种方法每次都要写(3,3),用另外一种方法GridSpec类

image

image

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

image

image

image


pylot饼图绘制

image

image


pylot直方图绘制

image


pylot极坐标绘制

image


pyplot散点图绘制

image

面向对象的绘制方法是matplotlib库的推荐方法,pillow库的函数变为对象的方法

2.3 实例2:引力波的绘制

http://python123.io/dv/grawave.html 引力波数据源

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)

结果

image

3. 数据分析之概要

3.1 Pandas库入门

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

import pandas as pd

image


Pandas库的Series类型     --一维

image

也支持自定义索引

image

 

image

image

image

image

 

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

两套索引并存  但是不能混用

image

Series类型也与字典类型类似 可以in, get()

image

image

image


Pandas库的DataFrame类型  --二维

由共用相同索引的一组列组成,实际上就是一个表格

image

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

既有行索引也有列索引

常用于表达二维数据,单可以表达多维数据

image

image

image

image

image

image

DataFrame基本操作类似Series,根据行列索引


Pandas库的数据数据类型操作

如何改变结构呢 增加 或重排:重新索引    删除:drop

image

image

image

索引是不可修改类型  索引的操作就是对数据的操作   numpy不存在索引 必须通过维度来操作

image

image

image

Series只有0轴    DataFrame由0轴 1轴,drop默认操作0轴


Pandas库的数据类型运算

算术类型运算

image

image

image

image

image

 

比较运算

image

image

image

 

数据和索引建立关联关系  达到操作索引就是操作数据

image

3.2 Pandas数据特征分析

image


数据的排序  

可以对索引排序 

也可以对数据排序

image

image

 

image

image

image


基本的统计分析函数

image

image

image

image

image


累计统计分析

image

image

 

滚动计算(窗口计算)

image

image


数据的相关分析

image

image

image

 

image

image


image

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:python装饰器实现登陆验证

下一篇:python永久添加第三方模块,PYTHONPATH的设置