天天看點

Python程式設計:從入門到實踐 第十五章 生成資料

作者:明政面朝大海春暖花開

以下是一個使用Pygal庫建立Die類、進行骰子分析并繪制直方圖的例子:

首先,確定已經安裝了Pygal庫。可以使用以下指令在Python中安裝Pygal:

pip install pygal
           

然後,建立一個名為die.py的Python檔案,并在其中編寫以下代碼:

import pygal

class Die:
    """表示一個骰子的類"""

    def __init__(self, num_sides=6):
        """骰子預設為6個面"""
        self.num_sides = num_sides

    def roll(self):
        """傳回一個1和骰子面數之間的随機數"""
        import random
        return random.randint(1, self.num_sides)

# 建立一個D6骰子執行個體
die = Die()

# 擲骰子多次并将結果存儲在一個清單中
results = []
for roll_num in range(1000):
    result = die.roll()
    results.append(result)

# 分析結果
frequencies = []
for value in range(1, die.num_sides+1):
    frequency = results.count(value)
    frequencies.append(frequency)

# 繪制直方圖
hist = pygal.Bar()

hist.title = "Results of rolling one D6 1000 times."
hist.x_labels = [str(x) for x in range(1, die.num_sides+1)]
hist.x_title = "Result"
hist.y_title = "Frequency of Result"

hist.add('D6', frequencies)
hist.render_to_file('die_visual.svg')
           

在上述代碼中,我們首先定義了一個名為Die的類,該類表示一個骰子。該類具有兩個方法:__init__用于初始化骰子的面數,和roll用于模拟骰子的投擲并傳回結果。

接下來,我們建立了一個D6骰子執行個體,并使用循環進行1000次投擲,将每次投擲的結果存儲在一個清單中。然後,我們分析結果,計算每個面出現的頻率,并将頻率存儲在另一個清單中。

最後,我們使用Pygal庫建立一個柱狀圖,設定圖表的标題、坐标軸标簽等屬性,并将頻率資料添加到圖表中。最後,我們将圖表渲染為一個SVG檔案(例如die_visual.svg)。

以下是一個示例代碼,示範如何建立一個RandomWalk類并進行随機漫步圖的繪制:

import matplotlib.pyplot as plt
from random import choice

class RandomWalk:
    """一個生成随機漫步資料的類"""
    
    def __init__(self, num_points=5000):
        """初始化随機漫步的屬性"""
        self.num_points = num_points
        
        # 所有随機漫步都始于(0, 0)
        self.x_values = [0]
        self.y_values = [0]
    
    def fill_walk(self):
        """計算随機漫步包含的所有點"""
        
        # 不斷漫步,直到清單達到指定的長度
        while len(self.x_values) < self.num_points:
            # 決定前進方向以及沿這個方向前進的距離
            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
            
            # 計算下一個點的x和y值
            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)

# 建立一個RandomWalk執行個體,并繪制随機漫步圖
rw = RandomWalk()
rw.fill_walk()

plt.figure(figsize=(10, 6))
point_numbers = list(range(rw.num_points))
plt.scatter(rw.x_values, rw.y_values, c=point_numbers, cmap=plt.cm.Blues, edgecolor='none', s=15)

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

這段代碼建立了一個RandomWalk類,其中num_points參數指定了随機漫步的點數,預設為5000。在fill_walk方法中,通過随機選擇方向和距離來計算下一個點的位置,并将其添加到x_values和y_values清單中。然後,使用matplotlib庫繪制散點圖來展示随機漫步的路徑。起點和終點被突出顯示為綠色和紅色的點,并隐藏了坐标軸。你可以根據需要調整圖形的尺寸。

以下是一個繪制簡單折線圖、修改标簽文字和線條粗細、校正圖形、使用scatter()繪制散點圖并設定樣式、使用scatter()繪制一系列點、自動計算資料、删除資料點輪廓、自定義顔色、使用顔色映射和自動儲存圖表的Python代碼示例:

import matplotlib.pyplot as plt

# 建立資料
x_values = [1, 2, 3, 4, 5]
y_values = [1, 4, 9, 16, 25]

# 繪制簡單折線圖
plt.plot(x_values, y_values, linewidth=2)

# 修改标簽文字和線條粗細
plt.title("Square Numbers", fontsize=24)
plt.xlabel("Value", fontsize=14)
plt.ylabel("Square of Value", fontsize=14)
plt.tick_params(axis='both', labelsize=14)

# 校正圖形
plt.axis([0, 6, 0, 30])

# 使用scatter()繪制散點圖并設定其樣式
plt.scatter(x_values, y_values, c='red', edgecolors='none', s=40)

# 使用scatter()繪制一系列點
x_values = list(range(1, 1001))
y_values = [x**2 for x in x_values]
plt.scatter(x_values, y_values, c='blue', edgecolors='none', s=10)

# 自動計算資料
x_values = list(range(1, 6))
y_values = [x**3 for x in x_values]
plt.plot(x_values, y_values, linewidth=2)

# 删除資料點的輪廓
plt.scatter(x_values, y_values, c='green', edgecolors='none', s=40)

# 自定義顔色
plt.scatter(x_values, y_values, c=(0.5, 0, 0.5), edgecolors='none', s=40)

# 使用顔色映射
plt.scatter(x_values, y_values, c=y_values, cmap=plt.cm.Blues, edgecolors='none', s=40)

# 自動儲存圖表
plt.savefig('chart.png', bbox_inches='tight')

# 顯示圖表
plt.show()
           

這段代碼示範了如何使用Matplotlib庫繪制簡單的折線圖和散點圖,并對圖表進行各種樣式和設定的修改

以下是一個使用Python程式設計的示例,展示了如何建立一個簡單的Web應用程式,用于映射URL、編寫視圖、編寫模闆,并建立其他網頁。

from flask import Flask, render_template

app = Flask(__name__)

# 定義路由和視圖函數
@app.route('/')
def index():
    return '歡迎通路首頁!'

@app.route('/topics')
def topics():
    # 擷取所有主題的資料
    topics = ['主題1', '主題2', '主題3']
    return render_template('topics.html', topics=topics)

@app.route('/topic/<topic_id>')
def topic(topic_id):
    # 擷取特定主題的資料
    topic_data = {'id': topic_id, 'title': '主題标題', 'content': '主題内容'}
    return render_template('topic.html', topic=topic_data)

# 運作應用程式
if __name__ == '__main__':
    app.run()
           

在上面的示例中,使用了Flask架構來建立Web應用程式。首先,定義了三個路由(URL)和對應的視圖函數。index()函數用于處理首頁的請求,topics()函數用于顯示所有主題的頁面,topic()函數用于顯示特定主題的頁面。

在topics()函數中,定義了一個名為topics的清單,其中包含了所有主題的資料。然後使用render_template()函數來渲染名為topics.html的模闆,并将主題資料傳遞給模闆。

在topic()函數中,通過URL中的topic_id參數來擷取特定主題的資料,并将其傳遞給名為topic.html的模闆進行渲染。

最後,使用app.run()方法來運作應用程式。

請注意,上述示例僅展示了一個簡單的示例,實際的Web應用程式可能需要更多的路由和視圖函數來處理不同的請求和邏輯。

你提到了一些關于Django架構的内容。這些内容涉及了定義模型、激活模型、Django管理網站、遷移模型、向管理網站注冊模型以及Django shell的使用。

下面是對這些内容的簡要解釋和示例:

  1. 定義模型:

    在Django中,模型是用于表示資料庫中的資料結構的類。你可以定義一個模型類來定義資料表的字段和屬性。例如,下面是一個簡單的模型類定義:

from django.db import models

class Entry(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    pub_date = models.DateTimeField(auto_now_add=True)
           

在這個例子中,我們定義了一個名為Entry的模型類,它有三個字段:title、content和pub_date。title和content分别是CharField和TextField類型的字段,用于存儲字元串資料,而pub_date是一個DateTimeField類型的字段,用于存儲日期和時間資料。

  1. 激活模型:

    在定義完模型後,需要在Django項目中激活這個模型。為了激活模型,你需要在項目的settings.py檔案中的INSTALLED_APPS清單中添加你的應用程式的名稱。例如:

INSTALLED_APPS = [
    ...
    'myapp',
    ...
]
           

這裡的'myapp'是你的應用程式的名稱,它包含了你定義的模型類。

  1. Django管理網站:

    Django提供了一個内置的管理網站,你可以在其中管理你的模型資料。要使用管理網站,你需要建立一個管理者賬戶,并在你的應用程式的admin.py檔案中注冊你的模型類。例如:

from django.contrib import admin
from .models import Entry

admin.site.register(Entry)
           

這樣,你就可以在管理網站中檢視和編輯Entry模型的資料了。

  1. 遷移模型:

    在定義或修改模型後,你需要進行資料庫遷移,以便将模型的變化應用到資料庫中。你可以使用Django的指令行工具來執行遷移操作。例如,下面的指令可以建立一個遷移檔案并将其應用到資料庫中:

python manage.py makemigrations
python manage.py migrate
           
  1. Django shell:

    Django shell是一個互動式的Python環境,它可以讓你在Django項目的上下文中執行Python代碼。你可以使用Django shell來測試和調試你的代碼,以及與資料庫進行互動。要進入Django shell,你可以使用以下指令:

python manage.py shell
           

這些是關于Django架構的一些基本操作和示例。如果你需要更詳細的資訊,我建議你閱讀《Python程式設計:從入門到實踐》這本書中關于Django的章節,或者參考Django的官方文檔。

以下是使用Python程式設計中的Django架構建立項目的簡單示例:

  1. 安裝Django:

    首先,確定你已經安裝了Python。然後,打開終端或指令提示符,運作以下指令來安裝Django:

  2. pip install django
  3. 在Django中建立項目:

    運作以下指令來建立一個Django項目:

  4. django-admin startproject myproject
  5. 這将在目前目錄下建立一個名為"myproject"的項目。
  6. 建立資料庫:

    進入到項目目錄:

  7. cd myproject
  8. 運作以下指令來建立資料庫:
  9. python manage.py migrate
  10. 這将建立一個SQLite資料庫,并将預設的Django表結構應用到該資料庫中。
  11. 檢視項目:

    運作以下指令來啟動Django開發伺服器:

  12. python manage.py runserver
  13. 這将啟動一個本地開發伺服器,并顯示一個URL,例如:http://127.0.0.1:8000/。

    在浏覽器中輸入該URL,即可檢視你的Django項目。

請注意,這隻是一個簡單的示例,實際上,使用Django開發項目需要更多的配置和代碼編寫。你可以參考Django的官方文檔或其他教程來學習更多關于Django的知識

以下是一個示例,示範如何使用Pygal庫來改進圖表,并添加自定義工具提示、根據資料繪圖,并在圖表中添加可單擊的連結。

import pygal

# 建立一個Bar類的執行個體
bar_chart = pygal.Bar()

# 添加資料
data = {'A': 5, 'B': 8, 'C': 3, 'D': 12}
for key, value in data.items():
    bar_chart.add(key, value)

# 添加自定義工具提示
bar_chart.tooltip_title = '資料詳情'
bar_chart.tooltip_format = '{value}'
bar_chart.tooltip_value_suffix = '個'

# 根據資料繪圖
bar_chart.render_to_file('chart.svg')

# 在圖表中添加可單擊的連結
bar_chart.add('Google', 'http://www.google.com')
bar_chart.render_to_file('chart_with_link.svg')
           

在這個示例中,我們首先建立了一個Bar類的執行個體bar_chart。然後,我們使用add方法添加了一些資料。接下來,我們使用tooltip_title、tooltip_format和tooltip_value_suffix屬性來自定義工具提示的标題、格式和字尾。然後,我們使用render_to_file方法将圖表渲染為SVG檔案。

最後,我們使用add方法添加了一個連結,連結到谷歌網站。然後,我們再次使用render_to_file方法将包含連結的圖表渲染為另一個SVG檔案。

這隻是一個簡單的示例,你可以根據自己的需求和資料來自定義圖表的樣式和添加更多的功能。你可以參考Pygal官方文檔來擷取更多關于Pygal庫的詳細資訊和用法。

處理響應字典是指在Python程式設計中對字典類型的資料進行處理和操作。字典是一種無序的資料結構,由鍵值對組成,其中每個鍵都是唯一的。

以下是一個處理響應字典的示例:

# 假設我們有一個響應字典
response = {
    "status": "success",
    "code": 200,
    "data": {
        "name": "John",
        "age": 25,
        "city": "New York"
    }
}

# 擷取字典中的值
status = response["status"]
code = response["code"]
data = response["data"]

print(status)  # 輸出: success
print(code)    # 輸出: 200
print(data)    # 輸出: {'name': 'John', 'age': 25, 'city': 'New York'}

# 修改字典中的值
response["status"] = "error"
response["code"] = 404

print(response)  # 輸出: {'status': 'error', 'code': 404, 'data': {'name': 'John', 'age': 25, 'city': 'New York'}}

# 添加新的鍵值對
response["message"] = "Page not found"

print(response)  # 輸出: {'status': 'error', 'code': 404, 'data': {'name': 'John', 'age': 25, 'city': 'New York'}, 'message': 'Page not found'}

# 删除鍵值對
del response["data"]

print(response)  # 輸出: {'status': 'error', 'code': 404, 'message': 'Page not found'}
           

這是一個簡單的示例,展示了如何處理響應字典中的值、修改字典中的值、添加新的鍵值對和删除鍵值對。根據實際需求,你可以根據字典的鍵來擷取、修改、添加和删除對應的值

當涉及使用 API 調用請求資料時,Python 的 requests 庫是一個非常常用和友善的工具。下面是一個簡單的示例,展示了如何使用 requests 庫來發送 API 請求并處理響應資料:

首先,確定已經安裝了 requests 庫。可以使用以下指令在終端或指令提示符中安裝它:

pip install requests
           

接下來,導入 requests 庫:

import requests
           

然後,使用 requests 庫發送一個 GET 請求到 API 的 URL,并擷取響應資料:

url = "https://api.example.com/data"  # 替換為實際的 API URL
response = requests.get(url)
           

注意,這裡的 url 是你要調用的 API 的實際 URL。

一旦收到響應,你可以檢查響應的狀态碼以确定請求是否成功:

if response.status_code == 200:
    # 請求成功
    data = response.json()  # 将響應資料解析為 JSON 格式
else:
    # 請求失敗
    print("請求失敗,狀态碼:", response.status_code)
           

在上面的代碼中,如果狀态碼為 200,表示請求成功,你可以使用 response.json() 将響應資料解析為 JSON 格式,然後将其存儲在 data 變量中。

最後,你可以根據 API 傳回的資料格式和結構,使用 data 變量中的資料進行進一步的處理和分析。

請注意,這隻是一個簡單的示例,實際的 API 請求和處理可能需要更多的參數和邏輯,具體取決于你要使用的 API 和你的需求。