Hướng dẫn này phân tích dữ liệu tốc độ di động từ trang web chính thức của TRAI (Telecom Regulatory Authority of India) sử dụng Pandas, NumPy và Matplotlib.
Chuẩn bị dữ liệu
- Truy cập TRAI MySpeed.
- Kéo xuống cuối trang, tải file CSV dữ liệu tháng 9 (hoặc tháng bất kỳ).
Các cột chính trong file CSV:
- Network Name (Tên nhà mạng)
- Network Technology (Công nghệ: 4G, 3G...)
- Type Of Test (download/upload)
- Speed (tốc độ Kbps)
- Signal Strength (cường độ tín hiệu)
- State (bang/tiểu bang)
Mã nguồn phân tích
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
DATASET = 'sept19_publish.csv'
NETWORK_NAME = 'JIO'
STATE = 'Andhra Pradesh'
download_speeds = []
upload_speeds = []
states = []
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("States:", unique_states)
print("Operators:", unique_operators)
# Lọc dữ liệu cho nhà mạng JIO
JIO = data_frame[data_frame['Network'] == NETWORK_NAME]
for state in unique_states:
current_state = JIO[JIO['State'] == state]
download_speed = current_state[current_state['Type Of Test'] == 'download']
download_speed_avg = download_speed['Speed'].mean()
upload_speed = current_state[current_state['Type Of Test'] == 'upload']
upload_speed_avg = upload_speed['Speed'].mean()
if pd.isnull(download_speed_avg) or pd.isnull(upload_speed_avg):
download_speed_avg, upload_speed_avg = 0, 0
else:
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}')Kết quả trung bình tốc độ (một phần)
Kolkata: Download Avg. 31179.157 Upload Avg. 5597.086 Punjab: Download Avg. 29289.594 Upload Avg. 5848.015 Delhi: Download Avg. 28956.174 Upload Avg. 5340.927 ... Jammu & Kashmir: Download Avg. 1665.425 Upload Avg. 802.925
Vẽ biểu đồ so sánh
fig, axes = plt.subplots()
bar_width = 0.25
re_states = np.arange(len(states))
plt.figure(figsize=(12, 5))
plt.bar(re_states, download_speeds, bar_width, color='g', label='Avg. Download Speed')
plt.bar(re_states + bar_width, upload_speeds, bar_width, color='b', label='Avg. Upload Speed')
plt.title('Avg. Download|Upload Speed for ' + NETWORK_NAME)
plt.xlabel('States')
plt.ylabel('Average Speeds in Kbps')
plt.xticks(re_states + bar_width, states, rotation=90)
plt.legend()
plt.tight_layout()
plt.show()
Kết luận
Bạn có thể tùy chỉnh biểu đồ theo nhu cầu: so sánh các nhà mạng, công nghệ, hoặc vẽ heatmap. Hãy khám phá thêm với dataset này.