成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Python學(xué)習(xí)之路14-生成數(shù)據(jù)

wanglu1209 / 3664人閱讀

摘要:小結(jié)本篇主要講述了如何生成數(shù)據(jù)集以及如何對其進行可視化如何使用創(chuàng)建簡單的圖表如果使用散點圖來探索隨機漫步過程如何使用創(chuàng)建直方圖,以及如何使用直方圖來探索同時擲兩個面數(shù)不同的骰子的結(jié)果。

《Python編程:從入門到實踐》筆記。
從本篇起將用三篇的篇幅介紹如何用Python進行數(shù)據(jù)可視化。
1. 前言

從本篇開始,我們將用三篇的篇幅來初步介紹如何使用Python來進行數(shù)據(jù)可視化操作。本篇的內(nèi)容包括:

繪制簡單的折線圖;

隨機漫步;

使用Pygal模擬擲骰子。

在正式開始之前,需要安裝兩個擴展包:matplotlibpygal。Python中安裝第三方庫的方式已在上一個項目中介紹過了,這里不再贅述。

2. 繪制簡單的折線圖 2.1 簡單的折線圖

首先我們繪制一個簡單的折線圖,代碼保存到mpl_squares.py文件中:

import matplotlib.pyplot as plt

# 輸入數(shù)據(jù), x軸
input_values = [1, 2, 3, 4, 5]
# 輸出數(shù)據(jù), y軸
squares = [1, 4, 9, 16, 25]
# linewidth表示線條的粗細
plt.plot(input_values, squares, linewidth=5)

# 設(shè)置圖標標題,并給坐標軸加上標簽
plt.title("Square Numbers", fontsize=24)
plt.xlabel("Value", fontsize=14)
plt.ylabel("Square of Value", fontsize=14)

# 設(shè)置刻度標記的大小
plt.tick_params(axis="both", labelsize=14)

plt.show()

matplotlib.pyplot.plot()函數(shù)可以只傳入一個squares參數(shù),表示y軸的值,此時將從x軸0點處開始一一對應(yīng)。有時這樣很簡便,但在此例中圖標將不正確,所以我們傳入了input_values列表,將其與squares列表一一對應(yīng)。

代碼從第10行到15行都可以省了,這些代碼只是讓圖表的信息更全。最終的結(jié)果如下:

2.2 生成散點圖

我們使用matplotlib.pyplot中的scatter()函數(shù)來生成散點圖,將代碼保存到scatter_squares.py文件中:

import matplotlib.pyplot as plt

x_values = list(range(1, 1001))
y_values = [x ** 2 for x in x_values]

# s表示點的大小,edgecolor表示點的輪廓的顏色,c表示數(shù)據(jù)點的顏色(可以使用RGB顏色)
# plt.scatter(x_values, y_values, s=4, edgecolor="none", c="red")

# 使用漸變色, 給c賦值了一個y值列表,并使用參數(shù)cmap告訴pylot使用哪個顏色來映射
plt.scatter(x_values, y_values, s=40, edgecolor="none", c=y_values, cmap=plt.cm.Blues)

# 設(shè)置圖表標題并給坐標軸加上標簽
plt.title("Square Number", fontsize=24)
plt.xlabel("Value", fontsize=14)
plt.ylabel("Square of Value", fontsize=14)

# 設(shè)置刻度的大小
plt.tick_params(axis="both", which="major", labelsize=14)

# 每個坐標軸的取值范圍
plt.axis([0, 1100, 0, 1100000])

# 第一個參數(shù)是路徑名,第二個參數(shù)指定將圖表多余的空白區(qū)域裁減掉。
plt.savefig("squares.png", bbox_inches="tight")

plt.show()

我們使用了列表生成式來生成y軸的數(shù)據(jù),并使用漸變色來繪制圖像,matplotlib.pyplot.cm.Bluesmatplotlib自帶的漸變色,它和c的每一個值對應(yīng)。通過pyplotaxis()函數(shù)來設(shè)置每個軸的取值范圍。最后將圖像保存到本地。生成的圖像如下:

3. 隨機漫步

隨機漫步指的是:每次行走都完全隨機,沒有明確的方向,結(jié)果是由一系列隨機決策決定的。在自然界、物理學(xué)、生物學(xué)、化學(xué)和經(jīng)濟領(lǐng)域,隨機漫步都有其實際用途。

使用Python生成隨機漫步數(shù)據(jù),再使用matplotlib將這些數(shù)據(jù)繪制出來。首先創(chuàng)建RandomWalk類,代碼保存到random_walk.py文件中:

from random import choice

class RandomWalk:
    """一個生成隨機漫步數(shù)據(jù)的類"""

    def __init__(self, num_points=5000):
        """初始化隨機漫步的屬性"""
        self.num_points = num_points

        # 所有隨機漫步都始于(0, 0),這兩個列表用于存儲隨機漫步數(shù)據(jù)
        self.x_values = [0]
        self.y_values = [0]

    def fill_walk(self):
        """計算隨機漫步包含的所有點"""

        # 不斷漫步,直到列表到達指定的長度
        while len(self.x_values) < self.num_points:
            # 決定前進方向以及沿這個方向前進的距離
            # 通過choice從給定值中隨機選取
            x_direction = choice([1, -1])  # 正向還是負向
            x_distance = choice([0, 1, 2, 3, 4])  # 移動的距離
            x_step = x_direction * x_distance

            y_direction = choice([1, -1])
            y_distance = choice([0, 1, 2, 3, 4])
            y_step = y_direction * y_distance

            # 拒絕原地踏步
            if x_step == 0 and y_step == 0:
                continue

            # 計算下一個點的坐標
            next_x = self.x_values[-1] + x_step
            next_y = self.y_values[-1] + y_step

            self.x_values.append(next_x)
            self.y_values.append(next_y)

下面的代碼用于生成隨機漫步圖像,代碼保存到rw_visual.py文件中:

import matplotlib.pyplot as plt
from random_walk import RandomWalk

while True:
    rw = RandomWalk(50000)
    rw.fill_walk()

    # 設(shè)置繪圖窗口的尺寸
    plt.figure(figsize=(10, 6))

    # 繪制隨機漫步的圖像
    point_number = list(range(rw.num_points))
    plt.scatter(rw.x_values, rw.y_values, s=1, c=point_number,
                edgecolors="none", cmap=plt.cm.Blues)

    # 突出起點和終點
    plt.scatter(0, 0, c="green", edgecolors="none", s=100)
    plt.scatter(rw.x_values[-1], rw.y_values[-1], c="red", edgecolors="none",
                s=100)

    # 隱藏坐標軸
    plt.axes().get_xaxis().set_visible(False)
    plt.axes().get_yaxis().set_visible(False)

    plt.show()

    if input("Make another walk?(y/n)") == "n":
        break

程序通過一個循環(huán)類多次繪制隨機漫步圖;通過pyplotfigure()函數(shù)來設(shè)置圖像的尺寸,figsize的單位是英寸;通過漸變色來繪制圖像的路徑,顏色由淺到深,并且我們將起點(綠色)和終點(紅色)顯著標出;最后隱藏坐標軸。最終的圖像如下(每次運行的效果都不同):

4. 使用Pygal模擬擲骰子

首先我們需要創(chuàng)建一個骰子類Dice,將其保存到dice.py中:

from random import randint

class Dice:
    """表示一個骰子類"""
    def __init__(self, num_sides=6):
        """骰子默認為6面"""
        self.num_sides = num_sides

    def roll(self):
        """返回一個位于1和骰子面數(shù)之間的隨機值"""
        return randint(1, self.num_sides)

可以自行設(shè)定骰子的面數(shù)。下面是擲兩個骰子50000次,統(tǒng)計倆骰子點數(shù)之和的分布的模擬,最后生成了一個矢量文件.svg文件,它能在瀏覽器中打開,代碼如下:

import pygal
from dice import Dice

dice_1 = Dice()
dice_2 = Dice(10)

# 擲骰子多次,并將結(jié)果存儲在一個列表中
results = []
for roll_num in range(50000):
    results.append(dice_1.roll() + dice_2.roll())

# 分析結(jié)果
frequences = []
# 能夠模擬擲任何雙骰子的情況,不管這些骰子有多少面
max_result = dice_1.num_sides + dice_2.num_sides
for value in range(2, max_result + 1):
    # 統(tǒng)計每個結(jié)果的頻數(shù)
    frequences.append(results.count(value))

# 對結(jié)果進行可視化
# 創(chuàng)建條形圖
hist = pygal.Bar()

hist.title = "Result of rolling a D6 and a D10 50000 times."
# 創(chuàng)建x軸上的刻度
hist.x_labels = [str(value) for value in range(2, max_result + 1)]
hist.x_title = "Result"
hist.y_title = "Frequency of Result"

# 給這組數(shù)據(jù)起個名字,并加到圖表中
hist.add("D6 + D10", frequences)
# 將圖像渲染為svg文件,矢量圖
hist.render_to_file("dice_visual.svg")

注意,frequences中的數(shù)據(jù)依次與hist.x_labels對應(yīng)。下面是最終結(jié)果:

Pygal讓這個圖表具有交互性:如果你將鼠標指向該圖中的任何數(shù)據(jù)條,將看到它的具體數(shù)據(jù)。

5. 小結(jié)

本篇主要講述了:

如何生成數(shù)據(jù)集以及如何對其進行可視化;

如何使用matplotlib創(chuàng)建簡單的圖表;

如果使用散點圖來探索隨機漫步過程;

如何使用Pygal創(chuàng)建直方圖,以及如何使用直方圖來探索同時擲兩個面數(shù)不同的骰子的結(jié)果。


迎大家關(guān)注我的微信公眾號"代碼港" & 個人網(wǎng)站 www.vpointer.net ~

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/44725.html

相關(guān)文章

  • Python學(xué)習(xí)之路21-序列構(gòu)成的數(shù)組

    摘要:第行把具名元組以的形式返回。對序列使用和通常號兩側(cè)的序列由相同類型的數(shù)據(jù)所構(gòu)成當然不同類型的也可以相加,返回一個新序列。從上面的結(jié)果可以看出,它雖拋出了異常,但仍完成了操作查看字節(jié)碼并不難,而且它對我們了解代碼背后的運行機制很有幫助。 《流暢的Python》筆記。接下來的三篇都是關(guān)于Python的數(shù)據(jù)結(jié)構(gòu),本篇主要是Python中的各序列類型 1. 內(nèi)置序列類型概覽 Python標準庫...

    ralap 評論0 收藏0
  • Python學(xué)習(xí)之路28-符合Python風(fēng)格的對象

    摘要:本篇繼續(xù)學(xué)習(xí)之路,實現(xiàn)更多的特殊方法以讓自定義類的行為跟真正的對象一樣。之所以要讓向量不可變,是因為我們在計算向量的哈希值時需要用到和的哈希值,如果這兩個值可變,那向量的哈希值就能隨時變化,這將不是一個可散列的對象。 《流暢的Python》筆記。本篇是面向?qū)ο髴T用方法的第二篇。前一篇講的是內(nèi)置對象的結(jié)構(gòu)和行為,本篇則是自定義對象。本篇繼續(xù)Python學(xué)習(xí)之路20,實現(xiàn)更多的特殊方法以讓...

    Eric 評論0 收藏0
  • Python 進階之路 (十一) 再立Flag, 社區(qū)最全的itertools深度解析(下)

    摘要:將每一行作為返回,其中是每行中的列名。對于每一行,都會生成一個對象,其中包含和列中的值。它返回一個迭代器,是迭代結(jié)果都為的情況。深度解析至此全劇終。 簡單實戰(zhàn) 大家好,我又來了,在經(jīng)過之前兩篇文章的介紹后相信大家對itertools的一些常見的好用的方法有了一個大致的了解,我自己在學(xué)完之后仿照別人的例子進行了真實場景下的模擬練習(xí),今天和大家一起分享,有很多部分還可以優(yōu)化,希望有更好主意...

    tomorrowwu 評論0 收藏0
  • Python學(xué)習(xí)之路16-使用API

    摘要:本篇是數(shù)據(jù)處理的第三篇,本篇將使用應(yīng)用程序接口自動請求網(wǎng)站的特定信息并可視化。前言本將需要用到模塊來請求網(wǎng)站數(shù)據(jù)。使用可視化倉庫使用一個參數(shù)配置類來定義圖表的參數(shù),并自定義圖表中每個條形的描述信息,并給這些條形添加網(wǎng)址鏈接。 《Python編程:從入門到實踐》筆記。本篇是Python數(shù)據(jù)處理的第三篇,本篇將使用Web應(yīng)用程序接口自動請求網(wǎng)站的特定信息并可視化。 1. 前言 本將需要用到...

    lansheng228 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<