Python數(shù)據(jù)分析與展示Numpy担平、Matplotlib

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

學(xué)習內(nèi)容

Numpy數(shù)據(jù)表示面褐、Matplotlib繪圖展哭、Pandas數(shù)據(jù)分析這三個庫

Anaconda IDE的使用

conda匪傍、Spyder役衡、IPython的使用

實例:圖像的手繪風格映挂、引力波的繪制柑船、房價趨勢分析亏拉、股市數(shù)據(jù)的分析


Anaconda IDE的使用

使用anaconda navigator 啟動

anaconda來源于conda(用于管理python的第三方包與python環(huán)境)其包含了conda及塘、Python與一批第三方的庫

編程工具 Spyder 包含了IPython(交互式命令行)
IPython中的笙僚?可以得到變量信息與函數(shù)信息肋层、%run命令可以運行python程序栋猖,在運行時會使用空的命令空間蒲拉、%magic可以顯示所有的魔術(shù)命令


image
![Uploading polar_331910.png . . .]
image ![Uploading polar_331910.png . . .]

數(shù)據(jù)的表示Numpy

數(shù)據(jù)的維度:一組數(shù)據(jù)的組織形式

Numpy 一個開源的科學(xué)計算庫,提供了一個強大的N維數(shù)組對象:ndarray辱姨,具有數(shù)學(xué)計算的功能

ndarray由實際的數(shù)據(jù)與描述數(shù)據(jù)的元數(shù)據(jù)兩部分組成,一般要求數(shù)據(jù)的類型相同替久。

生成ndarray:

  • np.array([[],[]]蚯根,dtype=np.float32)胀糜,也可以使用元組進行創(chuàng)建
  • np.arrange(n) 類似range()函數(shù)
  • np.ones(shape)教藻、np.zeros(shape)括堤、np.full(shape,val)根據(jù)元組shape生成一個全1讥电、全0恩敌、全val的ndarray數(shù)組
  • np.eye(n) 創(chuàng)建一個n維單位陣(以上均可以由dtype指定數(shù)據(jù)類型
  • np.ones_like(a)、np.zeros_like(a)抗碰、np.full_like(a,val) 由a給定形狀
  • np.linspace() 由起止數(shù)等間距地填充數(shù)據(jù),形成數(shù)組绽乔,類似于range弧蝇,但是給定的參數(shù)為start、end折砸、number
  • np.concatenate() 將兩個或多個數(shù)組合并成同一個數(shù)組

ndarray對象的屬性:

屬性 說明
.ndim 維度的數(shù)量
.shape ndarray的尺度
.size 對象中元素的個數(shù)
.dtype 對象元素類型
.itemsize 每個元素的大小看疗,以字節(jié)為單位

ndarray維度變換

  • .reshape(shape)不改變數(shù)組的元素,返回一個shape形狀的新的數(shù)組
  • resize(shape) 修改原數(shù)組
  • swapaxes(ax1,ax2) 將數(shù)組的n個維度中的兩個維度進行調(diào)換
  • flatten() 降維 不改變原數(shù)組

ndarray數(shù)組類型變換

new_a = a.astype(new_type)

ndarray轉(zhuǎn)為列表

list = a.tolist()

ndarray數(shù)組操作(索引與切片)

一維數(shù)組的索引與python類似睦授,切片a[1:4:2] 起始編號两芳、終止編號(不含)、步長

多維數(shù)組的索引:a[1,2,3]從最外層到最內(nèi)層
多維數(shù)組的切片:a[:去枷,1:3,:],a[:,:,::2]

ndarray數(shù)組的運算

標量運算等價于對每一個元素進行運算

Numpy中的一元函數(shù)

  • np.abs(x)、np.fabs(x)、np.sqrt(x)青抛、np.square(x)
  • np.log(x)、np.log10(x)
  • np.ceil(x)嘶居、np.floor(x)計算ceiling(不超過其的最大整數(shù)值)與floor(超過其最小整數(shù)值)
  • np.rint(x) 四舍五入值
  • np.modf(x) 以整數(shù)和小數(shù)兩個數(shù)組返回
  • np.cosh(x) ···
  • np.exp(x)佑吝、np.sign(x)
  • ···

Numpy中的二元函數(shù)

  • +-* / **
  • np.maximum(x,y)戈钢、np.minimum(x,y) 元素的最大薪铜、小值,生成新的數(shù)組
  • =帮掉、涩搓!=充边、>肘习、<仅仆、<=夏醉、>= 比較大小返回布爾型數(shù)組

CSV文件(Comma-Separated Value,逗號分隔值)

文件單行以逗號進行分隔,常見數(shù)據(jù)庫均可以讀入或到處CSV文件

np.savetxt(fname,array,fmt='%.18e',delimiter=None)
  • fname 文件名稱
  • array 要存入的數(shù)組
  • fmt 寫入文件的格式,如%d %0.2
  • delimiter 分隔字符串,默認為空格
np.loadtxt(fname,dtype=np.float,delimiter=None,unpack=False)
  • fname 文件名稱
  • dtype 數(shù)組元素格式
  • delimiter 分隔字符串飘蚯,默認為空格
  • unpack 默認為False庄涡,讀入數(shù)據(jù)存入一個變量

多維數(shù)組的存取

a.tofile(fid, sep="", format="%s")
  • fid : 文件名或者是打開的文件對象
  • sep : 數(shù)據(jù)分割字符串,空串則輸出二進制文件
  • format : 輸出格式
np.fromfile(file, dtype=float, count=-1, sep='')
  • count : int
    Number of items to read. -1 means all items
np.save(file, array)/np.savez(file, array)
np.load(fname)
  • 存為.npy或者.npz文件

Numpy隨機函數(shù)子庫np.random庫

  • rand(d0,d1,...,dn)根據(jù)d0-dn創(chuàng)建隨機數(shù)組缘厢,浮點數(shù)挖诸,[0,1)苞也,均勻分布
  • randn(d0,d1,...,dn) 正態(tài)分布
  • randint(low[,high,shape]) 隨機整數(shù)
  • seed(s) 隨機數(shù)種子
  • shuffle(a) 將第一軸進行重排列,改變數(shù)組
  • permutation(a) 由第一軸產(chǎn)生一個新的亂序數(shù)組逛裤,不改變數(shù)組
  • choice(a[,size,replace,pl]) 從一位數(shù)組a中以概率p抽取元素择克,形成size形狀新數(shù)組勺鸦,replace表示是否可以重用肾档,默認True
  • uniform()、normal瘫拣、poisson

Numpy的統(tǒng)計函數(shù)

  • .sum(a,axis = None) 給定軸的求和或所有求和
  • .mean(a,axis = None) 算數(shù)平均數(shù)
  • .average(a,axis = None,weights = None) 加權(quán)平均數(shù)
  • .std(a,axis = None) 標準差
  • .var(a,axis = None) 方差
  • .min(a) max(a)
  • argmin(a) argmax(a) 一維后的最小、大值的下標
  • unravel_index(index,shape) 根據(jù)shape將一維下標index轉(zhuǎn)為多維下標
  • ptp(a) 極差
  • median(a) 中位數(shù)
  • gradient(a) 計算數(shù)組的梯度 連續(xù)值之間的變化率

實例:圖像的手繪表示

圖像一般采用RGB表示主穗,三個通道取值都在0-255

Python中的PIL庫(Python Image Library)

安裝 pip install pillow
使用 from PIL import Image

圖像在計算機中的表示為一個二元矩陣架曹,每個矩陣元素為RGB值:(R,G,B) 每個通道為一個字節(jié),那么一個矩陣元素的大小就是3個字節(jié)(24二進制位)

# 打開圖像
im_array = np.array(Image.open('D:/test.jpg'))
# 保存到文件
im = Image.fromarray(im_array)
im.save(filename)

# 灰度變換
a = np.array(Image.open('D:/test.jpg').convert('L'))

手繪圖片:黑白灰色杏愤,邊界線條較重画舌,相同或者相近的顏色趨向于白色穷绵,略有光源效果

# -*- coding: utf-8 -*-
"""
圖像手繪風格實例代碼
"""


from PIL import Image
import numpy as np

a = np.array(Image.open('D:/leiding.jpg').convert('L')).astype('float')


depth = 10.
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_e1 = np.pi/2.2
vec_az = np.pi/4

dx = np.cos(vec_e1)*np.cos(vec_az)
dy = np.cos(vec_e1)*np.sin(vec_az)
dz = np.sin(vec_e1)

b = 255*(dx*uni_x+dy*uni_y+dz*uni_z)
b = b.clip(0,255)

im = Image.fromarray(b.astype('uint8'))

im.save('D:/handpaint.jpg')

 

Matplotlib庫

使用方法:

import matplotlib.pyplot as plt
plt.plot([3,1,4,5,2])
plt.ylabel('grade')
plt.show()

# 存為文件

plt.savefig('test',dpi = 600) #默認輸出為PNG 文件

plt運行結(jié)果.png

同樣也可以這樣繪制:


plt.plot([0,2,4,6,8],[3,1,4,5,2])


# 給出橫縱坐標的范圍 橫-1到10俩由,縱0到6
plt.axis([-1,10,0,6])

# 繪圖區(qū)域分割
plt.subPlot(nrows,ncols,plot_number) # 與matlab一樣毒嫡,標號從左到右,從上到下

# 也可以將逗號去掉采驻,比如plt.subplot(324)



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

  • x: X軸數(shù)據(jù)审胚,列表或者數(shù)組获茬,可選鲁僚,可組合使用
  • y: Y軸數(shù)據(jù)舵抹,列表或者數(shù)組
  • format_stirng: 控制輸出字符串峦朗,可選
    • 'b'/'g'/'#008000'/'0.8' 顏色控制字符
    • '-' 實線 '--' 破折線 '-.' 點劃線 ':' 虛線 '''' 無線條 曲線風格字符
    • '.' 點標記 ',' 像素標記 'o' 實心圈標記 'v' 倒三角標記 '^' 上三角標記 ...... 標記字符
  • **kwargs: 第二組或者更多組的(x,y,format_string)

plt中的文本顯示函數(shù)

  • plt.xlabel()饲做、plt.ylabel() 對軸加上標簽
  • plt.title() 增加文件頭
  • plt.text() 任意位置增加文本
    • plt.text(2,1,'str') 前兩個參數(shù)表示text出現(xiàn)范圍
  • plt.annotate() 增加帶箭頭的注釋文本
  • plt.grid() 顯示網(wǎng)格線

plt.subplot2grid(GridSpec,CurSpec,colspan=1,rowspan=1)

設(shè)定網(wǎng)格主胧,選中網(wǎng)格迄委,設(shè)計成不同大小的繪圖子區(qū)域

  • GridSpec 元組蚌吸,表示將區(qū)域分成什么樣子的子區(qū)域
  • CurSpec 元組汰翠,表示子區(qū)域的起始格子坐標
  • colspan龄坪、rowspan 表示子區(qū)域占用列、行數(shù)
    同樣复唤,此函數(shù)可以使用如下庫實現(xiàn):
import matplotlib.gridspec as grs

gs  = grs.GridSpec(3,3)
ax1 = plt.subplot(gs[0:])
ax2 = plt.subplot(gs[1,:-1])

pyplot基礎(chǔ)圖標函數(shù)

plot()函數(shù)健田、箱形圖函數(shù)boxplot()、條形圖函數(shù)bar()佛纫、橫向條形圖函數(shù)barh()妓局、極坐標圖函數(shù)polar()、餅圖pie()
功率譜密度圖函數(shù)psd()呈宇、譜圖specgram()好爬、X-Y相關(guān)性圖cohere()、散點圖scatter()甥啄、直方圖hist()存炮、步階圖step()、等值圖contour()蜈漓、垂直圖vlines()穆桂、柴火圖stem()、數(shù)據(jù)日期plot_date()

下面以代碼說明:

# -*- coding: utf-8 -*-
"""
Created on Tue Aug  1 14:07:25 2017

@author: Administrator
"""

import matplotlib.pyplot as plt


# 餅圖的標簽
labels = 'Frogs','Hogs','Dogs','Logs'

# 餅圖對應(yīng)的尺寸融虽,即所占比例
sizes = [15,30,45,10]

# 突出與突出的量
explode = (0,0.1,0,0)

# autopct顯示百分數(shù)的方式充尉、shadow陰影效果、startangele起始角度

plt.pie(sizes,explode=explode,labels=labels,autopct = '%1.1f%%',shadow = False,startangle = 90)


# 使得軸的度量成為一樣
plt.axis('equal')
plt.show()
pie.png
# -*- coding: utf-8 -*-
"""
Created on Tue Aug  1 15:39:08 2017

@author: Administrator
"""
# 繪制直方圖

import matplotlib.pyplot as plt
import numpy as np

np.random.seed(0)
mu,sigma = 100,20 #均值與標準差

a = np.random.normal(mu,sigma,size=100) # 正態(tài)分布


# a 給定數(shù)組 bin 表示直方的個數(shù)衣形,就是取值區(qū)間的劃分驼侠,縱軸表示為頻次/區(qū)間長度
# normed = 0 顯示頻次姿鸿,normed=1 顯示頻次/區(qū)間長度
# histtype 繪制類型 facecolor 繪制顏色

plt.hist(a,20,normed = 1,histtype = 'stepfilled',facecolor = 'b',alpha = 0.75)

plt.title('Histgram')

plt.savefig('D:/Histgram',dpi = 150)

plt.show()

Histgram.png
# -*- coding: utf-8 -*-
"""
Created on Tue Aug  1 15:48:07 2017

@author: Administrator
"""

# 極坐標圖的繪制
import matplotlib.pyplot as plt
import numpy as np

# 極坐標圖中的數(shù)據(jù)個數(shù)
N = 20

# 等分出20個不同的角度 0-360度
theta = np.linspace(0.0,2*np.pi,N,endpoint = False)

# 生成每個角度對應(yīng)的值
radii = 10*np.random.rand(N)

# 生成寬度值
width = np.pi/4*np.random.rand(N)


# 獲得繪制極坐標圖的子區(qū)域
ax = plt.subplot(111,projection = 'polar')

# 前三個參數(shù)對應(yīng) theta 從何地開始繪制 radii 從中心點繪制出來的長度,width 指繪圖區(qū)域的面積
bars = ax.bar(theta,radii,width=width,bottom=0.0)

for r,bar in zip(radii,bars):
    bar.set_facecolor(plt.cm.viridis(r/10.))
    bar.set_alpha(0.5)


plt.savefig('D:/polar',dpi = 150)

plt.show()
polar.png
# -*- coding: utf-8 -*-
"""
Created on Tue Aug  1 16:02:32 2017

@author: Administrator
"""

import numpy as np 
import matplotlib.pyplot as plt

fig,ax = plt.subplots()

ax.plot(10*np.random.randn(100),10*np.random.randn(100),'o')
ax.set_title('Simple Scatter')

plt.savefig('D:/Scatter',dpi = 150)

plt.show()
Scatter.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末倒源,一起剝皮案震驚了整個濱河市苛预,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌笋熬,老刑警劉巖热某,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異胳螟,居然都是意外死亡昔馋,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門糖耸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來秘遏,“玉大人,你說我怎么就攤上這事嘉竟“钗#” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵舍扰,是天一觀的道長倦蚪。 經(jīng)常有香客問我,道長边苹,這世上最難降的妖魔是什么陵且? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮个束,結(jié)果婚禮上慕购,老公的妹妹穿的比我還像新娘。我一直安慰自己播急,他們只是感情好,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布售睹。 她就那樣靜靜地躺著桩警,像睡著了一般。 火紅的嫁衣襯著肌膚如雪昌妹。 梳的紋絲不亂的頭發(fā)上捶枢,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天,我揣著相機與錄音飞崖,去河邊找鬼烂叔。 笑死,一個胖子當著我的面吹牛固歪,可吹牛的內(nèi)容都是我干的蒜鸡。 我是一名探鬼主播胯努,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼逢防!你這毒婦竟也來了叶沛?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤忘朝,失蹤者是張志新(化名)和其女友劉穎灰署,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體局嘁,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡溉箕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了悦昵。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肴茄。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖旱捧,靈堂內(nèi)的尸體忽然破棺而出独郎,到底是詐尸還是另有隱情,我是刑警寧澤枚赡,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布氓癌,位于F島的核電站,受9級特大地震影響贫橙,放射性物質(zhì)發(fā)生泄漏贪婉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一卢肃、第九天 我趴在偏房一處隱蔽的房頂上張望疲迂。 院中可真熱鬧,春花似錦莫湘、人聲如沸尤蒿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽腰池。三九已至,卻和暖如春忙芒,著一層夾襖步出監(jiān)牢的瞬間示弓,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工呵萨, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留奏属,地道東北人。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓潮峦,卻偏偏與公主長得像囱皿,于是被迫代替她去往敵國和親勇婴。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容