from random import randint
class die:
'''表示乙個骰子的類'''
def __init__(self,num_sides=6):
'''骰子預設為6面'''
self.num_sides=num_sides
def roll(self):
'''返回乙個位於1和骰子面數之間的隨機值'''
return randint(1,self.num_sides)
在類die中定義了方法_init__(),該方法接受乙個可選引數;在該類中,如果沒有指定的實參值,將預設骰子的面數為6,num_sides可用於指定骰子的面數;
類die中還定義了另乙個方法roll(),該方法使用函式randint()來返回乙個位於1和骰子面數之間的隨機數,這個函式可能是起始值1、終止值num_sides或者位於1和num_sides值之間的任何整數(1~6)。
(三)擲骰子
在使用die類建立圖表之前,我們先來擲骰子d6(擁有6面的骰子):
#擲骰子
from die import die
#建立乙個d6(骰子有6面)
die=die()
#擲幾次骰子並將結果儲存在乙個列表中
results=
for roll_num in range(100):
result=die.roll()
print(results)
**行die=die()建立了die例項,面數為預設值6;
**行for roll_num in range(100)是擲骰子100次,並將結果儲存在results中。
執行**結果展示:
>>>
==== restart: c:\users\12184\desktop\python_work\15_生成資料\die_visual - 副本.py ====
[6, 2, 4, 3, 4, 6, 3, 4, 2, 2, 2, 1, 1, 1, 2, 4, 2, 5, 2, 4, 5, 6, 5, 6, 6, 2, 2, 4, 3, 4, 6, 6, 1, 1, 4, 4, 3, 6, 4, 1, 1, 4, 2, 5, 6, 4, 5, 2, 5, 4, 1, 3, 3, 3, 6, 5, 4, 5, 1, 5, 4, 1, 1, 4, 2, 4, 1, 1, 2, 3, 6, 3, 5, 6, 1, 5, 4, 5, 6, 1, 3, 1, 5, 4, 2, 5, 3, 2, 6, 1, 3, 3, 3, 5, 2, 2, 1, 4, 3, 5]
>>>
通過檢視結果,見到的所有值都位於1~6,因此die類沒問題。
(四)分析結果
分析擲骰子(d6)的結果,計算每個點數出現的次數:
#擲骰子
#分析結果
from die import die
#建立乙個d6(骰子有6面)
die=die()
#擲幾次骰子並將結果儲存在乙個列表中
results=
for roll_num in range(1000):
result=die.roll()
#分析結果
frequencies=
for value in range (1,die.num_sides+1):
frequency=results.count(value)
print(frequencies)
>>>
== restart: c:\users\12184\desktop\python_work\15_生成資料\die_visual - 副本 (2).py ==
[158, 162, 171, 176, 170, 163]
>>>
(五)繪製直方圖
有了頻率列表可進行直方圖的繪製(直方圖可指出各種結果出現的頻率):
from plotly.graph_objs import bar,layout
from plotly import offline
from die import die
#建立乙個d6(骰子有6面)
die=die()
#擲幾次骰子並將結果儲存在乙個列表中
results=
for roll_num in range(1000):
result=die.roll()
#分析結果
frequencies=
for value in range (1,die.num_sides+1):
frequency=results.count(value)
#對結果進行視覺化
x_values=list(range(1,die.num_sides+1))
data=[bar(x=x_values,y=frequencies)]
x_xaxis_config=
y_yaxis_config=
my_layout=layout(title='擲乙個6面骰子1000次的結果',xaxis=x_xaxis_config,yaxis=y_yaxis_config)
offline.plot(,filename='d6.html')
**行x_values=list(range(1,die.num_sides+1))是我們將可能出現的點數(1~6)儲存在x_values列表中,plotly不能直接接受函式range()的結果,因此需要使用函式list()將其轉換為列表;**行data=[bar(x=x_values,y=frequencies)]中plotly類bar()表示用於繪製條形圖的資料集,需要乙個儲存x值的列表和乙個儲存y值的列表。類layout()返回乙個指定圖示布局和配置的物件,這裡設定了圖表名稱,並傳入了x軸和y軸的配置字典;
**行offline.plot(,filename=『d6.html』)中是為了生成圖表,我們呼叫了函式offline(),這個函式需要乙個包含資料和布局物件的字典,還接受了乙個檔名,指定要將圖表儲存到**。
執行**結果展示:
需要指出一點:plotly讓圖表具有互動性,當使用滑鼠指向該圖表中的任意條形,能看到與之相關聯的資料。
資料視覺化 使用pygal模擬擲骰子
die類模擬擲骰子 同時擲兩個面數不同的骰子,乙個六面,乙個10面,統計兩點數之和的個數繪圖統計 同時擲兩個面數不同的骰子 import pygal 建立乙個d6和乙個d10 die 1 die die 2 die 10 擲骰子多次,並將結果儲存在乙個列表中 results for roll num...
資料視覺化 什麼是資料視覺化
資料對應的英文單詞是data,從資訊獲取的角度看,資料是對目標觀察和記錄的結果,是現實世界中的時間 地點 事件 其他物件或概念的描述。不同學者對資料的作用也給出不同的定義,大致分為以下3類 視覺化對應的兩個英文單詞 visualize和visualization。visualize是動詞,描述 生成...
資料視覺化
資料視覺化主要旨在借助於圖形化手段,清晰有效地傳達與溝通資訊。但是,這並不就意味著資料視覺化就一定因為要實現其功能用途而令人感到枯燥乏味,或者是為了看上去絢麗多彩而顯得極端複雜。為了有效地傳達思想概念,美學形式與功能需要齊頭並進,通過直觀地傳達關鍵的方面與特徵,從而實現對於相當稀疏而又複雜的 資料集...