
かつて私は何か面白いものを探して携帯電話会社のサイトに迷い込んだ。 味と色ごとに多数の異なる関税計画が存在することだけが興味深いことが判明しました。 これはネットワーク内の低料金で、通話中は料金がかかり、通話の固定料金があります。 一般的に、
Alt+Tab
を押して、
Python 2.7.5+
と招待状を
Python 2.7.5+
コンソールを右
Python 2.7.5+
>>>
すぐに明らかになりますが、地元市場には3つの主要な携帯電話会社しかありません。したがって、私にとって最も魅力的な料金プランの表を作成することは難しくありませんでした。 それらは最大10であることが判明しました。

次のステップは、過去3か月間の通話履歴を取得することでした。 この機能はサイトから直接利用できました。そのため、私のオペレーターに感謝します。 PDFをダウンロードした後、 PDFMinerを使用してテキストファイルに変換しました (ちなみに、Pythonでも記述されています)。 結果は悪くありませんでしたが、テキストのいくつかのエラーに気づいたので、このユーティリティをタンバリンで踊るのではなく、データをPDFファイルから簡単なコピーアンドペーストを使用してテキストファイルに転送しました。 このファイルはpythonに送られました:
#!/usr/bin/python import MySQLdb as mysql con = mysql.connect('localhost', 'mobile', 'mobile', 'mobile') cur = con.cursor() with open('calls.log') as f: for line in f: if 'MOC' in line: tokens = line.split() if len(tokens) == 11: cur.execute("INSERT INTO calls (operator, amount) VALUES('" + tokens[1] + "','" + tokens[6] + "')") con.commit()
私は実質的にSMSを使用しないので、選択は発信通話(モバイル発信通話、MOC)でのみ行われました。 その結果、コールログは、さらに操作できるようにMySQLデータベースに保存されました。
さらなる操作
次のステップは非常に予測可能です-過労によって稼いだお金が各料金プランからどれだけ費やされていたかを計算します。 通話と料金に関するデータはすでにデータベースにあります。 そして再び小さなpythonコード:
cur.execute("SELECT operator,plan,call_init,first_min_int,first_min_ext,min_int,min_ext FROM tariffs") rows = cur.fetchall() for row in rows: operator, plan, call_init, first_min_int, first_min_ext, min_int, min_ext = row # cur.execute("SELECT COUNT(*) FROM calls") total = call_init*cur.fetchone()[0] # cur.execute("SELECT COALESCE(SUM(LEAST(amount,60)),0) FROM calls WHERE operator='" + operator + "'") total += cur.fetchone()[0]/60*first_min_int # , cur.execute("SELECT COALESCE(SUM(amount-60),0) FROM calls WHERE operator='" + operator + "' AND amount > 60") total += cur.fetchone()[0]/60*min_int # cur.execute("SELECT COALESCE(SUM(LEAST(amount,60)),0) FROM calls WHERE operator<>'" + operator + "'") total += cur.fetchone()[0]/60*first_min_ext # , cur.execute("SELECT COALESCE(SUM(amount-60),0) FROM calls WHERE operator<>'" + operator + "' AND amount > 60") total += cur.fetchone()[0]/60*min_ext print plan + " : " + str(round(total/100, 2)) + " .."
出力は次のとおりです。
Magti Standard : 47.1 ye Magti I Alternative : 56.5 ye Bani Standard : 29.72 ye Bani Zero+ : 26.67 ye Geocell 000 : 49.94 ye Geocell 1-10 : 35.86 ye Geocell 12 : 35.66 ye Beeline 007 : 37.69 ye Beeline Non Stop : 40.7 ye Bani Universal : 39.21 ye
より明確にするために、図形式の同じデータ:

結論
したがって、極値を考慮しない場合、標準偏差は非常に小さいことが判明しました。これには、さまざまな通信事業者が含まれます。 ただし、このような単純な分析でさえ、特定のユーザーの特性を考慮して、最も収益性の低い料金プランと比較して最も収益性の高い料金プランを選択すると、2倍以上節約できます。