python123文件关键行数答案嵩天,[Python學習筆記]Python數據分析與展示(北理工 嵩天)...

嵩天老師的課感覺很好呀,啦啦啦

0. 數據分析之前奏

課程主要內容:

c3351aa4a044edc74dfb3823f8a52378.jpe

常用IDE:

1a70b8404f2593ee0d16055ef3310458.jpe

本課程主要使用: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的環境空間

67c02c04707203b313b14171db17514a.jpe

編程工具:spyder

bbea1b4fdfe660d16a32d433109245ba.jpe

默認不舒服  改下

508b72f16a29918d6de20afafd7636ab.jpe

32122b9663014a86106f566462378ab5.jpe

交互式編程環境:IPython

-是一個功能強大的交互式shell

-適合進行交互式數據可視化和GUI相關應用

IPython幾個技巧

?:可以在變量或者函數前面加?獲得通用信息

%run :可以執行.py程序 注意:%run在一個空的命名空間執行%

529c67799dd5b75d161ee3b39988f7be.jpe

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):軸的數量

6ed6951b7f6f87615dafcc717470731d.jpe

例子:

b28eae8f9ec91e3c3a2f315916f247df.jpe

里面的int32不是Python基礎類型,是NumPy定義的類型,更多類型如下:

0dfb43b58760199d611da3aec6afbbfa.jpe

63920bd317b961db603632f5813c4e50.jpe

ff06554261b4c6c13ec7b690d54b8cd6.jpe

為啥要這么多數據類型?

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

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

ndarray數組也可以由非同質對象構成

非同質ndarray元素為對象類型

非同質ndarray數組無法發揮numpy優勢,盡量避免使用

ndarray數組的創建和變換

332b506733833d22cd32399f14961fc1.jpe

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

x = np.array(list/tuple)

x = np.array(list/tuple,dtype=np.float32)   不指定類型的時候numpy自動關聯一個合適的

2c67f32e87fe9bbba35e4580da1c6fd5.jpe

151344e20155211d321bbf48573d8b49.jpe

cdd867588975ac1fcae895c1ff6b4b13.jpe

b760daa1d5174a39128ab2c60a55c526.jpe

除了arange函數,其他都是浮點數

581194c5eeeb0a30c2c59118934d3a95.jpe

ndarray數組的變換:維度變換、元素類型變換

3efc1c0866cd5ad4b8de7ec4fd46b1a9.jpe

f38a419d7e94bf16f12b6e5ec87b3d95.jpe

ndarray數組向列表變換

ls = a.tolist()

ndarray數組的操作

索引和切片

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

03b894289f44c45040f60c0fa553ffdd.jpe

ndarray數組的運算

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

1fc8c18b80016047770c02e40e1a7374.jpe

77b18ae60c110402fbf0325a3e624147.jpe

ea1d2c3f48f3635e0842fe50c306f5df.jpe

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

1.2 NumPy數據存取與函數

數據的csv文件存取

90e8b693540328468376015da7057d6e.jpe

ffa2d8ef9205c7ddd6a718ab06464d3a.jpe

be4409ed0157bf48823a5c0863317fd7.jpe

csv只能存儲讀取一維和二維數據,這是它的局限

多維數據的存取

對於ndarray數組 有個方法  a.tofile(frame,sep=’’,format=’%s’)

-frame 文件、字符串  sep:數據分隔符,如果是空串,寫入文件為二進制 format:寫入數據的格式

56904cad496220dc138ab430d2c3dba5.jpe

可以保存為二進制,小些,但是無法人類讀懂,如果知道是這樣寫的,可以還原,作為一種保存數據的方法

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

-dtype:讀取的數據類型  count:讀入元素的個數-1表示全部

04091d009bd1f3752b96862ae2209c15.jpe

使用這個方法需要知道存入文件時候的數組維度和元素類型,就是元數據,所以fromfile和tofile需要配合使用,可以將元數據另外存儲解決

NumPy的便捷文件存取

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

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

np.load(fname)

NumPy的隨機數函數

NumPy的random子庫 np.random.*

95b81b0f7bb8dcaa31a5ae2cde2c7aff.jpe

f0c032ba2946c244b6d6b4cc6b58899d.jpe

eb50546d0be0f04a260fdd2f4eddf033.jpe

NumPy的統計函數

7e65bfc7c8b48c41e586324927821a93.jpe

5d8b6400a39002ad27f434f3d7577c2a.jpe

df6320b8f7fbff5aae4c5c755b669f3d.jpe

380d39ef6ef0c130234db2f5b5741255.jpe

NumPy的梯度函數

825a298a42aed835ae4474df6a0c9fd8.jpe

d21a68c37ed3f996a5d8ce9a707a117c.jpe

cba01991e1626add426771519472db8b.jpe

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

圖像的數組表示

RGB色彩表示

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

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

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

a24cb40dae3bed81df348d810c428d68.jpe

圖像的變換

fde1471c590271a28442fa0939b8773e.jpe

17c88b1c9d8b764a12aa2fb578e77d90.jpe

26fa65d3116bd07f6ceedf1f7a503f8b.jpe

96fe4d7e36f50d6f8d85970af2eaa9ff.jpe

052a914c77894dc50c59dc102f81cb8f.jpe

圖像的手繪實例

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

0d9089d3595445e814913f593f21fab3.jpe

82cf6b11bcbe0fb6b1c4251af04390df.jpe

8b0761f1e2925124a5c30017e44562d3.jpe

282d392847782a52f4d274002e8b96a0.jpe

b5b4616b7c038f6072b4eb6c5b16836f.jpe

from PIL importImageimportnumpy 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')

結果

31fe67b8a88be4375633bc22cf1c02f0.jpe

5d7c5e95754ab1ae2794e4cce468c6a4.jpe

2. 數據分析與展示

2.1 Matplotlib庫入門

a53a2d63c96630fc8a034fae3e835fa0.jpe

由各種數據可視化類組成,內部結構復雜,是受matlab啟發

matplotlib.pyplot是繪制各類可視化圖形的命令子庫,相當於快捷方式

import matplotlib.pyplot as plt

319d31e7bcba6d3e2d56c71fddc54a45.jpe

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

繪制多個圖形,分區域plt.subplot(3,2,4)

c5abdddf062c51541ad2a60763417b91.jpe

081b5151ffc90378bb6a41b6bdb8cdd7.jpe

pylot的plot函數

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

-format_string 表示曲線的格式字符串   **kwargs表示第二組或更多(x,y,format_string)   當繪制多條曲線x不能省略,當繪制一條時候可以省略x用索引值

8a83e33e65704f11be90780de459d0fb.jpe

format_string由顏色字符、風格字符、標記字符組成

fb1fb88c7e16e0c2436c991eb29285ab.jpe

6df9f3649fdfd6f2e12b6d0237579e79.jpe

0888d0cfbbc9cd9f929205c8a7354658.jpe

49dba3156858e5eb48bfc4741ba1fc8f.jpe

pyplot的中文顯示

方法1:修改繪制區域的全部字體

541005aff1666c36563213d3679463b4.jpe

d00f0661380bd9279324e70c4ccdf93c.jpe

364b3f0d45292d388219d37b26903522.jpe

方法2:

f3001621cf5db5fdf18a4468a2eb68b9.jpe

pylot的文本顯示

f4346343c5d898735d8199e3c7fb8cbf.jpe

646e105a36ab7a8cbea69052281ceb92.jpe

首先字符串前邊的r代表是原始字符串,也就是里邊的內容不需要轉移,這個一般在正則表達式的時候也這么用,而這里是laText的用法,在python中使用laText,需要在文本的前后加上$符號,也就是你所用的那樣,然后就是laText的文本了,當你輸入了以上內容,matplotlib會自動為你解析的,\pi代表的就是π

9b274f163ad349918ba17a90e970086c.jpe

pylot子繪圖區域

1e623177b51a23f740ebe04bf61c73f3.jpe

67cf05fe7db4717c822e0bb67bcdb6b4.jpe

232943a56a8450be3a0af8c65e6459ed.jpe

這種方法每次都要寫(3,3),用另外一種方法GridSpec類

d633d37b4b62a46b1f9e7dd3abca8953.jpe

570bec4821b8002fe56be89536db3ee6.jpe

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

58bca0d80138999e966083c45c3c11c6.jpe

f172e1fb8e2ce4deb62a20601774a24c.jpe

1f1e8532e7d5a9d79f4cbc72d4f3bfae.jpe

pylot餅圖繪制

c660502384b5ebc8b951aac1063bd085.jpe

d5a73c332277dc2c96fd689ccbe4c01e.jpe

pylot直方圖繪制

ab73a5e9a99f6b78857dc4f2f4902cde.jpe

pylot極坐標繪制

b9cf8986784a8b4dbad3a8882ab2a7e2.jpe

pyplot散點圖繪制

e2012881c217c9b904ff9631eb876779.jpe

面向對象的繪制方法是matplotlib庫的推薦方法,pillow庫的函數變為對象的方法

2.3 實例2:引力波的繪制

importnumpy as npimportmatplotlib.pyplot as pltfrom scipy.io importwavfile

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)

結果

1e5eb4de7f6f6be26514778d108b0498.jpe

3. 數據分析之概要

3.1 Pandas庫入門

Pandas提供高性能易用數據類型和分析工具

import pandas as pd

43ba4fcbfb362d0502f8cf411f78b1b0.jpe

Pandas庫的Series類型     --一維

a7f72bbcf7d4d80d07b7ba1dddae156c.jpe

也支持自定義索引

73b87102f8f830fcdd9cd54acd7f8e17.jpe

a961b53bf5d7edbb3f99bf7e1c71c5c1.jpe

fd5a0e0e19548672632943d8364bf0c4.jpe

1c78b5203a61c404fb32627a64bb2005.jpe

f25e719c12b0f3e3fa533651605a4ac8.jpe

b.index  b.values   獲得索引和數據  類似ndarray和字典

兩套索引並存  但是不能混用

b7208ba7960f0313fbd703c08a9f5221.jpe

Series類型也與字典類型類似 可以in, get()

f5f93a9129748a9974e229b04689849f.jpe

ee329e30f94262e16de4f2cf90c85b0b.jpe

5e23ef714bfba5aab5982aa4db8319c4.jpe

Pandas庫的DataFrame類型  --二維

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

85be0e3d709e447981723ea14f3fd937.jpe

是一個表格型的數據類型,每列值類型可以不同

既有行索引也有列索引

常用於表達二維數據,單可以表達多維數據

14929e10facb166839b61f298c1b20a7.jpe

75851516899729dae54f04f84024b5fd.jpe

19d54529497170d61f45204a5e2fef79.jpe

d7eec79452036ba3edc13810f9b58504.jpe

c9326f3a15de3ae7e09050ada6fd6971.jpe

1796443859959ff306d20fbb660889b1.jpe

DataFrame基本操作類似Series,根據行列索引

Pandas庫的數據數據類型操作

如何改變結構呢 增加 或重排:重新索引    刪除:drop

4330d315a90bc726637fca6844900cc6.jpe

cea75883e4c777a6385b0a96cf917662.jpe

1c14baac3a187d35b85c3defc11d83e7.jpe

索引是不可修改類型  索引的操作就是對數據的操作   numpy不存在索引 必須通過維度來操作

bccfeed72f4f0a6e8a2a2981f33e140e.jpe

6451467903c9e20b9a55cf6a8a354caa.jpe

25497fb2a871baa7e0c7ecb48c36151d.jpe

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

Pandas庫的數據類型運算

算術類型運算

49879d4c0dc5d6b262e0bb5b1f4661b4.jpe

0dda3f805b69edcf2931b9b15a085d9e.jpe

c54d3254f65955992bf9105fcf16d467.jpe

5286d9e2fff46b6dd4443f7414966aea.jpe

52e466e0b2d1fef2ae01c684681a0b01.jpe

比較運算

c4edcda13fe04aa1f6b9a46227f983d4.jpe

523891a4feaeee2581d1b21f6b2c781c.jpe

7535f72711219158d452c8fd63e57f53.jpe

數據和索引建立關聯關系  達到操作索引就是操作數據

533cb41019d1707f83a5c97e3dd66fc5.jpe

3.2 Pandas數據特征分析

6e0ce3e26746ace0d83ced42b8b997f1.jpe

數據的排序

可以對索引排序

也可以對數據排序

834d7d602151d530198d14be6fd77d4a.jpe

432de0e09d3fd4836084bf5f648b8ca2.jpe

8e402a319ad38b4606dc3c8dc51d31cb.jpe

910cccab4778825a4e86d0dac1de7800.jpe

b71f6149d73226b367496644a7b407da.jpe

基本的統計分析函數

b02bfd1e2e75299472313eff7593b161.jpe

0c0bc367b52dd406bd48275d564f1b51.jpe

7ad69e89cdc951a69c1e9a9c5aa3402c.jpe

32a955cfd93c47a8d3aa86caba1396a2.jpe

bfbc97104717594060a24c2d3977dbc3.jpe

累計統計分析

bae685609571003cac3116691c61cffe.jpe

b9336363aa7b12b244405bfec6a1ce67.jpe

滾動計算(窗口計算)

eeaac694cb65043a3b410125216a3c45.jpe

9d585a475eb83dffad6a671d9d7d2f5c.jpe

數據的相關分析

fd5e80b002215b3e149826b0905c6787.jpe

a36fb62b1a56c35afcc0d0deca543a01.jpe

327cf29f26dd81c496cff23ce2a664d6.jpe

a692a72e4c0ea4489c17c87f9b4f7738.jpe

1b1e21e5c60b57b43d047ad310a7f648.jpe

48aed5f087b9505a33db09ca43d700af.jpe

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值