python在數(shù)據(jù)分析眉睹,科學(xué)計(jì)算方面有幾個很重要的庫享完,分別是pandas,numpy有额,matplotlib般又。
剛剛開始接觸彼绷,就把自己看的代碼貼上來。
demo1:使用matplotlib 畫一個圖
import matplotlib.pyplot as plt
#x,y 分別表示的是橫坐標(biāo)和縱坐標(biāo)
x = [2,3,4,5,6,7]
y = [1,2,1,2,1,2]
plt.plot(x,y)
plt.show()
demo1-1 繪制散點(diǎn)圖
#繪制散點(diǎn)圖
x=[1,2,3,4,5]
y=[4,5,6,7,8]
plt.scatter(x,y,color='r')
#添加標(biāo)題茴迁,很坐標(biāo)的解釋寄悯,縱坐標(biāo)的解釋
plt.title(" web traffic")
plt.xlabel("time")
plt.ylabel("hits/hours")
#自動調(diào)整圖像顯示
#plt.autoscale(tight=True)
plt.show()
繪圖的時候一個很重要的技能就是,給畫出來的圖或者是點(diǎn)加上顏色的屬性堕义。實(shí)現(xiàn)方式猜旬,如下:
plt.scatter(x,y,color='r')
散點(diǎn)圖 + 加上label
如果有10個點(diǎn),他們分別分成3類倦卖,把他們畫出來洒擦,每個類別是不同的顏色。
import matplotlib.pyplot as plt
x=range(0,10)
y=[ 2*(i**2) for i in x]
print (x)
print (y)
# 假設(shè)這些點(diǎn) 分成三類0~2
# 下面是10個點(diǎn)分別對應(yīng)的類型
label=[0,0,1,1,1,0,1,2,2,0]
plt.scatter(x,y,c=label)
plt.show()
另外一個例子
使用plt.figure定義一個圖像窗口:編號為3怕膛;大小為(8, 5). 使用plt.plot畫(x ,y2)曲線. 使用plt.plot畫(x ,y1)曲線熟嫩,曲線的顏色屬性(color)為紅色;曲線的寬度(linewidth)為1.0;曲線的類型(linestyle)為虛線. 使用plt.show顯示圖像.
plt.figure(num=3, figsize=(8, 5),)
plt.plot(x, y2)
plt.plot(x, y1, color='red', linewidth=1.0, linestyle='--')
plt.show()
指定圖的大小
plt.figure(figsize=(10, 5)) #指定比例
dpi表示的是像素褐捻,dpi越大掸茅,圖越大。
設(shè)置圖例
# set line syles
l1, = plt.plot(x, y1, label='linear line')
l2, = plt.plot(x, y2, color='red', linewidth=1.0, linestyle='--', label='square line') #下面這一行很重要柠逞,沒有的話昧狮,就沒有l(wèi)abel
# 參數(shù) loc='upper right' 表示圖例將添加在圖中的右上角.
plt.legend(loc='upper right')
畫子圖
表示將整個圖像窗口分為2行2列, 當(dāng)前位置為1 ; plt.subplot(2,2,1)
import matplotlib.pyplot as plt
plt.figure()
#表示將整個圖像窗口分為2行2列, 當(dāng)前位置為1.
# 也可以簡寫成為 plt.subplot(221)
plt.subplot(2,2,1)
plt.plot([0,1],[1,1])
plt.subplot(2,2,2)
plt.plot([0,1],[2,2])
plt.subplot(2,2,3)
plt.plot([0,1],[3,3])
plt.subplot(2,2,4)
plt.plot([0,1],[4,4])
plt.show()
"""
import matplotlib.pyplot as plt
plt.figure()
# 另一種寫法
ax1 = plt.subplot(2,2,1)
ax2 = plt.subplot(2,2,2)
ax3 =plt.subplot(2,2,3)
ax4 =plt.subplot(2,2,4)
ax1.plot([0,1],[1,1])
ax2.plot([0,1],[2,2])
ax3.plot([0,1],[3,3])
ax4.plot([0,1],[4,4])
plt.show()
"""
demo1-2 擬合數(shù)據(jù)
一般來說,原始數(shù)據(jù)都是單個的點(diǎn)板壮,大致上服從某種分布逗鸣,numpy提供了擬合數(shù)據(jù)的函數(shù),可以很方便的擬合好相應(yīng)的數(shù)據(jù)个束。對于開發(fā)者來說慕购,只需要選擇擬合的函數(shù),比如說使用一次函數(shù)來擬合茬底,使用字?jǐn)?shù)函數(shù)沪悲,使用泊松分布的函數(shù)來擬合等等。
x=[1,2,3,4,5,6,7,8,9,10]
def func(val):
return val**2+np.random.normal()
#這里只是寫法不同阱表,y2殿如,y3是相同的
#目的是產(chǎn)生符合y=x*x的數(shù)據(jù)
y2=[func(xi) for xi in x ]
y3=[func(x[i]) for i in range(10)]
plt.scatter(x,y2,color='r')
#多項(xiàng)式擬合
fp2=np.polyfit(x,y2,2)
fy=np.poly1d(fp2)
#f2 就是擬合的函數(shù)
print (fy)
#顯示在圖片上面,fx表示x的取值范圍
fx=np.linspace(0,x[-1],100)
plt.plot(fx,fy(fx),color='g')
plt.show()
改變橫縱坐標(biāo)的比例
In [14]: x=range(0,100)
In [15]: y=np.sin(x)
In [20]: plt.plot(x,y)
Out[20]: [<matplotlib.lines.Line2D at 0x2dfc53c8c50>]
In [21]: plt.show()
如果想讓自定義橫坐標(biāo)刻度最爬,那么可以按照如下的方式:
In [23]: new_tick=[0,20,40,60,80,100]
In [24]: plt.xticks(new_tick)
Out[24]:
([<matplotlib.axis.XTick at 0x2dfc3105710>,
<matplotlib.axis.XTick at 0x2dfc3100e80>,
<matplotlib.axis.XTick at 0x2dfc31114e0>,
<matplotlib.axis.XTick at 0x2dfc3283d30>,
<matplotlib.axis.XTick at 0x2dfc3289588>,
<matplotlib.axis.XTick at 0x2dfc3289da0>],
<a list of 6 Text xticklabel objects>)
In [25]: plt.plot(x,y)
Out[25]: [<matplotlib.lines.Line2D at 0x2dfc329b5f8>]
In [26]: plt.show()
# 參考:
# https://morvanzhou.github.io/tutorials/data-manipulation/plt/2-3-axis1/
demo 1-3 :繪制動圖
這個也是一個很有用的功能涉馁,比如說希望一個點(diǎn)一個點(diǎn)的出現(xiàn)在圖片上谦絮,而不是一次性的出現(xiàn)一個繪制好了的結(jié)果购啄。
#動態(tài)畫圖
#axis 指明了坐標(biāo)軸的范圍
plt.axis([0,20,0,20])
#打開交互模式,顯示圖片的時候卖丸,不再阻塞程序運(yùn)行
plt.ion()
for i in range(100):
y=np.random.random()
plt.autoscale()
plt.scatter(i,y)
plt.pause(0.01)
運(yùn)行結(jié)果:
demo2:使用pandas 讀取excel文件
前幾天在處理數(shù)據(jù)的時候糠悯,遇到這個問題帮坚。問題是:有一個excel文件妻往,里面存放的是某一個路口每分鐘通過的車流量。
現(xiàn)在要分析的是试和,車流量(vol)和時間的關(guān)系是什么讯泣?
import pandas as pd
#import numpy as np
import matplotlib.pyplot as plt
path="1.xls"
df=pd.read_excel(path)
#print (df.head())
#print (df['speed'])
#print (df['vol'])
#plt.plot(df['time'],df['vol'])
plt.plot(df['time'],df['vol'],'.')
plt.show()
""" # 測試代碼
print (df['speed'][1])
print (type(df['speed'][1]))
print (type (df['vol'][1]))
x=[]
y=[]
for i in range(0,10):
x.append(df['vol'][i])
y.append(df['speed'][i])
plt.plot(x,y)
plt.show()
"""
運(yùn)行結(jié)果:
車流量基本上服從泊松分布。
源碼:https://github.com/zhaozhengcoder/Python/tree/master/Data%20analysis