在Python中使用Pandas分析TRAI的移动数据速度
在本教程中,我们将使用Pandas包来分析移动数据速度。请从TRAI官方网站下载移动速度。
算法
1.进入[TRAI]([](https://myspeed.trai.gov.in/)<https://myspeed.trai.gov.in/>)网站。
2.向下滚动到页面底部。
3.您会找到不同月份的移动速度数据。
4.下载9月份的移动数据速度。
让我们看一下CSV文件中的列。
- 网络名称
-
网络技术
-
测试类型
-
速度
-
信号强度
-
状态
我们需要Pandas、NumPy和Matplotlib库,让我们开始编码分析数据。
例子
# 导入所需库
import pandas as pd
import numpy as np
import matplotlib.pyplot as plot
# 常量
DATASET = 'sept19_publish.csv'
NETWORK_NAME = 'JIO'
STATE = 'Andhra Pradesh'
# 存储值的列表
download_speeds = []
upload_speeds = []
states = []
operators = []
# 使用Pandas导入数据集
data_frame = pd.read_csv(DATASET)
# 为方便访问分配列名
data_frame.columns = ['Network', 'Technology', 'Type Of Test', 'Speed', 'Signal Strength', 'State']
# 从数据集中获取唯一的状态和运营商
unique_states = data_frame['State'].unique()
unique_operators = data_frame['Network'].unique()
print(unique_states)
print()
print(unique_operators)
输出
如果您运行上面的程序,您将获得以下结果。
['Kolkata' 'Punjab' 'Delhi' 'UP West' 'Haryana' nan 'West Bengal' 'Tamil Nadu' 'Kerala' 'Rajasthan' 'Gujarat' 'Maharashtra' 'Chennai' 'Madhya Pradesh' 'UP East' 'Karnataka' 'Orissa' 'Andhra Pradesh' 'Bihar' 'Mumbai' 'North East' 'Himachal Pradesh' 'Assam' 'Jammu & Kashmir']
['JIO' 'AIRTEL' 'VODAFONE' 'IDEA' 'CELLONE' 'DOLPHIN']
继续……
# 获取我们想要的一个网络相关的数据
# 我们先前已经声明了网络
# 这将过滤数据
JIO = data_frame[data_frame['Network'] == NETWORK_NAME]
# 遍历所有状态
for state in unique_states:
# 获取当前状态的所有数据
current_state = JIO[JIO['State'] == state]
# 从current_state获取下载速度
download_speed = current_state[current_state['Type Of Test'] == 'download']
# 计算下载速度平均值
download_speed_avg = download_speed['Speed'].mean()
# 从current_state获取上传速度
upload_speed = current_state[current_state['Type Of Test'] == 'upload']
# 计算上传速度平均值
upload_speed_avg = upload_speed['Speed'].mean()
# 检查平均值是否NaN
if pd.isnull(download_speed_avg) or pd.isnull(upload_speed_avg):
# 将两个速度都分配为0
download_speed, upload_speed = 0, 0
else:
# 如果值不是NaN,则将状态添加到绘图中
states.append(state)
download_speeds.append(download_speed_avg)
upload_speeds.append(upload_speed_avg)
# 输出下载和上传的平均值
print(f'{state}: Download Avg. {download_speed_avg:.3f} Upload Avg. {upload_speed_avg:.3f}')
输出
如果您运行以上代码,则会得到以下输出结果。
加尔各答: 下载平均值 31179.157 上传平均值 5597.086
旁遮普邦: 下载平均值 29289.594 上传平均值 5848.015
德里: 下载平均值 28956.174 上传平均值 5340.927
西北部邦: 下载平均值 21666.673 上传平均值 4118.200
哈里亚纳邦: 下载平均值 6226.855 上传平均值 2372.987
西孟加拉邦: 下载平均值 20457.976 上传平均值 4219.467
泰米尔纳德邦: 下载平均值 24029.364 上传平均值 4269.765
喀拉拉邦: 下载平均值 10735.611 上传平均值 2088.881
拉贾斯坦邦: 下载平均值 26718.066 上传平均值 5800.989
古吉拉特邦: 下载平均值 16483.987 上传平均值 3414.485
马哈拉施特拉邦: 下载平均值 20615.311 上传平均值 4033.843
钦奈: 下载平均值 6244.756 上传平均值 2271.318
中央邦: 下载平均值 15757.381 上传平均值 3859.596
东北: 下载平均值 28827.914 上传平均值 5363.082
卡纳塔克邦: 下载平均值 10257.426 上传平均值 2584.806
奥里萨邦: 下载平均值 32820.872 上传平均值 5258.215
安得拉邦: 下载平均值 8260.547 上传平均值 2390.845
比哈尔邦: 下载平均值 9657.874 上传平均值 3197.166
孟买: 下载平均值 9984.954 上传平均值 3484.052
喜马偕尔邦: 下载平均值 4472.731 上传平均值 2356.284
喜马拉雅邦: 下载平均值 6985.774 上传平均值 3970.431
阿萨姆邦: 下载平均值 4343.987 上传平均值 2237.143
查谟-克什米尔邦: 下载平均值 1665.425 上传平均值 802.925
接续部分…
# 绘制图表
fix, axes = plot.subplots()
# 设置柱形宽度
bar_width = 0.25
# 重新排列各邦位置
re_states = np.arange(len(states))
# 设置宽度和高度
plot.figure(num = None, figsize = (12, 5))
# 绘制下载速度
plot.bar(re_states, download_speeds, bar_width, color = 'g', label = 'Avg. Download
Speed')
# 绘制上传速度
plot.bar(re_states + bar_width, upload_speeds, bar_width, color='b', label='Avg. Up
load Speed')
# 图表标题
plot.title('Avg. Download|Upload Speed for ' + NETWORK_NAME)
# x轴标签
plot.xlabel('States')
# y轴标签
plot.ylabel('Average Speeds in Kbps')
# 对应各柱下方标签,即各邦
plot.xticks(re_states + bar_width, states, rotation = 90)
# 添加图例
plot.legend()
# 调整布局
plot.tight_layout()
# 显示图表
plot.show()
输出
如果运行以上代码,将会得到以下图表。
结论
您可以根据需要绘制不同的图表。通过绘制不同的图表来操作数据集。如果您对本教程有任何疑问,请在评论区中提出。