【學習筆記】PYTHON數據分析與展現(北理工 嵩天)

0 數據分析以前奏

課程主要內容:image經常使用IDE:image本課程主要使用:Anacondahtml

Anaconda:一個集合,包括conda、某版本Python、一批第三方庫等python

  -支持近800個第三方庫c++

  -適合科學計算領域程序員

  -包含多個主流工具正則表達式

  -開源免費shell

  -跨平臺編程

自己不是個ide 是將多個工具集成在一塊兒的json

condaubuntu

  -一個工具,用於包管理和環境管理數組

  -包管理與pip相似,管理Python第三方庫

  -環境管理可以容許用戶使用不一樣版本的Python,並能靈活切換

conda將工具、第三方庫、Python版本、conda都看成包,同等對待

conda有命令行工具    

C:\Users\king\Anaconda3\Scripts\conda.exe –version 能夠查看conda版本

conda update conda    升級conda

剛開始的是命令行,如今也集成爲GUI,anaconda默認生成root的環境空間image編程工具:spyderimage默認不舒服  改下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定義的類型,更多類型以下:imageimageimage

爲啥要這麼多數據類型?

  -科學計算涉及大量數據,對性能和存儲都有較高要求

  -對元素類型精細定義,有助於numpy合理使用存儲空間並優化性能,有助於程序員對程序規模由合理評估

ndarray數組也能夠由非同質對象構成

非同質ndarray元素爲對象類型

非同質ndarray數組沒法發揮numpy優點,儘可能避免使用


ndarray數組的建立和變換image

1) 從python列表元組等類型建立數組

  x = np.array(list/tuple)

  x = np.array(list/tuple,dtype=np.float32)   不指定類型的時候numpy自動關聯一個合適的imageimageimageimage除了arange函數,其餘都是浮點數imagendarray數組的變換:維度變換、元素類型變換image

ndarray數組向列表變換

ls = a.tolist()


ndarray數組的操做

索引和切片

ndarray一維數組的索引和列表同樣image

ndarray數組的運算

數組與標量的運算等於每一個元素都和這個標量算一下imageimage

maximum等通過運算存在數據類型隱式轉換

1.2 NumPy數據存取與函數

數據的csv文件存取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.*imageNumPy的統計函數

imageimageNumPy的梯度函數imageimage

1.3 實例1:圖像的手繪效果

圖像的數組表示

RGB色彩表示

PIL庫  處理圖像的第三方庫 pip install pillow                   from PIL import Image

Image是PIL庫中表明圖像的類(對象)

圖像是一個由像素組成的二維矩陣,每一個元素是一個RGB值image圖像的變換imageimageimage

圖像的手繪實例

手繪特徵:黑白灰色、邊界線條較重、相同或者相近色彩趨於白色、略有光源效果imageimageimage

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')

imageimage

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)imageimage

pylot的plot函數

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

  -format_string 表示曲線的格式字符串   **kwargs表示第二組或更多(x,y,format_string)   當繪製多條曲線x不能省略,當繪製一條時候能夠省略x用索引值imageformat_string由顏色字符、風格字符、標記字符組成imageimage

pyplot的中文顯示

方法1:修改繪製區域的所有字體image方法2:imagepylot的文本顯示imageimage首先字符串前邊的r表明是原始字符串,也就是裏邊的內容不須要轉移,這個通常在正則表達式的時候也這麼用,而這裏是laText的用法,在python中使用laText,須要在文本的先後加上$符號,也就是你所用的那樣,而後就是laText的文本了,當你輸入了以上內容,matplotlib會自動爲你解析的,\pi表明的就是π

imagepylot子繪圖區域imageimageimage這種方法每次都要寫(3,3),用另一種方法GridSpec類imageimage

2.2 Matplotlib基礎繪圖函數示例(5個實例)

imageimagepylot餅圖繪製imagepylot直方圖繪製imagepylot極座標繪製imagepyplot散點圖繪製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 pdimagePandas庫的Series類型     –一維image也支持自定義索引imageimage

b.index  b.values   得到索引和數據  相似ndarray和字典

兩套索引並存  可是不能混用imageSeries類型也與字典類型相似 能夠in, get()imageimageimage

Pandas庫的DataFrame類型  –二維

由共用相同索引的一組列組成,實際上就是一個表格image

是一個表格型的數據類型,每列值類型能夠不一樣

既有行索引也有列索引

經常使用於表達二維數據,單能夠表達多維數據imageimageimage

DataFrame基本操做相似Series,根據行列索引


Pandas庫的數據數據類型操做

如何改變結構呢 增長 或重排:從新索引    刪除:dropimageimage索引是不可修改類型  索引的操做就是對數據的操做   numpy不存在索引 必須經過維度來操做imageimage

Series只有0軸    DataFrame由0軸 1軸,drop默認操做0軸


Pandas庫的數據類型運算

算術類型運算imageimageimage比較運算image數據和索引創建關聯關係  達到操做索引就是操做數據image

3.2 Pandas數據特徵分析image

數據的排序

能夠對索引排序

也能夠對數據排序imageimage基本的統計分析函數imageimageimage累計統計分析image滾動計算(窗口計算)image數據的相關分析imageimageimage

相關文章
相關標籤/搜索