Python數(shù)據(jù)分析與展示筆記

能今天做好的事就不要等到明天。以夢(mèng)為馬,學(xué)習(xí)趁年華。
一、前言
1.1需要掌握的知識(shí)
掌握表示、清洗、統(tǒng)計(jì)和展示數(shù)據(jù)的能力

1.2編程工具
使用Anaconda IDE集成開發(fā)工具
需要理解和掌握如下工具的使用
conda
Spyder
IPython
二、Anaconda IDE的基本使用方法
2.1conda
一個(gè)工具,用于包管理和環(huán)境管理。
包管理與pip類似,管理Python第三方庫。
環(huán)境管理能夠允許用戶使用不同版本Python,并能靈活切換。
conda將工具、第三方庫、Python版本、conda都當(dāng)作包,同等對(duì)待。
2.2anaconda
一個(gè)集合,包括conda、 某版本Python、 一批第三方庫等。
2.3編程工具:Spyder

2.4IPython
它是一個(gè)功能強(qiáng)大的交互式shell,適合進(jìn)行交互式數(shù)據(jù)可視化和GUI相關(guān)應(yīng)用
IPython的%run命令
%run用于運(yùn)行.py程序
注意: %run在一個(gè)空的命名空間執(zhí)行%
IPython的%魔術(shù)命令
? ??? ??

Python與IPython的區(qū)別
Python只是一個(gè)解釋器,用戶給一段輸入,則它給一段輸出。
IPython是一個(gè)能夠調(diào)用核心的Python解釋器的交互式環(huán)境,IPython只是前臺(tái)的一個(gè)顯示腳本,而對(duì)程序的執(zhí)行是由后臺(tái)的Python的內(nèi)核執(zhí)行。
三、Python語言開發(fā)工具選擇
3.1文本工具類IDE介紹
IDLE
Notepad++
Sublime Text
Vim & Emacs
Atom
Komodo Edit
3.1.1IDLE
它是Python自帶的、默認(rèn)的、常用的入門級(jí)編寫工具
適用于Python入門、功能簡(jiǎn)單直接、代碼量小的需求

3.1.2Sublime Text
它是專門為程序員開發(fā)的第三方專用編程工具,具有專業(yè)的編程體驗(yàn)和多種編程風(fēng)格

3.2集成工具類IDE
PyCharm
Wing
PyDev & Eclipse
Visual Studio
Anaconda & Spyder
Canopy
3.2.1通用類型
Wing
它是公司維護(hù),工具收費(fèi)的;調(diào)試功能豐富;版本控制,版本同步;適合多人共同開發(fā)

Visual Studio & PTVS
它是微軟公司維護(hù),Win環(huán)境為主,調(diào)試功能豐富的一款工具

Eclipse & PyDev
它是開源IDE開發(fā)工具,需要具備一定的開發(fā)環(huán)境

PyCharm
社區(qū)版免費(fèi)簡(jiǎn)單,集成度高,適合較復(fù)雜工程

3.2.2科學(xué)計(jì)算&數(shù)據(jù)分析
Canopy
公司維護(hù),工收費(fèi);支持近500個(gè)第三方庫;適合科學(xué)計(jì)算領(lǐng)域應(yīng)用開發(fā)? ??? ??

Anaconda
開源免費(fèi);支持近800個(gè)第三方庫

四、Numpy
4.1維度
一組數(shù)據(jù)的組織形式
一維數(shù)據(jù);一維數(shù)據(jù)由對(duì)等關(guān)系的有序或無序數(shù)據(jù)構(gòu)成,采用線性方式組織。
二維數(shù)據(jù):二維數(shù)據(jù)由多個(gè)一維數(shù)據(jù)構(gòu)成,是一維數(shù)據(jù)的組合形式。
多維數(shù)據(jù):多維數(shù)據(jù)由一維或二維數(shù)據(jù)在新維度上擴(kuò)展形成。
高維數(shù)據(jù):高維數(shù)據(jù)僅利用最基本的二元關(guān)系展示數(shù)據(jù)間的復(fù)雜結(jié)構(gòu)
4.2數(shù)據(jù)維度的Python表示
一維數(shù)組:列表和集合類型

維數(shù)據(jù):列表類型
多維數(shù)據(jù):列表類型

高維數(shù)據(jù):字典類型或數(shù)據(jù)表示格式JSON、XML和YAML格式

4.3Numpy的數(shù)組對(duì)象:ndarray
NumPy
NumPy是一個(gè) 開源的Python科學(xué)計(jì)算基礎(chǔ)庫。
一個(gè)強(qiáng)大的N維數(shù)組對(duì)象ndarray
廣播功能函數(shù)
整合C/C++/Fortran代碼的工具
線性代數(shù)、傅里葉變換、隨機(jī)數(shù)生成等功能
NumPy是SciPy、Pandas等 數(shù)據(jù)處理或科學(xué)計(jì)算庫的基礎(chǔ)。
NumPy的引用
import numpy as np
N維數(shù)組對(duì)象: ndarray
數(shù)組對(duì)象可以去掉元素間運(yùn)算所需的循環(huán),使一維向量更像單個(gè)數(shù)據(jù)。
設(shè)置專門的數(shù)組對(duì)象,經(jīng)過優(yōu)化,可以提升這類應(yīng)用的運(yùn)算速度。
觀察:科學(xué)計(jì)算中,一個(gè)維度所有數(shù)據(jù)的類型往往相同。
數(shù)組對(duì)象采用相同的數(shù)據(jù)類型,有助于節(jié)省運(yùn)算和存儲(chǔ)空間。
ndarray是一個(gè)多維數(shù)組對(duì)象,由兩部分構(gòu)成:
實(shí)際的數(shù)據(jù)
描述這些數(shù)據(jù)的元數(shù)據(jù)(數(shù)據(jù)維度、數(shù)據(jù)類型等)
ndarray數(shù)組一般要求所有元素類型相同(同質(zhì)),數(shù)組下標(biāo)從0開始。
軸(axis):保存數(shù)據(jù)的維度
秩(rank):軸的數(shù)量
ndarray對(duì)象的屬性
? ??

ndarray的元素類型
對(duì)比: Python語法僅支持整數(shù)、浮點(diǎn)數(shù)和復(fù)數(shù)3種類型
科學(xué)計(jì)算涉及數(shù)據(jù)較多,對(duì)存儲(chǔ)和性能都有較高要求。
對(duì)元素類型精細(xì)定義,有助于NumPy合理使用存儲(chǔ)空間并優(yōu)化性能。
對(duì)元素類型精細(xì)定義,有助于程序員對(duì)程序規(guī)模有合理評(píng)估。
4.4ndarray數(shù)組的創(chuàng)建方法
從Python中的列表、元組等 類型創(chuàng)建ndarray數(shù)組
使用NumPy中函數(shù)創(chuàng)建ndarray數(shù)組,如: arange,ones, zeros等。

從字節(jié)流( raw bytes )中創(chuàng)建ndarray數(shù)組。
從文件中讀取特定格式,創(chuàng)建ndarray數(shù)組。
4.5ndarray數(shù)組的操作
索引:獲取數(shù)組中特定位置元素的過程
切片:獲取數(shù)組元素子集的過程
一維數(shù)組的索引和切片
與Python的列表類似
? ??

多維數(shù)組的索引和切片


4.6ndarray數(shù)組的運(yùn)算
數(shù)組與標(biāo)量之間的運(yùn)算作用于數(shù)組的每一個(gè)元素

4.7總結(jié)
數(shù)據(jù)的維度:一維、二維、多維、高維
ndarray類型屬性創(chuàng)建和變換
數(shù)組的索引和切片
數(shù)組的運(yùn)算:一元函數(shù)、二元函數(shù)
五、NumPy數(shù)據(jù)存取與函數(shù)
5.1保存CSV文件
np.savetxt(fname, array, fmt='%.18e', delimiter=None)
fname:文件、字符串或產(chǎn)生器,可以是.gz或.bz2的壓縮文件。
array:存人文件的數(shù)組。
fmt:寫入文件的格式,例如: %d %.2f %.18e。
delimiter:分割字符串,默認(rèn)是任何空格。

5.2寫入CSV文件
np.loadtxt(fname, dtype=np.float, delimiter=None,unpack=False)
fname:文件、字符串或產(chǎn)生器,可以是.gz或.bz2的壓縮文件。
dtype:數(shù)據(jù)類型,可選。
delimiter:分割字符串,默認(rèn)是任何空格。
unpack:如果True, 讀入屬性將分別寫入不同變量。


5.3CSV文件的局限性
CSV只能有效存儲(chǔ)一維和二維數(shù)組
np.savetxt() np.loadtxt()只能有效存取一維和二維數(shù)組
5.4多維數(shù)據(jù)的存取
a.tofile(firame, sep='format='%s')
fname:文件、字符串。
sep:數(shù)據(jù)分割字符串,如果是空串,寫人文件為二進(jìn)制。
format:寫人數(shù)據(jù)的格式。


5.5多維數(shù)組的讀取
ap.fromfile(fname, dtype=float, count=-1,sep='')
fname:文件、字符串。
dtype:讀取的數(shù)據(jù)類型。
count:讀入元素個(gè)數(shù),-1表示讀入整個(gè)文件。
sep:數(shù)據(jù)分割字符串,如果是空串,寫人文件為二進(jìn)制。
需要注意:
該方法需要讀取時(shí)知道存入文件時(shí)數(shù)組的維度和元素類型
a.tofileO和np.fromfile(需要配合使用
可以通過元數(shù)據(jù)文件來存儲(chǔ)額外信息
5.6NumPy的便捷文件存取
np.save(fname, array)或np.savez(fname, array)
fname:文件名,以.npy為擴(kuò)展名,壓縮擴(kuò)展名為.npz
array:數(shù)組變量
np.load(fname)
5.7NumPy的隨機(jī)函數(shù)
NumPy的隨機(jī)數(shù)函數(shù)子庫

np.random的隨機(jī)數(shù)函數(shù)


5.8NumPy的統(tǒng)計(jì)函數(shù)
NumPy直接提供的統(tǒng)計(jì)類函數(shù)

np.random的統(tǒng)計(jì)函數(shù)

5.9NumPy的梯度
np.random的梯度函數(shù)

梯度:連續(xù)值之間的變化率,即斜率。

5.10總結(jié)
5.10.1數(shù)據(jù)存取

5.10.1隨機(jī)函數(shù)

5.10.1統(tǒng)計(jì)函數(shù)

5.10.1梯度函數(shù)

六、圖像的手繪效果
6.1圖像庫
PIL庫:PIL, Python Image Library
PIL庫是一個(gè)具有強(qiáng)大圖像處理能力的第三方庫
在命令行下的安裝方法: pip install pillow
from PIL import Image
Image是PIL庫中代表一個(gè)圖像的類 (對(duì)象)

圖像是一個(gè)三維數(shù)組,維度分別是高度、寬度和像素RGB值。
6.2圖像的變換
讀入圖像后,獲得像素RGB值,修改后保存為新的文件。


6.3圖像的手繪效果實(shí)例分析
手繪效果的幾個(gè)特征:
黑白灰色
邊界線條較重
相同或相近色彩趨于白色
略有光源效果

6.4圖像的手繪效果實(shí)例
6.4.1梯度的重構(gòu)
利用像素之間的梯度值和虛擬深度值對(duì)圖像進(jìn)行重構(gòu)
根據(jù)灰度變化來模擬人類視覺的明暗程度

6.4.2光源效果
根據(jù)灰度變化來模擬人類視覺的遠(yuǎn)近程度

●設(shè)計(jì)一個(gè)位于圖像斜上方的虛擬光源
●光源相對(duì)于圖像的俯視角為Elevation方位角為Azimuth
●建立光源對(duì)個(gè)點(diǎn)梯度值的影響函數(shù)
●運(yùn)算出各點(diǎn)的新像素值

6.4.3梯度歸一化

6.4.4圖像生成


希望能夠給對(duì)此感興趣的小伙伴有所幫助。
需要完整PDF版本筆記的小伙伴在評(píng)論區(qū)留下郵箱即可
如果喜歡的話,請(qǐng)給小薈獻(xiàn)出一條龍,小薈心里暖融融!??!