ในบทช่วยสอนนี้ เราจะวิเคราะห์ข้อมูลความเร็วอินเทอร์เน็ตมือถือโดยใช้แพ็กเกจ pandas ข้อมูลดาวน์โหลดได้จากเว็บไซต์อย่างเป็นทางการของ TRAI
ขั้นตอนดาวน์โหลดข้อมูล
1. เข้าเว็บไซต์ TRAI (https://myspeed.trai.gov.in/) 2. เลื่อนลงมาสิ้นสุดหน้า 3. จะพบข้อมูลความเร็วมือถือแยกตามเดือน 4. ดาวน์โหลดข้อมูลเดือนกันยายน (September mobile data speeds)
คอลัมน์ในไฟล์ CSV
- Network Name
- Network Technology
- Type Of Test
- Speed
- Signal Strength
- State
เราจะใช้ไลบรารี pandas, numpy, matplotlib เริ่มเขียนโค้ดวิเคราะห์กันเลย
ตัวอย่างโค้ด (ส่วนที่ 1: โหลดข้อมูลและดูค่าเฉพาะ)
import pandas as pd import numpy as np import matplotlib.pyplot as plot # constants DATASET = 'sept19_publish.csv' NETWORK_NAME = 'JIO' STATE = 'Andhra Pradesh' # lists to store values download_speeds = [] upload_speeds = [] states = [] operators = [] # importing the dataset data_frame = pd.read_csv(DATASET) # assigning column names for easy access data_frame.columns = ['Network', 'Technology', 'Type Of Test', 'Speed', 'Signal Strength', 'State'] # getting unique states and operators 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']
ตัวอย่างโค้ด (ส่วนที่ 2: คำนวณค่าเฉลี่ยแยกตามรัฐ)
# filter data for selected network
JIO = data_frame[data_frame['Network'] == NETWORK_NAME]
# iterate through all states
for state in unique_states:
# get data for current state
current_state = JIO[JIO['State'] == state]
# get download speed
download_speed = current_state[current_state['Type Of Test'] == 'download']
download_speed_avg = download_speed['Speed'].mean()
# get upload speed
upload_speed = current_state[current_state['Type Of Test'] == 'upload']
upload_speed_avg = upload_speed['Speed'].mean()
# check for NaN
if pd.isnull(download_speed_avg) or pd.isnull(upload_speed_avg):
download_speed, upload_speed = 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}')ผลลัพธ์ (บางส่วน)
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
ตัวอย่างโค้ด (ส่วนที่ 3: วาดกราฟแท่งเปรียบเทียบ)
# plotting the graph
fig, axes = plot.subplots()
bar_width = 0.25
re_states = np.arange(len(states))
plot.figure(num=None, figsize=(12, 5))
# download speed bars
plot.bar(re_states, download_speeds, bar_width, color='g', label='Avg. Download Speed')
# upload speed bars
plot.bar(re_states + bar_width, upload_speeds, bar_width, color='b', label='Avg. Upload Speed')
plot.title('Avg. Download|Upload Speed for ' + NETWORK_NAME)
plot.xlabel('States')
plot.ylabel('Average Speeds in Kbps')
plot.xticks(re_states + bar_width, states, rotation=90)
plot.legend()
plot.tight_layout()
plot.show()ผลลัพธ์

สรุป
คุณสามารถวาดกราฟประเภทต่างๆ ตามต้องการได้ ลองเล่นกับชุดข้อมูลนี้โดยการพล็อตกราฟต่างๆ หากมีข้อสงสัย สามารถถามได้ในส่วนความคิดเห็น