国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

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

wanglu1209 / 3650人閱讀

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

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

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

繪制簡(jiǎn)單的折線圖;

隨機(jī)漫步;

使用Pygal模擬擲骰子。

在正式開(kāi)始之前,需要安裝兩個(gè)擴(kuò)展包:matplotlibpygal。Python中安裝第三方庫(kù)的方式已在上一個(gè)項(xiàng)目中介紹過(guò)了,這里不再贅述。

2. 繪制簡(jiǎn)單的折線圖 2.1 簡(jiǎn)單的折線圖

首先我們繪制一個(gè)簡(jiǎn)單的折線圖,代碼保存到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表示線條的粗細(xì)
plt.plot(input_values, squares, linewidth=5)

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

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

plt.show()

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

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

2.2 生成散點(diǎn)圖

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

import matplotlib.pyplot as plt

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

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

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

# 設(shè)置圖表標(biāo)題并給坐標(biāo)軸加上標(biāo)簽
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)

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

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

plt.show()

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

3. 隨機(jī)漫步

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

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

from random import choice

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

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

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

    def fill_walk(self):
        """計(jì)算隨機(jī)漫步包含的所有點(diǎn)"""

        # 不斷漫步,直到列表到達(dá)指定的長(zhǎng)度
        while len(self.x_values) < self.num_points:
            # 決定前進(jìn)方向以及沿這個(gè)方向前進(jìn)的距離
            # 通過(guò)choice從給定值中隨機(jī)選取
            x_direction = choice([1, -1])  # 正向還是負(fù)向
            x_distance = choice([0, 1, 2, 3, 4])  # 移動(dòng)的距離
            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

            # 計(jì)算下一個(gè)點(diǎn)的坐標(biāo)
            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)

下面的代碼用于生成隨機(jī)漫步圖像,代碼保存到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))

    # 繪制隨機(jī)漫步的圖像
    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)

    # 突出起點(diǎn)和終點(diǎn)
    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)

    # 隱藏坐標(biāo)軸
    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

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

4. 使用Pygal模擬擲骰子

首先我們需要?jiǎng)?chuàng)建一個(gè)骰子類(lèi)Dice,將其保存到dice.py中:

from random import randint

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

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

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

import pygal
from dice import Dice

dice_1 = Dice()
dice_2 = Dice(10)

# 擲骰子多次,并將結(jié)果存儲(chǔ)在一個(gè)列表中
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)計(jì)每個(gè)結(jié)果的頻數(shù)
    frequences.append(results.count(value))

# 對(duì)結(jié)果進(jìn)行可視化
# 創(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ù)起個(gè)名字,并加到圖表中
hist.add("D6 + D10", frequences)
# 將圖像渲染為svg文件,矢量圖
hist.render_to_file("dice_visual.svg")

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

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

5. 小結(jié)

本篇主要講述了:

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

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

如果使用散點(diǎn)圖來(lái)探索隨機(jī)漫步過(guò)程;

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


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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/44725.html

相關(guān)文章

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

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

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

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

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

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

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

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

    lansheng228 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<