Data:2020/4/8
主題:模擬實現擲骰子數據分析
編譯環境:pycharm
庫:pygal
說明:
code 1:創建一個擲骰子類對象,類方法獲得擲骰子隨機數1-6,默認6個面,模擬20次將結果(每次點數、每面出現的頻次)打印。
code 2:對code代碼的擴展,只要是為了將獲取的數據圖形可視化,而不僅僅只是將數據打印出來。(顯示類型:直方圖、百分比圖
圓環圖,水平直方圖、折線圖)
注意:這里我只生成一個文件:'die_visual.svg',所以現在這段代碼2,生成圖形是最后一次更新的數據圖形,你們再做的時候,如果同
時查看各種圖形顯示,可以生成不同的.svg文件。
#----------------------------------------------------------------------------------------------------------------
code 1:
import pygal
from random import randint
class Die(): #表示一個擲篩子的類
def __init__(self, num_sides =6):
self.num_sides = num_sides
def roll(self):
return randint(1, self.num_sides) #返回值:1-6之間的隨機數(任何整數)
die =Die() #實例化
results = []
for roll_num in range(20): #含義:從0-20依次取值,取20次,因此執行20次賦值
result = die.roll()
results.append(result)
print(results)
frequencies = []
for value in range(1,die.num_sides+1): #現在值得范圍1-6
frequency = results.count(value) #計算列表中value出現的次數
frequencies.append(frequency) #將次數添加到列表中
print(frequencies)
#--------------------------------------------------------
結果:
[3, 6, 5, 6, 1, 6, 4, 3, 1, 5, 2, 3, 2, 5, 3, 6, 1, 2, 6, 6] #20次模擬出現的點數值
[3, 3, 4, 1, 3, 6]
#點數依次出現的次數
#--------------------------------------------------------
#code 2:
import pygal
from pygal import * #導入模塊中的所有類
from random import randint
class Die(): #表示一個擲篩子的類
def __init__(self, num_sides =6):
self.num_sides = num_sides
def roll(self):
return randint(1, self.num_sides) #調用庫randint()方法;返回值:1-6之間的隨機數
die =Die() #實例化
results = []
for roll_num in range(100): #含義:從0-100依次取值,取100次,因此執行100次賦值
result = die.roll()
results.append(result)
#print(results) #打印每次隨機數值
frequencies = []
for value in range(1,die.num_sides+1): #現在值得范圍1-6
frequency = results.count(value) #計算列表中value出現的次數
frequencies.append(frequency) #將次數添加到列表中
print(frequencies) #打印頻次次數
hist = pygal.Bar() #對結果可視化
hist.title = "擲骰子100次每面出現的次數" #設置直方圖標題
hist.x_labels =['1','2','3','4','5','6'] #x軸標簽
hist.x_title ="結果" #x軸標題
hist.y_title = "頻次" #y軸標題
hist.add('D6',frequencies)
hist.render_to_file('die_visual.svg') #生成svg文件
#計算100次 面頻次/總次數
pie = Pie()
pie.title = "100次擲骰子比例圖" #百分比圖
pie.add('D1',frequencies[0]/100)
pie.add('D2',frequencies[1]/100)
pie.add('D3',frequencies[2]/100)
pie.add('D4',frequencies[3]/100)
pie.add('D5',frequencies[4]/100)
pie.add('D6',frequencies[5]/100)
pie.render_to_file('die_visual.svg') #生成svg文件:生成同一個文件(只顯示一個)
circle = Pie(inner_radius =0.6) #圓環圖
circle.title = "100次擲骰子比例圖"
circle.add('D1',frequencies[0])
circle.add('D2',frequencies[1])
circle.add('D3',frequencies[2])
circle.add('D4',frequencies[3])
circle.add('D5',frequencies[4])
circle.add('D6',frequencies[5])
circle.render_to_file('die_visual.svg')
bar =HorizontalBar() #水平條形圖
bar.title ='擲骰子條形圖'
bar.add('D1',frequencies[0])
bar.add('D2',frequencies[1])
bar.add('D3',frequencies[2])
bar.add('D4',frequencies[3])
bar.add('D5',frequencies[4])
bar.add('D6',frequencies[5])
bar.render_to_file('die_visual.svg')
spot =XY(stroke = False) #這部分模擬離散坐標點
spot.title = '散點圖'
spot_x =[(3,2),(1,2),(3,8),(5,7),(6,14)]
spot.add('D6',spot_x)
spot.render_to_file('die_visual.svg')
line = Line()
line._title="擲骰子折線圖"
line.x_labels =map(str,range(1,7)) #range:7為結束的范圍
line.add('頻次數',[frequencies[0],frequencies[1],frequencies[2],frequencies[3],frequencies[4],frequencies[5]])
line.render_to_file('die_visual.svg')
#結果:
直方圖
比例圖:
圓環圖:
水平條形圖:
折線圖: