パンダを使用したTRAIモバイルデータレートの分析

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

TRAIの実際のデータセットを使用して、モバイルデータレートを分析し、今月の特定のオペレーターまたは州の平均速度を確認してみましょう。また、実際のデータでPandaを簡単に使用して、興味深い結果を生成できることも示します。

データセットについて—
インド電気通信規制庁(TRAI)は、アプリ MySpeed、(TRAI)。これには、ユーザーが開始する速度テストまたはアプリケーションによって実行される定期的なバックグラウンドテストが含まれます。このデータセットを分析して、今月の特定のオペレーターまたは州の平均速度を確認します。

生データ構造の確認:

  • TRAI MySpeed、ポータルにアクセスして、先月のCSVファイルをアップロードしますダウンロードセクションにあります。この記事で使用されているCSVファイルをダウンロードすることもできます: sept18_publish.csv または sept18_publish_drive.csv

  • このスプレッドシートファイルを開きます。
    。データセットは巨大であるため、ソフトウェアはすべての行をロードできないことを警告する場合があります。完璧です。また、Microsoft Excelを使用している場合は、SYLKファイルを開くことについて警告が表示される場合があります。このエラーはExcelの一般的なエラーであるため、無視できます。
    次に、データの場所を見てみましょう-

    データセットの列名

    最初の列はネットワークオペレーター-JIO、Airtelなどです。
    2番目の列はネットワークテクノロジー-3Gまたは4Gです。
    3番目の列はテストの種類が開始されます-アップロードまたはダウンロード
    4番目の列は測定された速度キロバイト/秒)
    5番目の列は測定中の信号強度
    6番目の列はローカルサービスエリア(LSA)、またはテストが行われた円- Delhi、Orissa など。これを単に「状態」と呼びます。

  • 注。 一部のデバイスは信号を傍受できないため、信号強度は na(利用不可)になる可能性があります。プロセスを単純化するために、計算でのこのパラメーターの使用は無視します。ただし、これはフィルタリング時の条件として簡単に追加できます。

    必要なパッケージ-

    パンダ-a人気のあるデータ分析ツールキット。大量のデータセットを処理するのに非常に強力です。
    Numpy-同種のデータの配列に対して高速で効率的な操作を提供します。これをパンダやmatplotlibと一緒に使用します。
    Matplotlib-プロットライブラリです。棒グラフ機能を使用して棒グラフを作成します。

    データの分析を開始しましょう。

    ステップ#1:パッケージをインポートし、いくつかの定数を定義します。


    import pandas as pd

    import numpy as np

    インポート matplotlib.pyplot as plt


    #いくつかの定数を定義


    #CSVデータセット名

    DATASET_FILENAME = `sept18_publish.csv`


    #フィルタリングする演算子を定義します。

    CONST_OPERATOR = `JIO`


    #フィルタリングする状態を定義します。

    CONST_STATE = `Delhi`


    #フィルタリングのテクノロジーを定義する

    CONST_TECHNOLOGY = `4G`

    ステップ2:最終的な計算結果を保存する複数のリストを定義して、ヒストグラム作成機能に簡単に渡すことができるようにします。状態(またはオペレーター)、ダウンロード速度、およびダウンロード速度が順番に保存されるため、インデックス、状態(またはオペレーター)、およびそれらに対応するダウンロードおよびアップロード速度にアクセスできます。

    たとえば、<コード> final_states [2]、final_download_speeds [2] 、および final_upload_speeds [2] は、 3rd状態に対応する値を示します。


    #リストを定義

    final_download_speeds = []

    final_upload_speeds = []

    final_states = []

    final_operators = []

    ステップ3:< / stron g> read_csv() Pandas read_csv()を使用してファイルをインポートし、&#39;に保存します。 df&#39;。これにより、作業するCSVコンテンツのDataFrameが作成されます。


    df = pd.read_csv(DATASET_FILENAME)


    #データに基づいて各列にヘッダーを割り当てます
    #これにより、列に簡単にアクセスできます


    df.columns = [ `サービスプロバイダー` `テクノロジー` `テストタイプ`

    `データ速度` `信号強度` `状態` ]

    ステップ4:まず、このデータセット内のすべての一意の状態ステートメントを見つけて、それぞれの状態のリストに保存しましょう。

    パンダには unique()メソッドを使用しますデータフレーム。


    #一意の状態を検索して表示します

    状態 = df [ `State` ]。 unique()

    print `状態見つかりました:` 、states)


    #一意の演算子を検索して表示

    演算子 = df [ `サービスプロバイダー` ]。 unique()

    print `オペレーター見つかりました:` 、演算子)

    終了: < / p>

    見つかった状態:[`Kerala``Rajasthan``Maharashtra``UP East``Karnataka` nan`Madhya Pradesh``Kolkata``Bihar``Gujarat``UP West、Orissa、タミルナードゥ州、デリー、アッサム州、アンドラプラデーシュ州、ハリヤーナ州、パンジャブ州、北東部、ムンバイ州、チェンナイ州、ヒマーチャルプラデーシュ州、ジャム&アンプ; Kashmir`` West Bengal`] OPERATORS Found:[` IDEA`` JIO`` AIRTEL`` VODAFONE`` CELLONE`] 

    ステップ#5:定義 fixed_operator 関数。ステートメントを一定に保ち、そのステートメントで使用可能なすべての状態を繰り返し処理します。固定状態に対して同様の関数を作成できます。


    #フィルター演算子とテクノロジー
    #-firstの間、すべての人に共通になります

    フィルタリングされた = df [(df [ `サービスプロバイダー` ] = = CONST_OPERATOR)

    &amp; (df、Äã、Äã[ `テクノロジー` ] = = CONST_TECHNOLOGY)]


    #繰り返します各状態について

    for 状態 in 状態:

    #現在の状態データのみ

    ベース<コードクラス="キーワード">=<コードクラス="プレーン">フィルタリング[フィルタリング[<コードクラス="文字列">`状態` ] = = 状態]


    #ダウのみをフィルタリングテストタイプに基づくnload速度

    ダウン = base [base [ `テストタイプ` ] = = `download` ]

    #テストタイプに基づいてダウンロード速度のみをフィルタリングする

    up = base [base [ `テストタイプ` ] = = `upload` ]


    #データ速度で平均速度を計算する、Äã‚Äã

    #Pandas.mean()メソッドを使用した列

    avg_down = down [ `データ速度` ]。 mean()

    #平均速度を計算する

    #データレート列

    avg_up = up [ `データ速度` ]。 mean()

    #値を破棄します。平均が数値(nan)でない場合は、

    #有効な値のみを追加します

    if (pd.isnull(avg_down) または pd.isnull(avg_up)):

    下、上 = 0 0


    else

    final_states。 append(state)

    final_download_speeds.append(avg_down)

    final_upload_speeds。追加(avg_up)


    #小数点以下2桁まで印刷します

    印刷 str (state) + `-平均ダウンロード:` +

    str `%.2f` avg_down) +

    `平均アップロード:` + str `%.2f` avg_up))

    < / tr>

    終了:

    ケララ-平均ダウンロード:26129.27平均アップロード:5193.46ラジャスタン-平均ダウンロード:27784.86平均アップロード:5736.18マハラシュトラ-平均ダウンロード:20707.88平均アップロード:4130.46UPEast-平均ダウンロード:22451.35平均アップロード:5727.95カルナータカ州-平均ダウンロード:16950.36平均アップロード:4720.68マディヤプラデーシュ-平均ダウンロード:23594.85平均アップロード:4802.89コルカタ-平均ダウンロード:26747.80平均アップロード:5655.55ビハール-平均ダウンロード:31730.54平均アップロード:6599.45グジャラート-平均ダウンロード:16377.43平均アップロード:3642.89UPWest-平均ダウンロード:23720.82平均アップロード:5280.46オリッサ-平均ダウンロード:31502.05平均アップロード:6895.46タミルナードゥ州-平均ダウンロード:16689.28平均アップロード:4107.44デリー-平均ダウンロード:20308.30平均アップロード:4877.40アッサム-平均ダウンロード:5653.49平均アップロード:2864.47アンドラプラデーシュ-平均ダウンロード:32444.07平均アップロード:5755.95ハリヤーナ-平均ダウンロード:7170.63平均アップロード:2680.02パンジャブ-平均ダウンロード:14454.45平均アップロード:4981.15北東-平均ダウンロード:6702.29平均アップロード:2966.84ムンバイ-平均ダウンロード:14070.97平均アップロード:4118.21チェンナイ-平均ダウンロード:20054.47平均アップロード:4602.35ヒマーチャルプラデーシュ州-平均ダウンロード:7436.99平均アップロード:4020.09 Jammu&amp;カシミール-平均ダウンロード:8759.20平均アップロード:4418.21西ベンガル-平均ダウンロード:16821.17平均アップロード:3628.78 

    データのプロット&#8212;

    Numpyのarange()メソッドを使用します。このメソッドは、指定された間隔で等間隔の値を返します。ここで、リストの長さ final_states を渡すと、0からリスト内の状態の数までの値を取得します(例:[0、1、2、3 ...] 次に、これらのインデックスを使用して、この場所にバーを作成できます。 2番目のバーは、最初のバーの位置をバーの幅でオフセットすることによって作成されます。


    fig、ax = plt.subplots()


    #幅各バー

    bar_width = 0.25


    #各バーの不透明度

    不透明度 = 0.8


    #位置を保存

    インデックス = np.arange( len (f inal_states))


    #plt。 bar()が位置を取ります
    #列、プロット用のデータ、
    #各バーとその他のバーの幅
    #不透明度や色などのオプションのパラメーター


    #ダウンロードスケジュールを作成する

    bar_download = plt.bar(index、final_download_speeds、

    bar_width、alpha = 不透明度、

    color = `b` 、label = `ダウンロード`

    #ダウンロードを作成するスケジュール

    bar_upload = plt.bar(インデックス + bar_width、final_upload_speeds、

    bar_width、alpha = 不透明度、色 = `g`

    ラベル = `アップロード`


    #チャート名

    plt.title( `平均`

    + str (CONST_OPERATOR))


    #X軸ラベル < / p>

    plt.xlabel `状態`


    #Y軸ラベル

    plt.ylabel( `Kbps単位の平均速度`


    #各列の下のラベル、
    #状態に一致

    plt.xticks(index + bar_width、final_states、rotation = 90


    #凡例を描画
    plt .le gend()


    #グラフのレイアウトを固定する
    plt.tight_layout()


    #グラフを表示
    plt.show()

    推定速度のヒストグラム

    2か月間のデータの比較&#8212;

    また、別の月のデータを取得してプロットし、データレートの違いを確認しましょう。

    この例では、前月のデータセットは sept18_publish.csv、および来月のデータセット&#8212; oct18_publish.csv

    同じ手順をもう一度実行する必要があります。もう1か月分のデータを読み取ります。後続のデータフレームでフィルタリングしてから、少し異なる方法を使用してプロットします。列の作成中に、3番目と4番目の列(2番目のファイルのアップロードとダウンロードに対応)を列の幅の2倍と3倍に拡大して、正しい位置に配置します。

    4本のバーをプロットするときのオフセットロジック

    以下は2か月間の比較データの実装です:


    import pandas as pd

    import numpy as np

    import matplotlib .pyplot as plt

    import time


    シニア月#

    データET_FILE NAME = ` https://myspeed.trai.gov.in/download/sept18_publish.csv `

    <コードクラス="未定義のスペース">
    #新しい月

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

    CONST_OPERATOR = `JIO` < / p>

    CONST_STATE = `Delhi`

    CONST_TEC HNOLOGY = `4G`


    #パンダファイルを読み取り、データフレームとして保存

    df = pd.read_csv(DATASET_FILENAME)

    df2 = pd.read_csv(DATASET_FILENAME2)


    #列名を割り当てる

    df .columns = [ `サービスプロバイダー` `テクノロジー` `テストタイプ`

    `データ速度` `信号強度` `状態` ]

    df2.columns = [ `サービスプロバイダー` `テクノロジー` `テストタイプ`

    `データ速度` `信号強度` `状態` ]


    #一意の状態を検索して表示

    状態 = df [ `状態` ]。一意()

    print `見つかった状態:` 、states)


    #一意の演算子を見つけて表示します

    演算子 = df [ `サービスプロバイダー` ]。unique()

    print `演算子が見つかりました:` 、演算子)


    #リストを定義

    final_download_speeds = []

    final_upload_speeds = []


    final_download_speeds_second = []

    final_upload_speeds_second = []


    final_states = []

    final_operators = []


    #データに列名を割り当てる

    df.columns = [ `サービスプロバイダー` `テクノロジー` `テストタイプ`

    `データ速度` `信号強度` `状態` ]

    df2.columns = [ `サービスプロバイダー` `テクノロジー` `テストタイプ`

    `データ速度` `信号強度` `状態` ]



    print `データの比較` + str (CONST_OPERATOR))

    フィルタリングされた = df [(df [ `サービスプロバイダー` ] = = CONST_OPERATOR)

    &amp; (df、Äã、Äã[ `テクノロジー` ]

    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