我们将在 python 中使用两个很酷的包,即speedtest
和matplotlib
. speedtest
将向我们提供有关我们互联网连接的信息,matplotlib
并允许我们根据这些信息生成图表。
安装 speedtest 和 matplotlib。
pip install matplotlib
pip install speedtest-cli
我们还将使用一些内置的 python 包datetime
和csv
. CSV(或逗号分隔值)是一种快速存储数据的方式。我们将使用它来存储有关我们互联网速度的信息,然后使用 matplotlib 使这些信息可视化。
收集数据
创建一个名为的python文件 monitor.py,
让我们把下面的代码放在里面
import speedtest
s = speedtest.Speedtest()
while True:
print(s.download(), s.upload())
在ctrl + C
退出这个无限循环之前,我们应该会看到以下输出。
75020309.22943133 24381170.373616524
105192450.00822952 40653433.153288215
因此,通过创建speedtest
as的新实例s
并测试上传和下载速度,我们可以得到以每秒比特数为单位的上传和下载速度。要将其转换为每秒兆位,(Mb/s)
我们可以执行以下操作以包括测试时间:
import speedtest
import datetime
import time
s = speedtest.Speedtest()
while True:
time_now = datetime.datetime.now().strftime("%H:%M:%S")
downspeed = round((round(s.download()) / 1048576), 2)
upspeed = round((round(s.upload()) / 1048576), 2)
print(f"time: {time_now}, downspeed: {downspeed} Mb/s, upspeed: {upspeed} Mb/s")
# 60 seconds sleep
time.sleep(60)
这导致:
time: 12:44:15, downspeed: 95.04 Mb/s, upspeed: 32.85 Mb/s
time: 12:44:35, downspeed: 99.46 Mb/s, upspeed: 38.76 Mb/s
time: 12:44:56, downspeed: 100.59 Mb/s, upspeed: 38.94 Mb/s
现在我们将继续将其记录在 CSV 文件中。CSV 是大型文本文件,其值以逗号分隔。这是我的一个例子:
time,downspeed,upspeed
12:17:01,100.05,38.28
12:17:21,100.53,37.85
12:17:42,74.87,25.92
我们从标题行开始,然后拆分信息。我们可以把它想象成一个 excel 表:
为了在 python 中记录到 csv 文件中,我们需要导入 CSV 包并“打开”一个 CSV 文件(如果不存在,它将创建一个)。
import speedtest
import datetime
import csv
import time
s = speedtest.Speedtest()
with open('test.csv', mode='w',newline='') as speedcsv:
csv_writer = csv.DictWriter(speedcsv, fieldnames=['time', 'downspeed', 'upspeed'])
csv_writer.writeheader()
count = 0
while count < 10:
time_now = datetime.datetime.now().strftime("%H:%M:%S")
downspeed = round((round(s.download()) / 1048576), 2)
upspeed = round((round(s.upload()) / 1048576), 2)
csv_writer.writerow({'time': time_now,
'downspeed': downspeed,
"upspeed": upspeed})
# 60 seconds sleep
time.sleep(5)
print(count)
count = count + 1
因此,当您让这段代码运行 4-5 分钟时,我们可以讨论发生了什么。第 7 行with open
基本上创建了一个名称test.csv
为 headers的 csv 文件name
,downspeed
并将upspeed
它们写入 csv.csv 文件。然后循环开始,每次由 speedtest 执行测试时,它都会将一个新行写入 csv,其中包含我们之前指定的时间、下载速度和上传速度。所以让我们现在去看看。
time,downspeed,upspeed
12:51:16,99.29,38.66
12:51:37,100.67,38.79
12:51:57,99.7,38.79
12:52:17,92.89,31.99
12:52:38,99.4,38.96
很酷,现在我们正在收集信息并将其存储在 csv 中。您可以使用文件名做各种聪明的事情,例如使用今天的日期命名,datetime
但现在我将其保留为测试。
您还可以设置检查以查看是否经过了一定的时间并在此之后停止应用程序,但我会将其留给您自己的创造力。
可视化数据
让我们制作另一个 python 文件make_graph.py来生成我们的互联网连接图。这是我们将使用 matplotlib 的地方。
import matplotlib.pyplot as plt
import csv
import matplotlib.ticker as ticker
times = []
download = []
upload = []
生成图形的最简单方法是使用数组。为了填充我们的数组,我们必须遍历我们的新 csv 文件
with open('test.csv', 'r') as csvfile:
plots = csv.reader(csvfile, delimiter=',')
next(csvfile)
for row in plots:
times.append(str(row[0]))
download.append(float(row[1]))
upload.append(float(row[2]))
print(times, "\n", download, "\n", upload)
['12:51:16', '12:51:37', '12:51:57', '12:52:17', '12:52:38']
[99.29, 100.67, 99.7, 92.89, 99.4]
[38.66, 38.79, 38.79, 31.99, 38.96]
所以现在我们正在解析我们的数据!在next(csvfile)
本质上跳过标题列(即是为了我们的利益而已,没有蟒蛇的)。现在我们开始使用matplotlib
我不是专家的标准。他们的文档非常广泛。
plt.plot(times, download, label='download', color='r')
plt.plot(times, upload, label='upload', color='b')
plt.xlabel('time')
plt.ylabel('speed in Mb/s')
plt.title("internet speed")
plt.legend()
plt.savefig('test_graph.jpg', bbox_inches='tight')
这段代码告诉 matplotlib 或plt
object 创建一个图形,其中标记为“下载”和“上传”的行根据各自的数组进行绘制。因此,对于下载和时间数组中的每个项目,都会在图表上对其进行标记。最后 x 和 y 轴获得标签并保存图形。