重慶分公司,新征程啟航
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊、服務(wù)器等服務(wù)
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊、服務(wù)器等服務(wù)
正態(tài)分布是高斯概率分布。高斯概率分布是反映中心極限定理原理的函數(shù),該定理指出當(dāng)隨機樣本足夠大時,總體樣本將趨向于期望值并且遠(yuǎn)離期望值的值將不太頻繁地出現(xiàn)。高斯積分是高斯函數(shù)在整條實數(shù)線上的定積分。這三個主題,高斯函數(shù)、高斯積分和高斯概率分布是這樣交織在一起的,所以我認(rèn)為最好嘗試一次性解決這三個主題(但是我錯了,這是本篇文章的不同主題)。本篇文章我們首先將研究高斯函數(shù)的一般定義是什么,然后將看一下高斯積分,其結(jié)果對于確定正態(tài)分布的歸一化常數(shù)是非常必要的。最后我們將使用收集的信息理解,推導(dǎo)出正態(tài)分布方程。
創(chuàng)新互聯(lián)是一家專業(yè)提供盱眙企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站制作、成都做網(wǎng)站、H5場景定制、小程序制作等業(yè)務(wù)。10年已為盱眙眾多企業(yè)、政府機構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設(shè)計公司優(yōu)惠進行中。
首先,讓我們了解高斯函數(shù)實際上是什么。高斯函數(shù)是將指數(shù)函數(shù) exp(x) 與凹二次函數(shù)(例如 -(ax^2+bx+c) 或 -(ax^2+bx) 或只是-ax^2組成的函數(shù)。結(jié)果是一系列呈現(xiàn)“鐘形曲線”的形狀的函數(shù)。
兩個高斯函數(shù)的圖。第一個高斯(綠色)的λ=1和a=1。第二個(橙色)λ=2和a=1.5。兩個函數(shù)都不是標(biāo)準(zhǔn)化的。也就是說,曲線下的面積不等于1。
大多數(shù)人都熟悉這類曲線是因為它們在概率和統(tǒng)計中被廣泛使用,尤其是作為正態(tài)分布隨機變量的概率密度函數(shù)。在這些情況下,函數(shù)具有的系數(shù)和參數(shù)既可以縮放“鐘形”的振幅,改變其標(biāo)準(zhǔn)差(寬度),又可以平移平均值,所有這一切都是在曲線下的面積進行歸一化(縮放鐘形,使曲線下的面積總是等于1)的同時進行的。結(jié)果是一個高斯函數(shù)包含了一大堆的參數(shù)來影響這些結(jié)果。
如果將其認(rèn)為是均值 = μ 且標(biāo)準(zhǔn)差 = σ 的正態(tài)分布方程。將其與高斯 λ exp(-ax^2) 的一般形式進行比較,我們可以看到:
前導(dǎo)系數(shù) λ 有時表示為 1/Z,其中 Z=√2πσ 2,正是這樣的一個結(jié)果將我們帶到了本文的主要觀點之一:√2πσ 2有時被稱為一個自變量的正態(tài)分布的歸一化常數(shù),而1/√2πσ2則被稱為歸一化常數(shù)。在這兩種情況下,公式中都有 π,它是從哪里來的?它通常與圓、徑向?qū)ΨQ和/或極坐標(biāo)相關(guān)聯(lián)。單個變量的函數(shù)如何以 π 作為其在前導(dǎo)系數(shù)中的歸一化參數(shù)之一呢?
可以參考我們以前的文章,里面有非常詳細(xì)的描述
不定積分 ∫ exp(x^2) dx 不可能用初等函數(shù)求解。有沒有任何積分方法可以用來求解不定積分?
可以計算定積分,如上所述,首先對高斯函數(shù)求平方從而在 x 和 y 中產(chǎn)生一個具有徑向?qū)ΨQ二維圖的兩個變量函數(shù)。這樣能夠?qū)⒅苯亲鴺?biāo)系轉(zhuǎn)換為極坐標(biāo),在此基礎(chǔ)上就可以使用更熟悉的積分方法(例如置換)進行積分。然后,簡單地取結(jié)果的平方根(因為我們在開始時對積分進行平方) 就得到了我們的答案,順便說一句,結(jié)果是是√π。
方法的第一步是對積分求平方——也就是說,我們將一維轉(zhuǎn)換為二維,這樣就可以使用多變量微積分的技術(shù)來求解積分
可以重寫為:
這兩個積分用x和y表示是等價的;所以它等同于x的單個積分的平方。因為變量x和y是獨立的,所以可以把它們移進或移出第二個積分符號,可以這樣寫:
如果你不熟悉如何解二重積分也不用擔(dān)心。只需先使用內(nèi)部變量進行積分得到單個積分。然后用左邊的變量和外面的變量積分。但現(xiàn)在還不需要這么做。這里需要注意的是當(dāng)我們對積分進行平方時,得到了一個二維的圖形化的徑向?qū)ΨQ的高斯函數(shù)。用x和y來表示積分e的指數(shù)是- (x 2+y 2)給了我們下一步應(yīng)該做什么的線索。
這里棘手的部分是,我們必須將直角坐標(biāo)下的二重積分轉(zhuǎn)換成極坐標(biāo)下的二重積分。
為了在極坐標(biāo)中對整個無限區(qū)域進行積分,我們首先對 exp(?r2) 相對于從 x=0 開始并延伸到無窮大的半徑 r 進行積分。結(jié)果是一個無限薄的楔形,看起來像我們原始一維高斯曲線的一半。然后我們圍繞旋轉(zhuǎn)軸 Z 軸旋轉(zhuǎn)楔形,并累積無限數(shù)量的這些極薄的楔形。也就是說——我們在 π 從 0 到 2π 時積分。
我們現(xiàn)在的二重積分看起來像這樣:
我們可以用 r^2 替換指數(shù)中的 ?(x 2+y 2),這要感謝畢達(dá)哥拉斯。但是我們?nèi)匀恍枰獙⑽覀兊奈⒎謴木匦无D(zhuǎn)換為極坐標(biāo)。
微分的轉(zhuǎn)換簡單的表示如下:
在任何情況下,我們的二重積分現(xiàn)在看起來像這樣:
添加適當(dāng)?shù)姆e分邊界:
如果我們設(shè)u=r^2,那么du=2r,我們可以寫成(對于內(nèi)積分)
然后求出外積分:
所以:
我們在下一節(jié)求解標(biāo)準(zhǔn)化常數(shù)時,這個結(jié)果很重要。
現(xiàn)在我們有了推導(dǎo)正態(tài)分布函數(shù)的所有前提。下面將分兩步來做:首先確定我們需要的概率密度函數(shù)。這意味著以λ為單位重新轉(zhuǎn)換-a-產(chǎn)生的函數(shù),無論為λ選擇什么值,曲線下的面積總是1。然后用隨機變量的方差σ^2來轉(zhuǎn)換λ。對整個實數(shù)線上的方差進行積分 從而得到我們在前導(dǎo)系數(shù) √2πσ^2 中需要歸一化常數(shù)的項,也是我們在分母中需要的項指數(shù) 2σ^2。我們將使用分部積分來求解方差積分。
我們將從廣義高斯函數(shù)f(x)=λ exp(?ax^2)開始,正態(tài)分布下的面積必須等于1所以我們首先設(shè)置廣義高斯函數(shù)的值,對整個實數(shù)線積分等于1
這里將 -a- 替換為 a^2 稍微修改了高斯分布。為什么要這樣做?因為它可以使用 換元積分 U-substitution 來解決這個積分。為什么我們可以這樣做?因為 -a- 是一個任意常數(shù),所以a^2 也只是一個任意常數(shù),可以使用 U-substitution 求解。讓 u=ax 和 du=a dx 這意味著 dx=du/a, 由于 λ 和 1/a 是常數(shù),我們可以將它們移到積分符號之外,得到:
我們從上面關(guān)于高斯積分的討論中知道,右邊積分的值等于√π。這樣就可以改成:
求解 -a- 可以這樣寫:
根據(jù)已經(jīng)發(fā)現(xiàn)的λ 和 -a- 之間的關(guān)系,修改后的高斯下的面積總是等于 1 也是必須的,所以我們可以進一步修改,用 πλ^2 代替 a^2 并寫:
無論 λ 的值如何,該曲線下的面積始終為 1。這是我們的概率密度函數(shù)。
在獲得歸一化概率分布函數(shù)之前還需要做一件事:必須將 λ 重寫為隨機變量方差 σ^2 的函數(shù)。這將涉及對整個實數(shù)線的方差表達(dá)式進行積分所以需要采用按分部積分來完成此操作。
如果給定一個概率密度函數(shù) f(x) 和一個均值 μ,則方差定義為從均值平方(x - μ)^2的偏差乘以整個實數(shù)線的概率密度函數(shù)f(x)的積分:
假設(shè)μ=0,因為已經(jīng)有了概率密度函數(shù)h(x),所以可以寫成
用分部積分法求解這個積分有:
第一項歸零是因為指數(shù)中的x^2項比前一項分子中的- x項趨近于∞的速度快得多所以我們得到
右邊的被積函數(shù)是概率密度函數(shù),已經(jīng)知道當(dāng)對整個實數(shù)線進行積分時它的值是1 :
求解 λ 得到:
將 λ 的 1/√2πσ^2 代入我們的修改后的公式(即我們的概率密度函數(shù)),我們得到:
剩下要做的就是將平均值 μ 放入指數(shù)的分子中,以便可以根據(jù) μ 的值沿 x 軸平移圖形:
這樣就完成了方程推導(dǎo)
作者 :Manin Bocss
我有一個以秒為單位返回信息的函數(shù),但我需要以小時:分鐘:秒存儲該信息。
有沒有簡單的方法可以在Python中將秒轉(zhuǎn)換為這種格式?
可在如何在Python中將H:MM:SS時間字符串轉(zhuǎn)換為秒的方法中找到此問題的反義詞。
您可以使用datetime.timedelta函數(shù):
1
2
3 import datetime
str(datetime.timedelta(seconds=666))
'0:11:06'
恕我直言,這是最好的方法,因為您隨后可以對timedelta和任何datetime對象使用算術(shù)運算。
這可以工作多天:str(datetime.timedelta(seconds=60*60*24+1)) = 1 day, 0:00:01
str(datetime.timedelta(seconds=round(666666.55)))正確顯示天;限制小數(shù)秒。
timedelta不是溢出安全的,并且不能正確執(zhí)行數(shù)學(xué)運算,例如str(timedelta(hours=8) - timedelta(hours=10))結(jié)果為-1 day, 22:00:00,基于整數(shù)的解決方案正是針對需要-02:00:00的情況的。
+1。這個答案很容易修改。例如,如果要在打印時忽略某個字段,請使用以下命令:stackoverflow.com/questions/7999935/
要顯示2位數(shù)小時,只需添加zfill(8)。 str(datetime.timedelta(seconds=666)).zfill(8) 00:11:06
通過使用divmod()函數(shù),該函數(shù)僅進行一次除法以同時產(chǎn)生商和余數(shù),您只需執(zhí)行兩個數(shù)學(xué)運算就可以非常快速地得到結(jié)果:
1
2m, s = divmod(seconds, 60)
h, m = divmod(m, 60)
然后使用字符串格式將結(jié)果轉(zhuǎn)換為所需的輸出:
1
2print('{:d}:{:02d}:{:02d}'.format(h, m, s)) # Python 3
print(f'{h:d}:{m:02d}:{s:02d}') # Python 3.6+
如果您更喜歡運算符而不是函數(shù),請使用模。例如(僅分鐘/秒):%d:%02dmn % (seconds 60, seconds % 60)
您可以將其擴展到幾天:d, h = divmod(h, 24)。
@MarkRansom:然后到m, d = divmod(m, 31)個月。糟糕,您不能。更糟糕的是,如果leap秒進入游戲,您的代碼將是錯誤的。長話短說:使用timedelta并不要弄亂日歷,它會咬你。
@Tibo timedelta處理leap秒嗎?我懷疑不是。在許多應(yīng)用程序中,這種簡單的數(shù)學(xué)運算綽綽有余。
@MarkRansom str(timedelta(hours=8) - timedelta(hours=10))結(jié)果是-1天,22:00:00所以... idk如果它適用于leap秒,但不適用于負(fù)數(shù)。
如何對熊貓數(shù)據(jù)框中的列執(zhí)行此操作?
@Tibo:不幸的是,您不能,因為time(0, 0) + timedelta(anything)是TypeError。您可以使用datetime而不是time,然后使用.time()方法進行轉(zhuǎn)換,但是如果該方法意外溢出,它將無提示地執(zhí)行"錯誤操作"。
@Tibo的注釋的至少第一部分應(yīng)作為注釋附加到答案。盡管我同意這是簡單數(shù)學(xué)的一種很好的方法,并且可以完美地計算持續(xù)到幾天的持續(xù)時間,但它會失敗,即幾個月。可能需要額外注意的是,不應(yīng)將這種解決方案與用于處理datetime對象的任何函數(shù)的替代方法混淆。
它以小函數(shù)def s2hhmmss(s): m, s = divmod(s, 60) h, m = divmod(m, 60) return str(int(h)).zfill(2) + : + str(int(m)).zfill(2) + : + str(int(s)).zfill(2)的形式出現(xiàn)
對于那些討論日期時間的人:請注意,最初的問題是不希望將小時數(shù)分解為更大的時間單位,因此,如果創(chuàng)建的時間單位大于小時數(shù),則需要手動將其減少為整數(shù)小時。
為了使用格式更容易格式化:timestamp = {0:02}:{1:02}:{2:02}.format(h, m, s)
我很難說出這種簡單的方法(至少我不記得語法),但是可以使用time.strftime,它提供了對格式的更多控制:
1
2
3
4
5
6
7
8from time import strftime
from time import gmtime
strftime("%H:%M:%S", gmtime(666))
'00:11:06'
strftime("%H:%M:%S", gmtime(60*60*24))
'00:00:00'
gmtime用于將秒轉(zhuǎn)換為strftime()所需的特殊元組格式。
Note: Truncates after 23:59:59
好吧,答案實際上是在這里提供的-stackoverflow.com/questions/1384406/
不幸的是,此方法從1開始測量天數(shù),因此它不能用來表示時間增量,因此這是一個等待發(fā)生的事故。例如,對于time.strftime(%d %H:%M:%S, time.gmtime(1)) = 1天,0:00:01。
使用datetime:
使用':08'格式:
1
2
3
4
5
6
7
8
9
10from datetime import timedelta
"{:08}".format(str(timedelta(seconds=66)))
# Result: '00:01:06'
"{:08}".format(str(timedelta(seconds=666777)))
# Result: '7 days, 17:12:57'
"{:08}".format(str(timedelta(seconds=60*60*49+109)))
# Result: '2 days, 1:01:49'
沒有':08'格式:
1
2
3
4
5
6
7
8"{}".format(str(timedelta(seconds=66)))
# Result: '00:01:06'
"{}".format(str(timedelta(seconds=666777)))
# Result: '7 days, 17:12:57'
"{}".format(str(timedelta(seconds=60*60*49+109)))
# Result: '2 days, 1:01:49'
使用time:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17from time import gmtime
from time import strftime
# NOTE: The following resets if it goes over 23:59:59!
strftime("%H:%M:%S", gmtime(125))
# Result: '00:02:05'
strftime("%H:%M:%S", gmtime(60*60*24-1))
# Result: '23:59:59'
strftime("%H:%M:%S", gmtime(60*60*24))
# Result: '00:00:00'
strftime("%H:%M:%S", gmtime(666777))
# Result: '17:12:57'
# Wrong
如果增量少于一秒鐘,它將失敗:"{:08}".format(timedelta(milliseconds=66)) 0:00:00.066000
對于其他所有人:without :08:示例缺少前導(dǎo)0。{:08}零填充到左邊的8個零。
在python 3.5.2中,我收到TypeError。我正在格式化time.time()-start變量。有見識嗎? TypeError: non-empty format string passed to object.__format__
我嘗試使用datetime.now()而不是time.time()來生成我的timedelta對象,并且遇到相同的錯誤。
@ medley56使用Python3時,如果要使用諸如08:"{:08}".format(str(datetime.timedelta(seconds=666777)))之類的格式,則需要使用str()。 檢查此答案以獲取更多信息。
這是我的快速技巧:
1
2
3
4from humanfriendly import format_timespan
secondsPassed = 1302
format_timespan(secondsPassed)
# '21 minutes and 42 seconds'
有關(guān)更多信息,請訪問:
如果需要獲取datetime.time值,則可以使用以下技巧:
1my_time = (datetime(1970,1,1) + timedelta(seconds=my_seconds)).time()
您不能將timedelta添加到time,但是可以將其添加到datetime。
UPD:同一技術(shù)的另一種變化:
1my_time = (datetime.fromordinal(1) + timedelta(seconds=my_seconds)).time()
可以使用大于0的任何數(shù)字來代替1。在這里,我們使用datetime.fromordinal總是返回datetime對象且time組件為零的事實。
這就是我的方法。
1
2
3
4
5
6
7
8
9
10
11
12
13
14def sec2time(sec, n_msec=3):
''' Convert seconds to 'D days, HH:MM:SS.FFF' '''
if hasattr(sec,'__len__'):
return [sec2time(s) for s in sec]
m, s = divmod(sec, 60)
h, m = divmod(m, 60)
d, h = divmod(h, 24)
if n_msec 0:
pattern = '%%02d:%%02d:%%0%d.%df' % (n_msec+3, n_msec)
else:
pattern = r'%02d:%02d:%02d'
if d == 0:
return pattern % (h, m, s)
return ('%d days, ' + pattern) % (d, h, m, s)
一些例子:
1
2
3
4
5
6
7
8
9
10
11$ sec2time(10, 3)
Out: '00:00:10.000'
$ sec2time(1234567.8910, 0)
Out: '14 days, 06:56:07'
$ sec2time(1234567.8910, 4)
Out: '14 days, 06:56:07.8910'
$ sec2time([12, 345678.9], 3)
Out: ['00:00:12.000', '4 days, 00:01:18.900']
與上面的答案相比,這有什么好處?str(datetime.timedelta(seconds=666))
@RiazRizvi為666.0和666.1值提供一致的字符串長度(以微秒為單位)。
如果需要訪問浮點數(shù)的小時,分??鐘和秒,dateutil.relativedelta也很方便。 datetime.timedelta沒有提供類似的接口。
1
2
3
4
5from dateutil.relativedelta import relativedelta
rt = relativedelta(seconds=5440)
print(rt.seconds)
print('{:02d}:{:02d}:{:02d}'.format(
int(rt.hours), int(rt.minutes), int(rt.seconds)))
打印
1
240.0
01:30:40
我從您那里得到了不同的輸出,這讓我覺得您有錯字。 您可能打算使用seconds=5440而不是seconds=5540。 不過,我喜歡您的回答!
感謝您指出,@ J-L,現(xiàn)在已修復(fù)。
以下設(shè)置對我有用。
1
2
3
4
5
6
7
8
9
10
11
12
13def sec_to_hours(seconds):
a=str(seconds//3600)
b=str((seconds%3600)//60)
c=str((seconds%3600)%60)
d=["{} hours {} mins {} seconds".format(a, b, c)]
return d
print(sec_to_hours(10000) ['2 on
白噪聲是時間序列預(yù)測中的一個重要概念。如果一個時間序列是白噪聲,它是一個隨機數(shù)序列,不能預(yù)測。如果預(yù)測誤差不是白噪聲,它暗示了預(yù)測模型仍有改進空間。
什么是白噪聲時間序列?
時間序列可能是白噪聲。時間序列如果變量是獨立的且恒等分布的均值為0,那么它是白噪聲。這意味著所有變量具有相同的方差 (sigma^2),并且每個值與該系列中的所有其他值具有零相關(guān)。
如果序列中的變量被高斯分布繪制,則該系列稱為高斯白噪聲。
為什么這么重要?
白噪聲是時間序列分析和預(yù)測中的一個重要的概念。
重要的兩個主要原因為:
1.可預(yù)測性:如果你的時間序列是白噪聲,那么根據(jù)定義它是隨機的。你無法對它合理的建模并進行預(yù)測。
2.模型診斷:時間序列上一系列誤差的預(yù)測模型最好是白噪聲。
模型診斷是時間序列預(yù)測的重要領(lǐng)域。
時間序列數(shù)據(jù)在潛在的因素產(chǎn)生的信號上被預(yù)測,它包含一些白噪聲成分。
例如:
y(t)= signal(t)+ noise(t)
通過時間序列預(yù)測模型進行預(yù)測,可以對其進行收集和分析。在理想情況下,預(yù)測誤差應(yīng)該是白噪聲。
當(dāng)預(yù)測誤差為白噪聲時,意味著時間序列中的所有信號已全部被模型利用進行預(yù)測。剩下的就是無法建模的隨機波動。
模型預(yù)測的信號不是白噪聲則表明可以進一步對預(yù)測模型改進。
你的時間序列白噪音嗎?
你的時間序列如果符合下面條件則不是白噪聲:
你的序列均值為零嗎?
方差隨時間變化嗎?
值與延遲值相關(guān)嗎?
你可以用一些工具來檢查你的時間序列是否為白噪音:
創(chuàng)建一個折線圖。檢查總體特征,如變化的平均值,方差或延遲變量之間的明顯關(guān)系。
計算匯總統(tǒng)計。對照序列中有意義的連續(xù)塊的均值和方差,檢查整個序列的均值和方差(如年、月、日)。
創(chuàng)建一個自相關(guān)的圖。檢查延遲變量之間的總體相關(guān)性。
白噪聲時間序列的例子
在本節(jié)中,我們將使用Python創(chuàng)建一個高斯白噪聲序列并做一些檢查。它有助于在實踐中創(chuàng)建和評估白噪聲時間序列。它將提供參考框架和示例圖并且使用和比較自己的時間序列項目的統(tǒng)計測試,以檢查它們是否為白噪聲
首先,我們可以使用隨機模塊的gauss()函數(shù)創(chuàng)建一個1,000個隨機高斯變量的列表。
我們將從高斯分布提取變量:平均值(mu)0.0和標(biāo)準(zhǔn)偏差(sigma)1.0。
一旦創(chuàng)建,為方便起見,我們可以在Pandas序列中打包這個列表。
from randomimport gaussfrom randomimport seedfrom pandasimport Seriesfrom pandas.tools.plottingimport autocorrelation_plot
# seed random number generatorseed(1)# create white noise series
series= [gauss(0.0,1.0)for iin range(1000)]series= Series(series)
接下來,我們可以計算和打印一些匯總統(tǒng)計數(shù)據(jù),包含序列的平均值和標(biāo)準(zhǔn)偏差。
# summary statsprint(series.describe())
鑒于我們在繪制隨機數(shù)時定義了平均值和標(biāo)準(zhǔn)偏差,所以應(yīng)該不會有意外。
count ? 1000.000000mean ? ? ?-0.013222std ? ? ? ?1.003685min ? ? ? ?-2.96121425% ? ? ? ?-0.68419250% ? ? ? ?-0.01093475% ? ? ? ? 0.703915max ? ? ? ? 2.737260
我們可以看到平均值接近0.0,標(biāo)準(zhǔn)偏差接近1.0。考慮到樣本較小預(yù)測會有些誤差。
如果我們有更多的數(shù)據(jù),將序列分成兩半計算和比較每一半的匯總統(tǒng)計可能會更有趣。我們認(rèn)為每個子系列的平均值和標(biāo)準(zhǔn)差都會相似。
現(xiàn)在我們可以創(chuàng)建一些序列的線條圖。
# line plot
series.plot()pyplot.show()
我們可以看到,這個序列似乎是隨機的。
我們還可以創(chuàng)建直方圖,并確認(rèn)分布是高斯分布。
# histogram plot
series.hist()pyplot.show()
事實上,直方圖顯示了典型的鐘形曲線。
最后,我們可以創(chuàng)建一個自相關(guān)圖并檢查延遲變量的所有自相關(guān)。
# autocorrelationautocorrelation_plot(series)pyplot.show()
自相關(guān)圖沒有顯示任何顯著的自相關(guān)特征。在峰值時可信度達(dá)在95%和99%,但這只是統(tǒng)計的偶然情況。
為了完整性,下面提供了完整的代碼清單。
from randomimport gaussfrom randomimport seedfrom pandasimport Seriesfrom pandas.tools.plottingimport autocorrelation_plotfrom matplotlibimport pyplot
# seed random number generatorseed(1)# create white noise series
series= [gauss(0.0,1.0)for iin range(1000)]series= Series(series)# summary statsprint(series.describe())# line plot
series.plot()pyplot.show()# histogram plot
series.hist()pyplot.show()# autocorrelationautocorrelation_plot(series)pyplot.show()
原文:網(wǎng)頁鏈接
Turtle庫是Python語言中一個很流行的繪制圖像的函數(shù)庫,想象一個小烏龜,在一個橫軸為x、縱軸為y的坐標(biāo)系原點,(0,0)位置開始,它根據(jù)一組函數(shù)指令的控制,在這個平面坐標(biāo)系中移動,從而在它爬行的路徑上繪制了圖形。
畫布就是turtle為我們展開用于繪圖區(qū)域,我們可以設(shè)置它的大小和初始位置。
設(shè)置畫布大小
turtle.screensize(canvwidth=None, canvheight=None, bg=None),參數(shù)分別為畫布的寬(單位像素), 高, 背景顏色。
如:turtle.screensize(800,600, "green")
turtle.screensize() #返回默認(rèn)大小(400, 300)
turtle.setup(width=0.5, height=0.75, startx=None, starty=None),參數(shù):width, height: 輸入寬和高為整數(shù)時, 表示像素; 為小數(shù)時, 表示占據(jù)電腦屏幕的比例,(startx, starty): 這一坐標(biāo)表示矩形窗口左上角頂點的位置, 如果為空,則窗口位于屏幕中心。
如:turtle.setup(width=0.6,height=0.6)
turtle.setup(width=800,height=800, startx=100, starty=100)
2.1 畫筆的狀態(tài)
在畫布上,默認(rèn)有一個坐標(biāo)原點為畫布中心的坐標(biāo)軸,坐標(biāo)原點上有一只面朝x軸正方向小烏龜。這里我們描述小烏龜時使用了兩個詞語:坐標(biāo)原點(位置),面朝x軸正方向(方向), turtle繪圖中,就是使用位置方向描述小烏龜(畫筆)的狀態(tài)。
2.2 畫筆的屬性
畫筆(畫筆的屬性,顏色、畫線的寬度等)
1) turtle.pensize():設(shè)置畫筆的寬度;
2) turtle.pencolor():沒有參數(shù)傳入,返回當(dāng)前畫筆顏色,傳入?yún)?shù)設(shè)置畫筆顏色,可以是字符串如"green", "red",也可以是RGB 3元組。
3) turtle.speed(speed):設(shè)置畫筆移動速度,畫筆繪制的速度范圍[0,10]整數(shù),數(shù)字越大越快。
2.3 繪圖命令
操縱海龜繪圖有著許多的命令,這些命令可以劃分為3種:一種為運動命令,一種為畫筆控制命令,還有一種是全局控制命令。
(1) 畫筆運動命令
(2) 畫筆控制命令
(3) 全局控制命令
(4) 其他命令
3. 命令詳解
3.1 turtle.circle(radius, extent=None, steps=None)
描述:以給定半徑畫圓
參數(shù):
radius(半徑):半徑為正(負(fù)),表示圓心在畫筆的左邊(右邊)畫圓;
extent(弧度) (optional);
steps (optional) (做半徑為radius的圓的內(nèi)切正多邊形,多邊形邊數(shù)為steps)。
舉例:
circle(50) # 整圓;
circle(50,steps=3) # 三角形;
circle(120, 180) # 半圓
實例:
1、太陽花
2、五角星
3、時鐘程序