Trong kỷ nguyên công nghệ số, điện thoại và máy tính bảng đã trở thành vật bất ly thân. Tuy nhiên, một trong những nỗi lo lớn nhất của người dùng chính là thời lượng pin. Mỗi ngày, chúng ta đều tự hỏi: “Thời gian tôi bật màn hình có thực sự ảnh hưởng lớn đến pin không, và ảnh hưởng như thế nào?”. Với sự phát triển của các công cụ phân tích dữ liệu, giờ đây chúng ta có thể tìm ra câu trả lời một cách khoa học và chính xác. Bài viết này sẽ hướng dẫn bạn cách sử dụng Python và các thư viện thống kê mạnh mẽ để khám phá mối quan hệ tuyến tính giữa thời gian bật màn hình và mức tiêu thụ pin trên thiết bị di động của bạn.
Tại Sao Cần Phân Tích Mối Liên Hệ Giữa Thời Gian Bật Màn Hình Và Pin Thiết Bị?
Việc quan tâm đến thời lượng pin không phải là một điều quá đáng. Dù cho phần lớn chúng ta đều có đủ pin để sử dụng trong một ngày làm việc và luôn ở gần nguồn điện khi làm việc tại nhà, nhưng sự tò mò về cách các yếu tố sử dụng ảnh hưởng đến pin luôn hiện hữu. Rõ ràng, việc màn hình bật sáng sẽ tiêu thụ nhiều năng lượng hơn, nhưng mức độ ảnh hưởng cụ thể là bao nhiêu? Liệu mối quan hệ này có phải là tuyến tính, hay mức tiêu thụ pin sẽ tăng tốc nhanh chóng theo cấp số nhân?
Với sự hứng thú ngày càng tăng về phân tích dữ liệu và những kiến thức cơ bản về thống kê hồi quy tuyến tính từ thời đại học – nơi các điểm dữ liệu được vẽ trên hai trục và một đường thẳng được kéo qua chúng – việc ứng dụng vào đời sống hàng ngày trở nên khả thi. Khi nhận thấy cả điện thoại Android và máy tính bảng của mình đều lưu trữ thống kê về thời gian bật màn hình và mức sử dụng pin, ý tưởng phân tích đã nảy ra. Thay vì tìm lại chiếc máy tính bỏ túi TI cũ kỹ, Python với kho công cụ tính toán thống kê phong phú đã trở thành lựa chọn hoàn hảo để tìm ra mối quan hệ, nếu có, giữa thời gian bật màn hình và tuổi thọ pin.
Xây Dựng Giả Thuyết Khoa Học Với Pin Điện Thoại/Máy Tính Bảng
Một phần không thể thiếu của thống kê là kiểm định giả thuyết. Dù đây có thể là một bước “quá mức cần thiết” cho một dự án nhỏ như thế này, nhưng việc tuân thủ các nguyên tắc khoa học sẽ đảm bảo tính khách quan và chính xác cho kết quả.
Trong thống kê, chúng ta thường hình thành một giả thuyết vô hiệu (Null Hypothesis, ký hiệu H0) và một giả thuyết thay thế (Alternative Hypothesis, ký hiệu H1). Giả thuyết vô hiệu là điều chúng ta muốn bác bỏ, và nếu bằng chứng thống kê đủ mạnh, chúng ta sẽ chấp nhận giả thuyết thay thế.
Đối với mối liên hệ giữa thời gian bật màn hình và tuổi thọ pin trên điện thoại và máy tính bảng, các giả thuyết sẽ được định nghĩa như sau:
Giả thuyết vô hiệu (H0) | Không có mối quan hệ giữa thời gian bật màn hình và tuổi thọ pin. |
---|---|
Giả thuyết thay thế (H1) | Có mối quan hệ giữa thời gian bật màn hình và tuổi thọ pin. |
Với các giả thuyết đã được xác định rõ ràng, chúng ta có thể tiến hành thu thập và phân tích dữ liệu.
Chuẩn Bị Dữ Liệu Pin Thiết Bị Để Phân Tích Với Python
Bước đầu tiên là tổ chức dữ liệu. Hệ điều hành Android tùy chỉnh trên điện thoại Samsung và máy tính bảng của tôi cung cấp các số liệu thống kê về mức sử dụng pin và thời gian bật màn hình trong bảy ngày gần nhất.
Bảng tính LibreOffice Calc hiển thị dữ liệu thời gian bật màn hình và mức giảm pin của điện thoại và máy tính bảng.
Tôi cẩn thận mở các trang chẩn đoán trên cả hai thiết bị và sao chép dữ liệu vào một bảng tính LibreOffice Calc, sau đó lưu lại dưới dạng tệp CSV. Tôi đã tạo các cột riêng cho thời gian bật màn hình của điện thoại và máy tính bảng, cùng với hai cột tương ứng cho mức giảm pin. Cách dễ nhất để mã hóa thời gian bật màn hình là nhân số giờ với 60 và cộng thêm số phút, cho ra tổng số phút màn hình bật. (Ban đầu, tôi mã hóa chúng dưới dạng giờ và phút trong bảng tính, nhưng thư viện pandas không thích định dạng này, vì vậy tôi đã mã hóa lại).
Sau khi có dữ liệu, tôi sử dụng thư viện pandas của Python để đọc tệp CSV. pandas có khả năng đọc nhiều định dạng dữ liệu và giúp việc làm việc với dữ liệu được sắp xếp theo hàng và cột trở nên dễ dàng, chuyển đổi liền mạch từ bảng tính sang Python.
Tôi mở một Jupyter notebook và chạy các lệnh Python sau để thiết lập môi trường:
import numpy as np
import pandas as pd
import seaborn as sns
import pingouin as pg
%matplotlib inline
Hình ảnh minh họa về Jupyter Notebook với laptop và logo Jupyter, đại diện cho môi trường lập trình tương tác.
Các lệnh này tải các thư viện cần thiết. NumPy rất hữu ích cho mọi loại phép toán số học, bao gồm cả thống kê, và thường được coi là “tấm chăn an toàn” trong phân tích dữ liệu. Lệnh thứ hai tải pandas dưới biệt danh “pd” để tiết kiệm thời gian gõ. Seaborn là một công cụ tuyệt vời để tạo các biểu đồ thống kê và đã được sử dụng để vẽ biểu đồ tán xạ và đường hồi quy. Pingouin (tiếng Pháp nghĩa là “chim cánh cụt”) là một thư viện chuyên thực hiện các kiểm định thống kê và sẽ được dùng để xây dựng các mô hình hồi quy. Dòng cuối cùng %matplotlib inline
đảm bảo rằng mọi biểu đồ sẽ hiển thị trực tiếp trong Jupyter notebook thay vì trong một cửa sổ riêng biệt.
Với tất cả các thư viện cần thiết đã được tải, tôi có thể tạo một DataFrame pandas từ dữ liệu của mình:
battery = pd.read_csv("data/device_batteries.csv")
Để kiểm tra cấu trúc của DataFrame mới, tôi sử dụng hàm head()
:
battery.head()
Ảnh chụp màn hình kết quả lệnh `battery.head()` trong Python, hiển thị 5 dòng dữ liệu đầu tiên của DataFrame pandas về pin thiết bị.
Lệnh này hiển thị vài dòng đầu tiên của dữ liệu, giúp tôi nắm được cách dữ liệu được tổ chức. Mặc dù tôi đã tự tạo dữ liệu này, nhưng lệnh này cực kỳ hữu ích khi làm việc với các bộ dữ liệu tải xuống từ các nguồn như Kaggle.
Bước tiếp theo là lấy các thống kê mô tả từ tập dữ liệu. Phương thức describe()
của DataFrame sẽ thực hiện điều đó:
battery.describe()
Bảng thống kê mô tả dữ liệu pin thiết bị (count, mean, std, min, max, percentile) được tạo bằng hàm `describe()` của pandas trong Python.
Kết quả là một bảng chứa các thống kê mô tả cơ bản như số lượng (count), giá trị trung bình (mean), độ lệch chuẩn (standard deviation), giá trị nhỏ nhất (minimum) và lớn nhất (maximum), cũng như các tứ phân vị (25th, 50th – median, 75th percentile) cho tất cả các cột số trong DataFrame. Tất cả các số liệu này giúp tôi có cái nhìn tổng quan về dữ liệu.
Trực Quan Hóa Và Xây Dựng Mô Hình Hồi Quy Tuyến Tính Bằng Python
Với dữ liệu đã được nhập và chuẩn bị, đã đến lúc khám phá các mối quan hệ.
Phân Tích Dữ Liệu Pin Điện Thoại
Tôi bắt đầu bằng cách tạo biểu đồ tán xạ (scatter plot) của thời gian bật màn hình điện thoại so với mức giảm pin tính bằng phần trăm:
sns.relplot(x='phone_screen_on',y='phone_battery',data=battery)
Biểu đồ tán xạ (scatter plot) của thời gian bật màn hình điện thoại so với mức giảm pin, được tạo bằng thư viện Seaborn trong Python.
Biểu đồ này cho Seaborn biết để tạo biểu đồ với thời gian bật màn hình làm trục x và mức giảm pin làm trục y. Quan sát kỹ, các điểm dữ liệu dường như sắp xếp gần như thành một đường thẳng. Tôi quyết định vẽ đường hồi quy để xem đường thẳng sẽ khớp tốt như thế nào:
sns.regplot(x='phone_screen_on',y='phone_battery',data=battery)
Đồ thị hồi quy tuyến tính (regression plot) thể hiện mối quan hệ giữa thời gian bật màn hình và mức giảm pin của điện thoại, được vẽ bằng Seaborn.
Đường thẳng khớp khá tốt với dữ liệu.
Tuy nhiên, làm thế nào để xác minh độ khớp này và làm thế nào để tái tạo phương trình được sử dụng để tạo ra đường thẳng? Đó là lúc Pingouin phát huy tác dụng. Có nhiều thư viện khác cho phép bạn thực hiện các kiểm định thống kê và hồi quy, nhưng Pingouin là lựa chọn yêu thích của tôi vì tôi thấy nó dễ sử dụng nhất.
Tôi sử dụng hàm hồi quy tuyến tính của Pingouin cho thời gian bật màn hình so với mức giảm pin:
pg.linear_regression(battery['phone_screen_on'],battery['phone_battery'])
Bảng kết quả hồi quy tuyến tính từ thư viện Pingouin, hiển thị các hệ số (intercept, phone_screen_on) và chỉ số thống kê (se, T, p-val, r2) cho dữ liệu pin điện thoại.
Pingouin tạo ra một bảng kết quả. Các con số quan trọng nằm ở phía bên trái. Nếu bạn còn nhớ đại số, phương trình của một đường thẳng là y = mx + b. Trong hồi quy tuyến tính, chúng ta thường viết lại thành y = a + bx. Ở đây, “a” là hệ số chặn (intercept), nơi đường thẳng cắt trục y, có giá trị là 5.339232. “b” là hệ số của x (thời gian bật màn hình), có giá trị 0.201630, xác định độ dốc của đường thẳng. Vì vậy, phương trình mô hình của chúng ta là y = 5.339232 + 0.201630x.
Các con số khác cho chúng ta biết độ khớp của đường thẳng này tốt đến mức nào. “se” là “standard error” (sai số chuẩn), đo lường mức độ sai khác giữa đường thẳng và các điểm dữ liệu. Sai số chuẩn càng thấp, độ khớp càng tốt. Đối với thời gian bật màn hình, giá trị này khoảng 0.20, cho thấy đường thẳng khớp tốt với dữ liệu. “T score” là t-statistic của kiểm định t của Student, kiểm định giả thuyết rằng hệ số tương quan là 0 (nghĩa là không có mối tương quan). Giá trị lớn hơn 2 hoặc nhỏ hơn -2 thường cho thấy kết quả có ý nghĩa thống kê. “p-value” là xác suất mà thống kê mẫu (trong trường hợp này là giá trị t) sẽ cực đoan hoặc cực đoan hơn nếu giả thuyết vô hiệu là đúng. Hầu hết các nhà thống kê sử dụng ngưỡng tối đa là 0.05 để chấp nhận hoặc bác bỏ giả thuyết vô hiệu. Vì t-statistic lớn hơn 2 và p-value nhỏ hơn 0.05, chúng ta có thể bác bỏ giả thuyết vô hiệu rằng không có mối quan hệ giữa thời gian bật màn hình và mức giảm pin ở mức ý nghĩa 0.05 và 0.01.
“r2” và “r2_adjusted” là bình phương của hệ số tương quan (R-squared). Giá trị cao ở đây cũng có nghĩa là đường thẳng khớp tốt. Hai cột cuối cùng là khoảng tin cậy (confidence intervals), đại diện cho các vùng mà các giá trị của phương trình có thể nằm trong đó ở mức tin cậy 2.7% và 97.5%. Các vùng được tô bóng trong các biểu đồ hồi quy cũng biểu thị khoảng tin cậy.
Bây giờ chúng ta đã có một mô hình, chúng ta có thể thay thế các giá trị vào biến thời gian bật màn hình để dự đoán mức pin sẽ giảm bao nhiêu. Tôi có thể định nghĩa một hàm Python cho điều này:
def phone_battery_usage(minutes):
return 5.339232 + 0.201630 * minutes
Để tính mức sử dụng cho ba giờ hoặc 180 phút:
phone_battery_usage(180)
Phân Tích Dữ Liệu Pin Máy Tính Bảng
Chúng ta sẽ thực hiện điều tương tự cho máy tính bảng. Đầu tiên là biểu đồ tán xạ:
sns.relplot(x='tablet_screen_on',y='tablet_battery',data=battery)
Biểu đồ tán xạ (scatter plot) minh họa mối quan hệ giữa thời gian bật màn hình và mức giảm pin của máy tính bảng.
Một lần nữa, dường như có một mối tương quan tuyến tính. Hãy vẽ đường hồi quy:
sns.regplot(x='tablet_screen_on',y='tablet_battery',data=battery)
Đồ thị hồi quy tuyến tính được tạo bằng Seaborn, cho thấy sự phụ thuộc tuyến tính giữa thời gian bật màn hình và mức giảm pin trên máy tính bảng.
Một độ khớp tốt khác. Hãy thử hồi quy tuyến tính Pingouin:
pg.linear_regression(battery['tablet_screen_on'],battery['tablet_battery'])
Bảng kết quả phân tích hồi quy tuyến tính từ thư viện Pingouin cho dữ liệu pin máy tính bảng, bao gồm các hệ số và giá trị p-val, r2.
Mô hình cho máy tính bảng là *mức giảm pin = 5.017013 + 0.112511 (thời gian bật màn hình)**. Đây là một độ khớp tốt, với T = 6.202436, p = 0.001591, và R² = 0.884979.
Kết Luận Và Ứng Dụng Thực Tiễn Từ Nghiên Cứu Pin Bằng Python
Một điều khiến tôi bất ngờ là mối quan hệ tuyến tính lại đúng trong thực tế như vậy. Mức tiêu thụ pin là tuyến tính cho cả điện thoại và máy tính bảng của tôi. Điều này có thể phù hợp với một số nghiên cứu về mức tiêu thụ pin của pin Lithium-ion, nơi chúng giảm nhanh hơn khi bạn bắt đầu sử dụng và về cuối chu kỳ sạc, nhưng đường cong xả vẫn duy trì tuyến tính ở giữa, theo Ufine Battery. Dự án này chứng minh giá trị của phân tích thống kê.
Phân tích thống kê cung cấp một cách tiếp cận khoa học và chặt chẽ hơn để trả lời các câu hỏi. Với các phần mềm hiện đại như Python, Seaborn và Pingouin, việc khám phá dữ liệu và rút ra kết luận trở nên dễ dàng hơn bao giờ hết đối với các nhà nghiên cứu và cả những người dùng phổ thông muốn tìm hiểu sâu về thiết bị công nghệ của mình.
Bạn đã từng thử phân tích dữ liệu trên thiết bị của mình chưa? Hãy chia sẻ trải nghiệm hoặc những câu hỏi của bạn về việc tối ưu hóa pin điện thoại/máy tính bảng trong phần bình luận bên dưới, hoặc khám phá thêm các bài viết chuyên sâu khác về khoa học dữ liệu và ứng dụng công nghệ trên thichcongnghe.net!
Tài liệu tham khảo:
- Ufine Battery. (n.d.). How to read lithium battery discharge curve and charging curve.