Pandalar ile TRAI`den Mobil Veri Hızını Analiz Etme

| | | | | | | | | | | | | | | |

Mobil veri hızlarını analiz etmek için TRAI`den alınan gerçek bir veri kümesini kullanalım ve bu ay belirli bir operatör veya eyalet için ortalama hızları görmeye çalışalım. Ayrıca, ilginç sonuçlar üretmek için Pandaların herhangi bir gerçek veri üzerinde ne kadar kolay kullanılabileceğini gösterecek.

Veri kümesi hakkında —
Hindistan Telekomünikasyon Düzenleme Kurumu (TRAI), MySpeed ‚Äã‚Äã(TRAI) . Buna, kullanıcı tarafından başlatılan hız testleri veya uygulama tarafından gerçekleştirilen periyodik arka plan testleri dahildir. Bu veri setini analiz etmeye ve bu ay belirli bir operatör veya durum için ortalama hızları görmeye çalışacağız.

Ham veri yapısını kontrol etme:

  • TRAI MySpeed ‚Äã‚ÄãPortal adresine gidin ve geçen ayın CSV dosyasını yükleyin İndir bölümünde. Bu makalede kullanılan CSV dosyasını da indirebilirsiniz: sept18_publish.csv veya sept18_publish_drive.csv

    Veri kümesindeki sütun adları

    1. sütun Ağ Operatörünün - JIO, Airtel vb.
    2. sütun, Ağ Teknolojisi - 3G veya 4G ile ilgilidir.
    3. sütun, başlatılan Test Türüdür - yükleyin veya indirin.
    4. sütun, Kilobayt/saniye cinsinden Ölçülen Hız ‚Äã‚Äã `dir. Ölçüm sırasındaki Sinyal Gücü
    .
    6. sütun Yerel Hizmet Alanı (LSA) veya testin yapıldığı dairedir - Delhi, Orissa vb. Buna basitçe `durumlar` diyeceğiz.

  • NOT. Bazı cihazların sinyali kesememeleri nedeniyle sinyal gücü na (Kullanılamaz) olabilir. İşlemi basitleştirmek için hesaplamalarımızda bu parametrenin kullanımını göz ardı edeceğiz. Ancak bu, filtreleme sırasında kolayca bir koşul olarak eklenebilir.

    Gerekli paketler -

    Pandalar - a popüler veri analizi araç seti. Büyük veri kümelerini kırmak için çok güçlü.
    Numpy - homojen veri dizileri üzerinde hızlı ve verimli işlemler sağlar. Bunu pandalar ve matplotlib ile birlikte kullanacağız.
    Matplotlib - bir çizim kitaplığıdır. Çubuk grafikler yapmak için onun çubuk çizim fonksiyonunu kullanacağız.

    Verileri analiz etmeye başlayalım.

    Adım # 1: Paketleri içe aktarın ve bazı sabitleri tanımlayın.


    import pd olarak pandalar

    içe aktar np olarak numpy

    import matplotlib.pyplot as plt


    # bazı sabitleri tanımlayın


    # CSV veri kümesi adı

    DATASET_FILENAME = `sept18_publish.csv`


    # filtrelenecek bir operatör tanımlayın.

    CONST_OPERATOR = `JIO`


    # filtrelenecek durumu tanımlayın.

    CONST_STATE = `Delhi`


    # filtreleme için teknoloji tanımlayın

    CONST_TECHNOLOGY = ` 4G`

    Adım # 2: Bir histogram oluşturma işlevine kolayca aktarılabilmesi için nihai hesaplanan sonuçları depolayacak birden çok liste tanımlayın. Durum (veya operatör), indirme hızı ve indirme hızı sırayla saklanır, böylece indeks, durum (veya operatör) ve bunlara karşılık gelen indirme ve yükleme hızlarına erişilebilir.

    Örneğin, final_states [2 ], final_download_speeds [2] ve final_upload_speeds [2] , 3. durumu için karşılık gelen değerleri ‚Äã‚Äã verecektir.


    # tanımlı listeler

    final_download_speeds = []

    final_upload_speeds = []

    final_states < kod sınıfı = "anahtar kelime"> = []

    final_operators = []

    Adım # 3: < /stron g> Dosyayı read_csv() Pandas read_csv() kullanarak içe aktarın ve ' df '. Bu, üzerinde çalışacağımız CSV içeriğinin bir DataFrame`ini oluşturacaktır.


    df = pd.read_csv (DATASET_FILENAME)


    # verilere dayalı olarak her sütun için başlık atayın
    # bu, sütunlara kolayca erişmemizi sağlar


    df.columns = [ `Servis Sağlayıcı` , ` Technology` , `Test Tipi` ,

    `Veri Hızı` , `Sinyal Gücü` , `Durum` ]

    4. Adım: İlk olarak, bu veri kümesindeki tüm benzersiz durumları ve ifadeleri bulalım ve bunları ilgili durum listelerinde saklayalım. ve ifadeler.

    Pandalar için operatörler = df [ `Servis Sağlayıcı` ]. benzersiz ()

    print ( `OPERATÖRLER Bulunan:` , operatörler)

    Çıkış:

 STATES Bulunan: [`Kerala`` Rajasthan` `Maharashtra`` UP Doğu`` Karnataka` nan `Madhya Pradesh`` Kolkata`` Bihar`` Gujarat`` UP West, Orissa, Tamil Nadu, Delhi, Assam, Andhra Pradesh, Haryana, Pencap, Kuzey Doğu, Mumbai, Chennai, Himachal Pradesh, Jammu & amp; Keşmir`` Batı Bengal`] OPERATÖRLER Bulundu: [`IDEA`` JIO` `AIRTEL`` VODAFONE`` CELLONE`] 

Adım # 5: Tanımlayın fixed_operator işlevi, deyimi sabit tutacak ve o deyim için mevcut tüm durumları yineleyecek. Sabit bir durum için benzer bir fonksiyon oluşturabiliriz.


< / tr>

# filtre operatörü ve teknolojileri
# -ilk sırasında, herkes için ortak olacaktır

filtrelendi = df [(df [] ` Servis Sağlayıcı` ] = = CONST_OPERATOR)

& amp; (df ‚Äã‚Äã[ `Teknoloji` ] = = CONST_TECHNOLOGY)]


# yineleme her durum üzerinde

için durum durumları:

#

# yalnızca geçerli durum verileri

temel = filtrelenmiş [filtrelenmiş [ ` Durum` ] = = durum ]


# sadece filtre dow test türüne göre yükleme hızları

down = base [base [ `Test Type` ] = = `indir` ]

# filtre yalnızca test türüne dayalı indirme hızı

yukarı = base [base [ ` Test Tipi ` ] = = ` upload` ]


# Veri Hızında ortalama hızı hesaplayın ‚Äã‚Äã

Pandas.mean () yöntemini kullanan # sütun

avg_down = aşağı [ `Veri Hızı` ]. ortalama ()

# ortalama hızı hesaplayın

# Veri Hızı sütununda

avg_up = yukarı [ `Veri Hızı` ]. ortalama ()

# değerleri atın ‚Äã‚Äãeğer ortalama bir sayı değilse (nan)

# ve yalnızca geçerli olanları ekleyin

if (pd.isnull (avg_down) veya pd.isnull (avg_up)):

aşağı, yukarı = 0 , 0


başka :

final_stat es. ekleme (durum)

final_download_speeds.append (avg_down)

final_upload_speeds. ekleme (avg_up)


# 2 ondalık basamağa kadar yazdırır

print ( str (durum) + `- Ort. İndirin: ` +

str ( `% .2f` % avg_down) +

` Ort. Yükleme: ` + str ( `% .2f` % avg_up))

Çıkış :

 Kerala - Ort. İndirme: 26129.27 Ort. Yükleme: 5193.46 Rajasthan - Ort. İndirme: 27784.86 Ort. Yükleme: 5736.18 Maharashtra - Ort. İndirme: 20707.88 Ort. Yükleme: 4130,46 UP Doğu - Ort. İndir: 22451,35 Ort. Yükleme: 5727,95 Karnataka - Ort. İndirme: 16950.36 Ort. Yükleme: 4720.68 Madya Pradeş - Ort. İndir: 23594.85 Ort. Yükleme: 4802.89 Kalküta - Ort. İndir: 26747.80 Ort. Yükleme: 5655.55 Bihar - Ort. İndir: 31730.54 Ort. Yükleme: 6599.45 Gujarat - Ort. İndirme: 16377,43 Ort. Yükleme: 3642.89 UP Batı - Ort. İndirme: 23720,82 Ort. Yükleme: 5280.46 Orissa - Ort. İndir: 31502.05 Ort. Yükleme: 6895.46 Tamil Nadu - Ort. İndirme: 16689.28 Ort. Yükleme: 4107,44 Delhi - Ort. İndirme: 20308.30 Ort. Yükleme: 4877.40 Assam - Ort. İndir: 5653.49 Ort. Yükleme: 2864.47 Andhra Pradesh - Ort. İndirme: 32444.07 Ort. Yükleme: 5755,95 Haryana - Ort. İndirme: 7170.63 Ort. Yükleme: 2680.02 Pencap - Ort. İndirme: 14454,45 Ort. Yükleme: 4981.15 Kuzey Doğu - Ort. İndir: 6702.29 Ort. Yükleme: 2966.84 Bombay - Ort. İndir: 14070.97 Ort. Yükleme: 4118.21 Chennai - Ort. İndirme: 20054.47 Ort. Yükleme: 4602.35 Himaşal Pradeş - Ort. İndirme: 7436.99 Ort. Yükleme: 4020.09 Jammu & amp; Keşmir - Ort. İndirme: 8759.20 Ort. Yükleme: 4418.21 Batı Bengal - Ort. İndir: 16821.17 Ort. Karşıya Yükle: 3628.78 

Verilerin çizilmesi —

Belirli bir aralık boyunca eşit aralıklı değerler döndüren arange () Numpy yöntemini kullanın. Burada final_states listesinin uzunluğunu geçerek, 0`dan listedeki durum sayısına kadar ‚Äã‚Äã değerleri alıyoruz, örneğin [0, 1, 2, 3 ...]
Sonra bu yerde bir çubuk oluşturmak için bu indeksleri kullanabiliriz. İkinci çubuk, birinci çubuğun konumunu çubuğun genişliğine göre kaydırarak oluşturulur.


fig, ax = plt.subplots ()


# genişlik her bir bar

bar_width = 0,25


her çubuğun # opaklığı

opaklık = 0,8


# pozisyonları kaydet

index = np.arange ( len (f inal_states))


# plt. bar () pozisyon alır
# sütun, çizim için veri,
# her çubuğun genişliği ve diğer bazı
# opaklık ve renk gibi isteğe bağlı parametreler

p>


# bir indirme programı oluşturun

bar_download = plt.bar (index, final_download_speeds,

bar_width, alpha = opaklık,

renk = `b` , label = `İndir` )

# bir indirme oluştur program

bar_upload = plt.bar ( dizin + bar_width, final_upload_speeds,

bar_width, alpha = opaklık, renk = `g` ,

label = `Yükle` )


# grafik adı

plt.title ( `Ort. `

+ str (CONST_OPERATOR))


# X ekseni etiketi < / p>

plt.xlabel ( `Durumlar` )


# Y ekseni etiketi

plt.ylabel ( `Kbps cinsinden Ortalama Hızlar` )


# her sütunun altında bir etiket,
# durumla eşleşir

plt.xticks (index + bar_width, final_states, döndürme = 90 )


# lejand çiz
plt .le gend ()


# grafik düzenini katı yap
plt.tight_layout ()







> # grafiği göster
plt.show ()

Tahmini hızların histogramı

İki aylık verilerin karşılaştırılması —

Başka bir aya ait verileri de alalım ve veri hızlarındaki farkı görmek için birlikte çizelim.

Bu örnekte, önceki aya ait veri kümesi sept18_publish.csv, ve gelecek ayın veri kümesi — oct18_publish.csv .

Sadece aynı adımları tekrar izlememiz gerekiyor. Verileri bir ay daha okuyun. Sonraki veri çerçevelerinde filtreleyin ve ardından biraz farklı bir yöntem kullanarak çizin. Sütunların inşası sırasında, 3. ve 4. sütunları (ikinci dosyanın yüklenmesine ve indirilmesine karşılık gelen) sütunların genişliğinin 2 ve 3 katı büyüteceğiz, böylece doğru konumlarında olacaklar.

4 çubuk çizerken kaydırma mantığı

2 aylık karşılaştırma verileri için uygulama aşağıdadır:


içe aktar pandaları pd olarak

içe aktar np olarak numpy

içe aktar matplotlib .pyplot as plt

import time


Son ay #

VERİLER ET_DOSYA ADI = ` https://myspeed.trai.gov.in/download/sept18_publish.csv `


# yeni ay

DATASET_FILENAME2 = ` https://myspeed.trai.gov.in/download/oct18_publish.csv `

CONST_OPERATOR = `JIO` < / p>

CONST_STATE = `Delhi`

CONST_TEC HNOLOGY = `4G`


# panda dosyasını okuyun ve veri çerçevesi olarak kaydedin

df = pd.read_csv (DATASET_FILENAME)

df2 = pd.read_csv (DATASET_FILENAME2)


# sütun adları atama

df .columns = [ `Servis Sağlayıcı ` , `Teknoloji` , ` Test Türü ` ,

` Veri Hızı` , `Sinyal Gücü` , `Durum` >

df2.columns = [ `Servis Sağlayıcı` , `Teknoloji` , ` Test Tipi` ,

`Veri Hızı` , `Sinyal Gücü` , ` State` ]


# benzersiz durumları bulun ve görüntüleyin

durumlar = df [ `Durum` ]. benzersiz ()

print ( ` STATES Bulunan:` , state)


# benzersiz operatörleri bul ve görüntüle

operatörler = df [ `Servis Sağlayıcı` ].unique ()

yazdır ( `OPERATÖRLER Bulundu: ` , operatörler)


# tanımlı listeler

final_download_speeds = []

final_upload_speeds = []


final_download_speeds_saniye = []

final_upload_speeds_saniye = []


final_states = []

final_operators = []


# verilere sütun adları atama

df.columns = [ `Service Provider` , `Teknoloji` , ` Test Tipi` ,

`Veri Hızı` , `Sinyal Gücü` , ` Durum` ]

df2.sütunlar = [ `Servis Sağlayıcı` , ` Teknoloji` , `Test Türü` ,

`Veri Hızı` , ` Sinyal Gücü` , `Durum` ]



print ( `Veri karşılaştırması` + str (CONST_OPERATOR))

filtrelendi = df [(df [ `Servis Sağlayıcı` > = = CONST_OPERATOR)

& amp; (df ‚Äã‚Äã[ `Teknoloji` ]

Shop

Learn programming in R: courses

$

Best Python online courses for 2022

$

Best laptop for Fortnite

$

Best laptop for Excel

$

Best laptop for Solidworks

$

Best laptop for Roblox

$

Best computer for crypto mining

$

Best laptop for Sims 4

$

Latest questions

NUMPYNUMPY

psycopg2: insert multiple rows with one query

12 answers

NUMPYNUMPY

How to convert Nonetype to int or string?

12 answers

NUMPYNUMPY

How to specify multiple return types using type-hints

12 answers

NUMPYNUMPY

Javascript Error: IPython is not defined in JupyterLab

12 answers


Wiki

Python OpenCV | cv2.putText () method

numpy.arctan2 () in Python

Python | os.path.realpath () method

Python OpenCV | cv2.circle () method

Python OpenCV cv2.cvtColor () method

Python - Move item to the end of the list

time.perf_counter () function in Python

Check if one list is a subset of another in Python

Python os.path.join () method