Skip to content

Instantly share code, notes, and snippets.

@asberk
Last active June 16, 2018 19:35
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save asberk/8d769f602a55f0f81e289db6822ef58e to your computer and use it in GitHub Desktop.
Save asberk/8d769f602a55f0f81e289db6822ef58e to your computer and use it in GitHub Desktop.
bcdata workshop CloudPBX project code
Display the source blob
Display the rendered blob
Raw
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Display the source blob
Display the rendered blob
Raw
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "# ASN Pairings Mean MOS, Mean Qualfun, and Percentage \"Bad\" Calls",
"execution_count": 11,
"outputs": []
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "import numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\n%matplotlib inline\nimport seaborn as sns\n#import geoip2.database\nimport ipaddress\nimport os\nimport dask.dataframe as dd",
"execution_count": 12,
"outputs": []
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "# functions to get AS info\ndef getASobject(x):\n ip = ipaddress.ip_address(x)\n try: return readerASN.asn(str(ip))\n except: return \"The address {} is not in the database.\".format(ip)\ndef getIP(x):\n if type(x) == str: return x\n return x.ip_address\ndef getASN(x):\n if type(x) == str: return x\n return x.autonomous_system_number\ndef getASorg(x):\n if type(x) == str: return x\n return x.autonomous_system_organization\ndef getInt(x):\n return int(x)",
"execution_count": 13,
"outputs": []
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "def getcount(row):\n a=int(row['a_saddr'])\n b=int(row['b_saddr'])\n \n df_asaddr=df['a_saddr']\n df_new=df[df['a_saddr']==a][df['b_saddr']==b]\n\n return len(df_new)\n\ndef getbadcount(row):\n a=int(row['a_saddr'])\n b=int(row['b_saddr'])\n \n df_asaddr=df_filtered['a_saddr']\n df_new=df_filtered[df_filtered['a_saddr']==a][df_filtered['b_saddr']==b]\n\n return len(df_new)\n\ndef getbqualfunmean(row):\n a=int(row['a_saddr'])\n b=int(row['b_saddr'])\n \n df_asaddr=df['a_saddr']\n df_new=df[df['a_saddr']==a][df['b_saddr']==b]\n\n return df_new['b_qualfun'].mean()\n\ndef getmosmean(row):\n a=int(row['a_saddr'])\n b=int(row['b_saddr'])\n \n df_asaddr=df['a_saddr']\n df_new=df[df['a_saddr']==a][df['b_saddr']==b]\n\n return df_new['b_mos_adapt_mult10'].mean()",
"execution_count": 14,
"outputs": []
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "CSV_FILE_PATH = os.path.join('cdr_from_2018-05-01-order-calldate-asc.csv')\n\nHEADER = [\"ID\",\"calldate\",\"callend\",\"duration\",\"connect_duration\",\"progress_time\",\"first_rtp_time\",\"caller\",\n \"caller_domain\",\"caller_reverse\",\"callername\",\"callername_reverse\",\"called\",\"called_domain\",\"called_reverse\",\n \"sipcallerip\",\"sipcallerport\",\"sipcalledip\",\"sipcalledport\",\"whohanged\",\"bye\",\"lastSIPresponse_id\",\n \"lastSIPresponseNum\",\"sighup\",\"dscp\",\"a_index\",\"b_index\",\"a_payload\",\"b_payload\",\"a_saddr\",\"b_saddr\",\n \"a_received\",\"b_received\",\"a_lost\",\"b_lost\",\"a_ua_id\",\"b_ua_id\",\"a_avgjitter_mult10\",\"b_avgjitter_mult10\",\n \"a_maxjitter\",\"b_maxjitter\",\"a_sl1\",\"a_sl2\",\"a_sl3\",\"a_sl4\",\"a_sl5\",\"a_sl6\",\"a_sl7\",\"a_sl8\",\"a_sl9\",\"a_sl10\",\n \"a_d50\",\"a_d70\",\"a_d90\",\"a_d120\",\"a_d150\",\"a_d200\",\"a_d300\",\"b_sl1\",\"b_sl2\",\"b_sl3\",\"b_sl4\",\"b_sl5\",\"b_sl6\",\"b_sl7\",\n \"b_sl8\",\"b_sl9\",\"b_sl10\",\"b_d50\",\"b_d70\",\"b_d90\",\"b_d120\",\"b_d150\",\"b_d200\",\"b_d300\",\"a_mos_lqo_mult10\",\n \"b_mos_lqo_mult10\",\"a_mos_f1_mult10\",\"a_mos_f2_mult10\",\"a_mos_adapt_mult10\",\"b_mos_f1_mult10\",\"b_mos_f2_mult10\",\n \"b_mos_adapt_mult10\",\"a_rtcp_loss\",\"a_rtcp_maxfr\",\"a_rtcp_avgfr_mult10\",\"a_rtcp_maxjitter\",\"a_rtcp_avgjitter_mult10\",\n \"b_rtcp_loss\",\"b_rtcp_maxfr\",\"b_rtcp_avgfr_mult10\",\"b_rtcp_maxjitter\",\"b_rtcp_avgjitter_mult10\",\"a_last_rtp_from_end\",\n \"b_last_rtp_from_end\",\"payload\",\"jitter_mult10\",\"mos_min_mult10\",\"a_mos_min_mult10\",\"b_mos_min_mult10\",\n \"packet_loss_perc_mult1000\",\"a_packet_loss_perc_mult1000\",\"b_packet_loss_perc_mult1000\",\"delay_sum\",\"a_delay_sum\",\n \"b_delay_sum\",\"delay_avg_mult100\",\"a_delay_avg_mult100\",\"b_delay_avg_mult100\",\"delay_cnt\",\"a_delay_cnt\",\n \"b_delay_cnt\",\"rtcp_avgfr_mult10\",\"rtcp_avgjitter_mult10\",\"lost\",\"id_sensor\",\"price_operator_mult100\",\n \"price_operator_currency_id\",\"price_customer_mult100\",\"price_customer_currency_id\",\"reason_sip_cause\",\n \"reason_sip_text_id\",\"reason_q850_cause\",\"reason_q850_text_id\",\"caller_silence\",\"called_silence\",\n \"caller_silence_end\",\"called_silence_end\",\"a_mos_xr_min_mult10\",\"b_mos_xr_min_mult10\",\"a_mos_xr_mult10\",\n \"b_mos_xr_mult10\",\"response_time_100\",\"response_time_xxx\",\"a_mos_f1_min_mult10\",\"a_mos_f2_min_mult10\",\n \"a_mos_adapt_min_mult10\",\"b_mos_f1_min_mult10\",\"b_mos_f2_min_mult10\",\"b_mos_adapt_min_mult10\",\"a_rtp_ptime\",\n \"b_rtp_ptime\",\"flags\"]\n\ndf = pd.read_csv(CSV_FILE_PATH,low_memory=False,names=HEADER)",
"execution_count": 15,
"outputs": []
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "def evaluaterow(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, delay_sum, connect_duration):\n\n calc_sum = get_sum(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)\n\n final_sum = (delay_sum + calc_sum)/(connect_duration*1000) #+ calc_sum)\n\n return final_sum\n\n\ndef get_sum(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10):\n top_sum = 0\n n = 1\n w1 = 1\n w2 = 2\n w3 = 3\n w4 = 4\n w5 = 5\n w6 = 6\n w7 = 7\n w8 = 8\n w9 = 9\n w10 = 10\n\n top_sum += 20 * n * (a1) * (w1 - 1)\n n += 1\n top_sum += 20 * n * (a2) * (w2 - 1)\n n += 1\n top_sum += 20 * n * (a3) * (w3 - 1)\n n += 1\n top_sum += 20 * n * (a4) * (w4 - 1)\n n += 1\n top_sum += 20 * n * (a5) * (w5 - 1)\n n += 1\n top_sum += 20 * n * (a6) * (w6 - 1)\n n += 1\n top_sum += 20 * n * (a7) * (w7 - 1)\n n += 1\n top_sum += 20 * n * (a8) * (w8 - 1)\n n += 1\n top_sum += 20 * n * (a9) * (w9 - 1)\n n += 1\n top_sum += 20 * n * (a10) * (w10 - 1)\n\n return (top_sum)\n\n\ndf_qualfun_a = df.apply(lambda df2: evaluaterow(df2['a_sl1'],df2['a_sl2'],df2['a_sl3'],df2['a_sl4'],df2['a_sl5'],df2['a_sl6'],df2['a_sl7'],df2['a_sl8'],df2['a_sl9'],df2['a_sl10'],df2['a_delay_sum'],df2['connect_duration']), axis=1)\n\n\ndf_qualfun_b = df.apply(lambda df2: evaluaterow(df2['b_sl1'],df2['b_sl2'],df2['b_sl3'],df2['b_sl4'],df2['b_sl5'],df2['b_sl6'],df2['b_sl7'],df2['b_sl8'],df2['b_sl9'],df2['b_sl10'],df2['b_delay_sum'],df2['connect_duration']), axis=1)\n\n\n\n#df = df.assign(qualfun=df_qualfun)\n#df.compute()\n#dfqf = df_qualfun.compute()",
"execution_count": 16,
"outputs": []
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "df['a_qualfun'] = df_qualfun_a\ndf['b_qualfun'] = df_qualfun_b",
"execution_count": 17,
"outputs": []
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "df.head()",
"execution_count": 18,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": " ID calldate callend duration \\\n0 76100359 2018-05-01 00:00:01 2018-05-01 00:00:13 12 \n1 76100360 2018-05-01 00:00:03 2018-05-01 00:00:13 10 \n2 76100543 2018-05-01 00:00:10 2018-05-01 00:03:19 189 \n3 76100542 2018-05-01 00:00:11 2018-05-01 00:03:19 188 \n4 76100418 2018-05-01 00:00:23 2018-05-01 00:01:08 45 \n\n connect_duration progress_time first_rtp_time caller \\\n0 5 1 2 604662xxxx \n1 5 0 5 604662xxxx \n2 178 2 2 SANITIZED \n3 178 1 1 1604930xxxx \n4 44 0 1 708841xxxx \n\n caller_domain caller_reverse ... a_mos_f2_min_mult10 \\\n0 208.89.129.46 SANITIZED ... 45 \n1 192.102.254.81 SANITIZED ... 45 \n2 SANITIZED SANITIZED ... 45 \n3 192.102.254.82 SANITIZED ... 45 \n4 68.68.117.61 SANITIZED ... 45 \n\n a_mos_adapt_min_mult10 b_mos_f1_min_mult10 b_mos_f2_min_mult10 \\\n0 45 45 45 \n1 45 45 45 \n2 45 45 45 \n3 45 45 45 \n4 45 45 45 \n\n b_mos_adapt_min_mult10 a_rtp_ptime b_rtp_ptime flags a_qualfun b_qualfun \n0 39 20 20 \\N 0.0 0.0 \n1 45 20 20 \\N 0.0 0.0 \n2 45 20 20 \\N 0.0 0.0 \n3 45 20 20 \\N 0.0 0.0 \n4 45 20 20 \\N 0.0 0.0 \n\n[5 rows x 145 columns]",
"text/html": "<div>\n<style scoped>\n .dataframe tbody tr th:only-of-type {\n vertical-align: middle;\n }\n\n .dataframe tbody tr th {\n vertical-align: top;\n }\n\n .dataframe thead th {\n text-align: right;\n }\n</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>ID</th>\n <th>calldate</th>\n <th>callend</th>\n <th>duration</th>\n <th>connect_duration</th>\n <th>progress_time</th>\n <th>first_rtp_time</th>\n <th>caller</th>\n <th>caller_domain</th>\n <th>caller_reverse</th>\n <th>...</th>\n <th>a_mos_f2_min_mult10</th>\n <th>a_mos_adapt_min_mult10</th>\n <th>b_mos_f1_min_mult10</th>\n <th>b_mos_f2_min_mult10</th>\n <th>b_mos_adapt_min_mult10</th>\n <th>a_rtp_ptime</th>\n <th>b_rtp_ptime</th>\n <th>flags</th>\n <th>a_qualfun</th>\n <th>b_qualfun</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>76100359</td>\n <td>2018-05-01 00:00:01</td>\n <td>2018-05-01 00:00:13</td>\n <td>12</td>\n <td>5</td>\n <td>1</td>\n <td>2</td>\n <td>604662xxxx</td>\n <td>208.89.129.46</td>\n <td>SANITIZED</td>\n <td>...</td>\n <td>45</td>\n <td>45</td>\n <td>45</td>\n <td>45</td>\n <td>39</td>\n <td>20</td>\n <td>20</td>\n <td>\\N</td>\n <td>0.0</td>\n <td>0.0</td>\n </tr>\n <tr>\n <th>1</th>\n <td>76100360</td>\n <td>2018-05-01 00:00:03</td>\n <td>2018-05-01 00:00:13</td>\n <td>10</td>\n <td>5</td>\n <td>0</td>\n <td>5</td>\n <td>604662xxxx</td>\n <td>192.102.254.81</td>\n <td>SANITIZED</td>\n <td>...</td>\n <td>45</td>\n <td>45</td>\n <td>45</td>\n <td>45</td>\n <td>45</td>\n <td>20</td>\n <td>20</td>\n <td>\\N</td>\n <td>0.0</td>\n <td>0.0</td>\n </tr>\n <tr>\n <th>2</th>\n <td>76100543</td>\n <td>2018-05-01 00:00:10</td>\n <td>2018-05-01 00:03:19</td>\n <td>189</td>\n <td>178</td>\n <td>2</td>\n <td>2</td>\n <td>SANITIZED</td>\n <td>SANITIZED</td>\n <td>SANITIZED</td>\n <td>...</td>\n <td>45</td>\n <td>45</td>\n <td>45</td>\n <td>45</td>\n <td>45</td>\n <td>20</td>\n <td>20</td>\n <td>\\N</td>\n <td>0.0</td>\n <td>0.0</td>\n </tr>\n <tr>\n <th>3</th>\n <td>76100542</td>\n <td>2018-05-01 00:00:11</td>\n <td>2018-05-01 00:03:19</td>\n <td>188</td>\n <td>178</td>\n <td>1</td>\n <td>1</td>\n <td>1604930xxxx</td>\n <td>192.102.254.82</td>\n <td>SANITIZED</td>\n <td>...</td>\n <td>45</td>\n <td>45</td>\n <td>45</td>\n <td>45</td>\n <td>45</td>\n <td>20</td>\n <td>20</td>\n <td>\\N</td>\n <td>0.0</td>\n <td>0.0</td>\n </tr>\n <tr>\n <th>4</th>\n <td>76100418</td>\n <td>2018-05-01 00:00:23</td>\n <td>2018-05-01 00:01:08</td>\n <td>45</td>\n <td>44</td>\n <td>0</td>\n <td>1</td>\n <td>708841xxxx</td>\n <td>68.68.117.61</td>\n <td>SANITIZED</td>\n <td>...</td>\n <td>45</td>\n <td>45</td>\n <td>45</td>\n <td>45</td>\n <td>45</td>\n <td>20</td>\n <td>20</td>\n <td>\\N</td>\n <td>0.0</td>\n <td>0.0</td>\n </tr>\n </tbody>\n</table>\n<p>5 rows × 145 columns</p>\n</div>"
},
"execution_count": 18,
"metadata": {}
}
]
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "corr=df[['a_qualfun','a_mos_adapt_mult10','a_rtcp_avgjitter_mult10','a_delay_sum','a_packet_loss_perc_mult1000','b_qualfun','b_mos_adapt_mult10','b_rtcp_avgjitter_mult10','b_delay_sum','b_packet_loss_perc_mult1000']].corr()\n\n# Generate a mask for the upper triangle\nmask = np.zeros_like(corr, dtype=np.bool)\nmask[np.triu_indices_from(mask)] = True\n\nplt.rcParams['axes.labelsize'] = 10\n# Set up the matplotlib figure\nf, ax = plt.subplots(figsize=(20, 16))\n\n# Generate a custom diverging colormap\ncmap = sns.diverging_palette(10, 220, as_cmap=True)\n\n\n# Draw the heatmap with the mask and correct aspect ratio\nsns.heatmap(corr, mask=mask, cmap=cmap, center=0,\n square=True, linewidths=.5, cbar_kws={\"shrink\": .5});\nplt.tight_layout()\nplt.savefig('./img/correlation_matrix_1millionstar.png', dpi=600)",
"execution_count": 28,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": "<matplotlib.figure.Figure at 0x7fd2c5c42780>",
"image/png": "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\n"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "bqfarray=df['b_qualfun'].values\nplt.hist(bqfarray,log=True)\n\nTitle='Distribution of Qualfun Values'\nxLabel='Qualfun Score'\nyLabel='Count (log)'\n\n\nplt.title(Title)\nplt.xlabel(xLabel)\nplt.ylabel(yLabel)\n\nplt.show\nplt.savefig('./img/histogram_qualfun_1millionstar.png',dpi=600)",
"execution_count": 29,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": "<matplotlib.figure.Figure at 0x7fd2c7eb2f98>",
"image/png": "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\n"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": false
},
"cell_type": "code",
"source": "mosarray=df['b_mos_adapt_mult10'].values\nplt.hist(mosarray,log=True)\n\nTitle='Distribution of Mean Opinion Score (MOS)'\nxLabel='MOS'\nyLabel='Count (log)'\n\n\nplt.title(Title)\nplt.xlabel(xLabel)\nplt.ylabel(yLabel)\n\n\nplt.show\nplt.savefig('./img/histogram_weighted_qualfun_1millionstar.png',dpi=600)",
"execution_count": 30,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": "<matplotlib.figure.Figure at 0x7fd2c2208c88>",
"image/png": "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\n"
},
"metadata": {}
}
]
}
],
"metadata": {
"toc": {
"nav_menu": {},
"number_sections": true,
"sideBar": true,
"skip_h1_title": false,
"base_numbering": 1,
"title_cell": "Table of Contents",
"title_sidebar": "Contents",
"toc_cell": false,
"toc_position": {},
"toc_section_display": true,
"toc_window_display": false
},
"kernelspec": {
"name": "python3",
"display_name": "Python [default]",
"language": "python"
},
"language_info": {
"pygments_lexer": "ipython3",
"name": "python",
"nbconvert_exporter": "python",
"version": "3.5.5",
"file_extension": ".py",
"mimetype": "text/x-python",
"codemirror_mode": {
"name": "ipython",
"version": 3
}
},
"gist": {
"id": "",
"data": {
"description": "histograms_mos_qualfun.ipynb",
"public": false
}
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment