Chuỗi thời gian là một chuỗi các điểm dữ liệu [quan sát] được sắp xếp theo trình tự thời gian và cách đều nhau theo thời gian. Một số ví dụ đáng chú ý về dữ liệu chuỗi thời gian là giá cổ phiếu, kỷ lục về lượng mưa hàng năm hoặc số lượng khách hàng sử dụng ứng dụng chia sẻ xe đạp hàng ngày. Dữ liệu chuỗi thời gian thể hiện các mẫu nhất định, chẳng hạn như giá cao và thấp của giá khách sạn tùy theo mùa
InfluxDB là cơ sở dữ liệu chuỗi thời gian [TSDB] hàng đầu, hiệu suất cao, hỗ trợ các nhà phát triển xây dựng các ứng dụng phân tích thời gian thực, IoT và đám mây với dữ liệu chuỗi thời gian
Trong bài viết này, bạn sẽ tìm hiểu cách tận dụng các khả năng của InfluxDB cùng với tính linh hoạt và sức mạnh của Matplotlib để trực quan hóa dữ liệu chuỗi thời gian một cách hiệu quả
InfluxDB là gì?
InfluxDB là một TSDB mã nguồn mở, không liên quan được tối ưu hóa để có tính sẵn sàng cao và chức năng đọc và ghi nhanh đối với dữ liệu chuỗi thời gian được viết bằng ngôn ngữ lập trình Golang. Khả năng truy xuất và lưu trữ nhanh hơn khiến nó trở nên phổ biến đối với nhiều ứng dụng, chẳng hạn như giám sát các ứng dụng trong sản xuất, lưu trữ dữ liệu từ các cảm biến IoT và thực hiện phân tích thời gian thực. InfluxDB cung cấp nhiều tùy chọn truy cập, bao gồm các truy vấn giống như SQL
InfluxDB lý tưởng để lưu trữ dữ liệu cần xử lý nhanh sau khi đến cơ sở dữ liệu. Do đó, nó tận dụng Giao thức thời gian mạng [NTP] để đồng bộ hóa thời gian trên các hệ thống. Nó cũng sử dụng phương pháp lập chỉ mục đơn giản, mang lại lợi thế rõ ràng về tốc độ so với các TSDB khác
InfluxDB hữu ích cho tất cả các loại ứng dụng liên quan đến lượng lớn dữ liệu được đánh dấu thời gian. Dưới đây là một số ví dụ về cách các doanh nghiệp sử dụng InfluxDB cho nhiều mục đích khác nhau
Tín hiệu giám sát trong dây chuyền sản xuất. Texas Instruments [TI] sử dụng InfluxDB để giám sát hoạt động sản xuất và phát hiện sự bất thường trước khi chúng trở nên tốn kém. TI theo dõi hơn một nghìn tín hiệu khác nhau về các sự cố tiềm ẩn có thể trở nên rắc rối. Mục đích là xây dựng các ứng dụng có thể xác định các vấn đề nghiêm trọng và hành động một cách tự chủ
Nâng cao hiệu quả kết nối trong Internet vạn vật công nghiệp [IIoT]. ThingWorx Kepware sử dụng InfluxDB để giúp các công ty kết nối tài sản kế thừa của họ với cơ sở dữ liệu [tại chỗ và đám mây]. Các công ty có thể thu thập và lưu trữ dữ liệu thẻ một cách dễ dàng và ở quy mô lớn, cho phép người quản lý theo dõi các sự kiện trên nhiều thiết bị trong thời gian thực
Theo dõi thống kê người dùng theo thời gian thực. Index Exchange sử dụng InfluxDB để theo dõi số liệu thống kê người dùng. Trình kích hoạt cụm InfluxDB cho phép lưu trữ dữ liệu theo thời gian thực, sau đó các nhà phân tích có thể truy cập và xử lý theo thời gian thực với chi phí thấp
Trực quan hóa dữ liệu chuỗi thời gian với Matplotlib và InfluxDB
Bây giờ, hãy xem xét kỹ hơn cách sử dụng Matplotlib và InfluxDB để trực quan hóa dữ liệu chuỗi thời gian. Bạn sẽ tìm hiểu về những kiến thức cơ bản về Matplotlib và xem lại một số biểu đồ mẫu, sau đó xem qua hướng dẫn sẽ chỉ cho bạn cách thiết lập và sử dụng ứng dụng khách InfluxDB Python để thực hiện các thao tác CRUD
Giới thiệu về Matplotlib
Matplotlib là một thư viện mã nguồn mở để trực quan hóa dữ liệu dưới dạng biểu đồ, sơ đồ và đồ thị. Nó được cho là thư viện vẽ sơ đồ phổ biến nhất cho Python và được sử dụng bởi các nhà khoa học dữ liệu và kỹ sư máy học trên toàn thế giới
Trong Matplotlib, các ô được phân cấp, lồng các đối tượng Python để tạo cấu trúc dạng cây. Một đối tượng hình đóng gói từng ô, như hình ở đây
"Hình" này là vùng chứa cấp cao nhất của trực quan hóa. Nó có thể có nhiều trục, về cơ bản là các ô riêng lẻ bên trong vùng chứa
Matplotlib sử dụng API được gọi là pyplot để giúp người dùng tạo trực quan hóa dễ dàng hơn — bạn không cần phải tự định cấu hình hình và trục một cách rõ ràng
Bạn cũng có thể tìm thấy các đối tượng Python điều khiển trục, dấu tick, chú thích, tiêu đề, hộp văn bản, lưới và nhiều đối tượng khác, tất cả đều có thể được tùy chỉnh
Giải phẫu của một âm mưu Matplotlib trông như thế này
Hình ảnh lịch sự của Hội thảo trực quan hóa dữ liệu
Matplotlib có thể được cài đặt bằng trình quản lý gói
pip install numpy
2 hoặc pip install numpy
3, tùy theo sở thích của bạnpip install matplotlib
Hoặc
conda install matplotlib
Sau đó cài đặt mô-đun Numpy như sau
pip install numpy
Thật tiện lợi khi sử dụng bí danh
pip install numpy
4 để tham chiếu mô-đun con đã nhậpimport matplotlib.pyplot as plt
import numpy as np # for creating arrays
import pandas as pd # for manipulating dataframes
Với Matplotlib, bạn có thể tạo tất cả các loại trực quan hóa, chẳng hạn như biểu đồ thanh, biểu đồ hình tròn, biểu đồ radar, biểu đồ và biểu đồ phân tán. Dưới đây là một vài ví dụ cho thấy cách tạo một số loại biểu đồ cơ bản
Lô đất
plt.plot[[1, 2, 3], label='Label 1']
plt.plot[[2, 4, 3], label='Label 2']
# Add title
plt.title['Two-way line plot']
plt.legend[]
plt.show[]
Âm mưu phân tán
________số 8Biểu đồ cột
labels = ['A', 'B', 'C', 'D']
x = np.arange[len[labels]]
width = 0.4
plt.bar[x - width / 2, [20, 25, 40, 10], width=width]
plt.bar[x + width / 2, [30, 15, 30, 20], width=width]
# Ticks and tick labels must be set manually
plt.xticks[x]
ax = plt.gca[]
ax.set_xticklabels[labels]
# Add axes and titles
ax.set_xlabel["x-axis"]
ax.set_ylabel["y-axis"]
plt.title['Bar chart']
# Show plot
plt.show[]
Biểu đồ tròn
pip install numpy
0Thiết lập InfluxDB
Bây giờ, hãy đi sâu vào chi tiết của hướng dẫn, phần này sẽ tập trung vào phiên bản đám mây của InfluxDB. Bắt đầu rất dễ dàng nhờ có nhiều mô-đun khác nhau để thu thập, đánh giá và trực quan hóa dữ liệu
Để bắt đầu, hãy đăng ký làm người dùng miễn phí trên trang web InfluxDB Cloud. Đảm bảo xác minh tài khoản của bạn bằng cách nhấp vào liên kết được gửi đến email của bạn. Sau đó đăng nhập và chọn nhà cung cấp đám mây [AWS, Azure hoặc GCP]. Lưu ý rằng phiên bản miễn phí cung cấp số lần đọc và ghi hạn chế, tối đa 10.000 bộ dữ liệu và chính sách lưu giữ trong ba mươi ngày
Sau khi đăng ký, bạn sẽ thấy mình trên trang bảng điều khiển
Tiếp theo, điều hướng đến phần Nhóm và tạo nhóm
Điều hướng đến phần Mã thông báo API và tạo Mã thông báo API không giới hạn. Điều này rất quan trọng vì bạn sẽ ghi dữ liệu vào thùng của mình;
Sau đó, bạn sẽ muốn tạo các thư mục cần thiết, thiết lập môi trường ảo Python và cài đặt các gói cần thiết
pip install numpy
1Tiếp theo, tạo một môi trường ảo bằng thư viện
pip install numpy
5. Lưu ý rằng nên dùng pip install numpy
5 khi chạy Python v3. 6+. Xem tài liệu này để biết thêm thông tinpip install numpy
4Lưu trữ thông tin đăng nhập của bạn [mã thông báo, nhóm và tổ chức] trong tệp
pip install numpy
7. Hãy nhớ bao gồm tệp pip install numpy
7 trong tệp pip install numpy
9conda install matplotlib
0Trong tệp
import matplotlib.pyplot as plt
import numpy as np # for creating arrays
import pandas as pd # for manipulating dataframes
0, bắt đầu nhập các mô-đun dotenv và os để đọc thông tin đăng nhập từ tệp pip install numpy
7Sau đó, quay lại InfluxDB Cloud UI, đến phần Nguồn. Trong thư viện máy khách, hãy chọn “Python. ” Sao chép mã bên dưới Khởi tạo ứng dụng khách và dán vào tệp
import matplotlib.pyplot as plt
import numpy as np # for creating arrays
import pandas as pd # for manipulating dataframes
0conda install matplotlib
1Tiếp theo, chạy tệp Python của bạn
conda install matplotlib
2Nếu không có thông báo lỗi, bạn đã kết nối thành công với InfluxDB Cloud
Sử dụng Matplotlib với InfluxDB
Hướng dẫn này sử dụng giá đóng cửa đã điều chỉnh từ Yahoo Finance cho bốn công ty công nghệ. Apple [AAPL], Amazon [AMZN], Google [GOOG] và Microsoft [MSFT], từ ngày 1 tháng 1 năm 2020 đến ngày 30 tháng 3 năm 2022. Ý tưởng là hình dung xu hướng giá của cổ phiếu trong giai đoạn COVID-19
Tải xuống và lưu dữ liệu
Đầu tiên, sử dụng thư viện yfinance để tải dữ liệu
conda install matplotlib
3Dữ liệu đã nhập sẽ xuất hiện như sau
Sau đó, sử dụng mã này để lưu dữ liệu dưới dạng tệp CSV
conda install matplotlib
4Chuẩn bị ghi dữ liệu
Tiếp theo, sử dụng đoạn mã sau để tải các thư viện cần thiết và liên kết với ứng dụng InfluxDB Python
conda install matplotlib
5Tạo hàm ghi dữ liệu
Sau đó, sử dụng mã bên dưới để chuẩn bị dữ liệu CSV ở cấu trúc điểm và ghi dữ liệu đó vào bộ chứa InfluxDB có tên là bộ chứa tài chính
conda install matplotlib
6Sử dụng Flux để truy vấn dữ liệu từ InfluxDB Cloud
Khi dữ liệu nằm trong nhóm, bạn có thể truy vấn dữ liệu đó bằng ngôn ngữ Flux và trả về khung dữ liệu [df] bằng mã sau
conda install matplotlib
7Như bạn có thể thấy, dữ liệu trong khung dữ liệu được trình bày theo cấu trúc phẳng, với mỗi trường liên tiếp
Viết truy vấn Flux để xoay chuỗi thời gian thành khung dữ liệu
Tiếp theo, sử dụng Flux để truy vấn và xoay dữ liệu vào một khung dữ liệu với tất cả các trường được trình bày dưới dạng cột
conda install matplotlib
8Đầu ra cho thấy dữ liệu hiện đang ở trong khung dữ liệu dự định. Tuy nhiên, như bạn có thể thấy trong ảnh chụp màn hình bên dưới, InfluxDB đã thêm các cột 'kết quả' và 'bảng' mà bạn sẽ thả trong phần tiếp theo
Bỏ các cột không liên quan
Sử dụng phương pháp
import matplotlib.pyplot as plt
import numpy as np # for creating arrays
import pandas as pd # for manipulating dataframes
3 để xóa các cột 'kết quả' và 'bảng' không liên quan đến phân tích nàyconda install matplotlib
9Khung dữ liệu cuối cùng được trình bày như sau
Chuẩn hóa khung dữ liệu để tạo biểu đồ chuyên nghiệp
Khung dữ liệu cho thấy giá cổ phiếu của AMZN và GOOG là hàng nghìn, trong khi AAPL và MSFT có giá cổ phiếu là hàng chục và hàng trăm. Vẽ sơ đồ nguyên trạng dữ liệu sẽ có hai biểu đồ ở trên cùng [AMZN và GOOG] và hai biểu đồ ở dưới cùng [MSFT và AAPL], trông sẽ không chuyên nghiệp. Để giải quyết vấn đề này, bạn có thể bình thường hóa dữ liệu chứng khoán về ngày 1, buộc giá ngày đầu tiên bắt đầu ở mức 1 đô la
Sử dụng mã sau đây để làm như vậy
pip install numpy
0Trực quan hóa dữ liệu với Matplotlib
Cuối cùng, sử dụng mã này để tạo biểu đồ chuỗi thời gian của giá cổ phiếu
pip install numpy
1Sau khi chạy mã, đầu ra sẽ như thế này
Phân tích dữ liệu
Như bạn có thể thấy trong cốt truyện cuối cùng, đã có sự giảm giá tạm thời trong khoảng thời gian từ tháng 3 đến tháng 4 năm 2020, khi các chính phủ công bố các biện pháp phong tỏa do COVID-19. Kể từ đó, cổ phiếu công nghệ hoạt động tương đối tốt bất chấp ảnh hưởng của COVID-19. Có một số tùy chọn có sẵn để phân tích dữ liệu chuỗi thời gian chuyên sâu hơn, cũng như cách lập dự báo thông qua các phương pháp dự báo chuỗi thời gian
Phần kết luận
Trong hướng dẫn này, bạn đã học những kiến thức cơ bản về trực quan hóa chuỗi thời gian trong Matplotlib, một thư viện vẽ đồ thị phổ biến cho Python. Bạn cũng đã học cách thiết lập Đám mây InfluxDB, ghi dữ liệu vào bộ chứa và đọc dữ liệu vào Python để phân tích, sử dụng các tập lệnh Python đơn giản để thực hiện các thao tác đọc và ghi trong InfluxDB
Như bạn đã thấy, có rất nhiều sức mạnh và tính linh hoạt trong việc kết hợp các khả năng của InfluxDB và Matplotlib để tạo trực quan hóa dữ liệu chuỗi thời gian một cách hiệu quả. Bạn có thể truy cập mã nguồn đầy đủ cho hướng dẫn này trong repo GitHub này
tài nguyên bổ sung
Nếu bạn quan tâm đến một số hướng dẫn khác chỉ ra cách trực quan hóa dữ liệu với InfluxDB, hãy xem các liên kết bên dưới
Hướng dẫn Recharts - Tìm hiểu cách trực quan hóa dữ liệu IoT bằng thư viện biểu đồ Recharts với InfluxDB
Hướng dẫn Highcharts InfluxDB - Tìm hiểu cách sử dụng thư viện biểu đồ Highcharts JavaScript với InfluxDB để trực quan hóa dữ liệu thủy triều đại dương
Hướng dẫn React Native Victory - Hướng dẫn này cho biết cách sử dụng phiên bản React Native của thư viện biểu đồ Victory, cho phép bạn sử dụng kinh nghiệm phát triển web của mình để tạo các ứng dụng di động gốc
Hướng dẫn Nivo- Trong bài viết này, bạn tìm hiểu về các nguyên tắc cơ bản của thư viện biểu đồ Nivo và cách tạo các loại biểu đồ khác nhau trong khi lấy dữ liệu từ InfluxDB
âm mưu. js Tutorial- Sử dụng thư viện biểu đồ PlotlyJS để hiển thị dữ liệu được lưu trữ trong InfluxDB
Giới thiệu về tác giả
Armstrong Asenavi là một kỹ sư máy học và nhà phân tích dữ liệu dày dạn kinh nghiệm với thiên hướng hiểu biết sâu sắc, kinh doanh thông minh [BI], bảng điều khiển, số liệu, phân tích, mô hình hóa và trực quan hóa. Anh ấy có kinh nghiệm cần thiết với tất cả các giai đoạn của dự án kỹ thuật dữ liệu nâng cao giá trị và thông thạo các ngôn ngữ lập trình chính bao gồm Python, R, JavaScript, SQL và DAX. Ông có nền tảng vững chắc về nghiên cứu, quản lý dự án và viết báo cáo kỹ thuật. Anh ấy là một nhà phân tích, có tư duy phản biện và dựa trên dữ liệu. Armstrong giao tiếp rõ ràng và có thể dịch thông tin phức tạp thành các giải pháp khả thi. Anh ấy cộng tác tốt với các thành viên trong nhóm và phát triển mạnh trong môi trường làm việc nhóm