77/main.ipynb
2024-10-09 03:59:35 +00:00

448 lines
16 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "e706cfb0-2234-4c4c-95d8-d1968f656aa0",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import pandas as pd"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "2f9a4ca7-c066-4d93-9957-0d9145f9265d",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"from tms_data_interface import SQLQueryInterface\n",
"seq = SQLQueryInterface(schema=\"transactionschema\")"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "fc212ace-ca7a-45f2-8137-f436c6123652",
"metadata": {
"tags": []
},
"outputs": [
{
"data": {
"text/plain": [
"[['account_data_v1'],\n",
" ['account_data_v2'],\n",
" ['alert_data_v1'],\n",
" ['alert_data_v2'],\n",
" ['customer_data_v1'],\n",
" ['customer_data_v2'],\n",
" ['transaction10m'],\n",
" ['transaction60m']]"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"seq.execute_raw(\"show tables\")"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "134d0b3d-5481-4975-af07-c80ab09d6dd2",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"query = \"\"\"\n",
" select final.CUSTOMER_NUMBER_main as Focal_id,\n",
" final.Credit_transaction_amount,\n",
" final.Total_no_of_credit_transactions,\n",
" final.Debit_transaction_amount,\n",
" final.Total_no_of_debit_transactions,\n",
" final.Wash_Ratio,\n",
" final.SEGMENT,\n",
" final.RISK,\n",
" final.SAR_FLAG\n",
" from \n",
" (\n",
" (\n",
" select subquery.CUSTOMER_NUMBER_1 as CUSTOMER_NUMBER_main,\n",
" subquery.Credit_transaction_amount,\n",
" subquery.Total_no_of_credit_transactions,\n",
" case\n",
" when subquery.Debit_transaction_amount is NULL then 0\n",
" else Debit_transaction_amount\n",
" end as Debit_transaction_amount,\n",
" case\n",
" when subquery.Total_no_of_debit_transactions is NULL then 0\n",
" else Total_no_of_debit_transactions\n",
" end as Total_no_of_debit_transactions,\n",
" case\n",
" when subquery.Debit_transaction_amount = 0\n",
" or subquery.Debit_transaction_amount is NULL then 0\n",
" else subquery.Credit_transaction_amount / subquery.Debit_transaction_amount\n",
" end as Wash_Ratio\n",
" from \n",
" (\n",
" (\n",
" select customer_number as CUSTOMER_NUMBER_1, \n",
" sum(transaction_amount) as Credit_transaction_amount, \n",
" count(*) as Total_no_of_credit_transactions\n",
" from \n",
" (\n",
" select * \n",
" from {trans_data} as trans_table left join {acc_data} as acc_table\n",
" on trans_table.benef_account_number = acc_table.account_number\n",
" )\n",
" where account_number not in ('None')\n",
" group by 1\n",
" ) credit left join\n",
" (\n",
" select customer_number as CUSTOMER_NUMBER_2, \n",
" sum(transaction_amount) as Debit_transaction_amount, \n",
" count(*) as Total_no_of_debit_transactions\n",
" from \n",
" (\n",
" select * \n",
" from {trans_data} as trans_table left join {acc_data} as acc_table\n",
" on trans_table.orig_account_number = acc_table.account_number\n",
" )\n",
" where account_number not in ('None')\n",
" group by 1\n",
" ) debit on credit.CUSTOMER_NUMBER_1 = debit.CUSTOMER_NUMBER_2 \n",
" ) subquery\n",
" ) main left join \n",
" (\n",
" select subquery.CUSTOMER_NUMBER_3 as CUSTOMER_NUMBER_cust,\n",
" subquery.SEGMENT,\n",
" subquery.RISK,\n",
" case\n",
" when subquery.SAR_FLAG is NULL then 'N'\n",
" else subquery.SAR_FLAG\n",
" end as SAR_FLAG \n",
" from\n",
" (\n",
" (\n",
" select customer_number as CUSTOMER_NUMBER_3, \n",
" business_segment as SEGMENT,\n",
" case\n",
" when RISK_CLASSIFICATION = 1 then 'Low Risk'\n",
" when RISK_CLASSIFICATION = 2 then 'Medium Risk'\n",
" when RISK_CLASSIFICATION = 3 then 'High Risk'\n",
" else 'Unknown Risk'\n",
" end AS RISK\n",
" from {cust_data}\n",
" ) cd left join\n",
" (\n",
" select customer_number as CUSTOMER_NUMBER_4, \n",
" sar_flag as SAR_FLAG\n",
" from {alert_data}\n",
" ) ad on cd.CUSTOMER_NUMBER_3 = ad.CUSTOMER_NUMBER_4\n",
" ) subquery\n",
" ) cust_alert on cust_alert.CUSTOMER_NUMBER_cust = main.CUSTOMER_NUMBER_main\n",
" ) final\n",
"\"\"\""
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "d220561a-34c9-48d2-8e2f-5d174a87540b",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"from tms_data_interface import SQLQueryInterface\n",
"\n",
"class Scenario:\n",
" seq = SQLQueryInterface(schema=\"transactionschema\")\n",
"\n",
" def logic(self, **kwargs):\n",
" row_list = self.seq.execute_raw(query.format(trans_data=\"transaction10m\",\n",
" cust_data=\"customer_data_v1\",\n",
" acc_data=\"account_data_v1\",\n",
" alert_data=\"alert_data_v1\")\n",
" )\n",
" cols = [\"Focal_id\", \"Credit_transaction_amount\",\n",
" \"Total_no_of_credit_transactions\",\n",
" \"Debit_transaction_amount\", \"Total_no_of_debit_transactions\",\n",
" \"Wash_Ratio\", \"Segment\", \"Risk\", \"SAR_FLAG\"]\n",
" df = pd.DataFrame(row_list, columns = cols)\n",
" return df"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "2e5a0ea9-64cd-4a8d-9a5d-e5e7b36a401a",
"metadata": {
"tags": []
},
"outputs": [
{
"data": {
"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>Focal_id</th>\n",
" <th>Credit_transaction_amount</th>\n",
" <th>Total_no_of_credit_transactions</th>\n",
" <th>Debit_transaction_amount</th>\n",
" <th>Total_no_of_debit_transactions</th>\n",
" <th>Wash_Ratio</th>\n",
" <th>Segment</th>\n",
" <th>Risk</th>\n",
" <th>SAR_FLAG</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>PN808624</td>\n",
" <td>4.601504e+09</td>\n",
" <td>3239</td>\n",
" <td>4.461280e+09</td>\n",
" <td>3129</td>\n",
" <td>1.031431</td>\n",
" <td>Corporate Banking</td>\n",
" <td>Medium Risk</td>\n",
" <td>N</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>PN663041</td>\n",
" <td>2.106224e+09</td>\n",
" <td>1573</td>\n",
" <td>2.281829e+09</td>\n",
" <td>1563</td>\n",
" <td>0.923042</td>\n",
" <td>Corporate Banking</td>\n",
" <td>Low Risk</td>\n",
" <td>N</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>PN525913</td>\n",
" <td>1.057799e+09</td>\n",
" <td>776</td>\n",
" <td>1.223876e+09</td>\n",
" <td>850</td>\n",
" <td>0.864302</td>\n",
" <td>Whole Sale Banking</td>\n",
" <td>Low Risk</td>\n",
" <td>N</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>PN440274</td>\n",
" <td>4.806265e+09</td>\n",
" <td>3506</td>\n",
" <td>4.972813e+09</td>\n",
" <td>3599</td>\n",
" <td>0.966508</td>\n",
" <td>Whole Sale Banking</td>\n",
" <td>Medium Risk</td>\n",
" <td>N</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>PN213026</td>\n",
" <td>3.982349e+09</td>\n",
" <td>2809</td>\n",
" <td>4.122674e+09</td>\n",
" <td>2783</td>\n",
" <td>0.965963</td>\n",
" <td>Whole Sale Banking</td>\n",
" <td>Medium Risk</td>\n",
" <td>N</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10009</th>\n",
" <td>PN774741</td>\n",
" <td>3.373466e+07</td>\n",
" <td>250</td>\n",
" <td>2.443148e+07</td>\n",
" <td>381</td>\n",
" <td>1.380787</td>\n",
" <td>Priority Banking</td>\n",
" <td>Medium Risk</td>\n",
" <td>N</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10010</th>\n",
" <td>PN868326</td>\n",
" <td>3.785344e+07</td>\n",
" <td>259</td>\n",
" <td>2.408309e+07</td>\n",
" <td>352</td>\n",
" <td>1.571785</td>\n",
" <td>Ultra High NetWorth</td>\n",
" <td>Medium Risk</td>\n",
" <td>Y</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10011</th>\n",
" <td>PN667837</td>\n",
" <td>3.330357e+07</td>\n",
" <td>256</td>\n",
" <td>2.676301e+07</td>\n",
" <td>359</td>\n",
" <td>1.244388</td>\n",
" <td>Mass Market</td>\n",
" <td>Medium Risk</td>\n",
" <td>N</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10012</th>\n",
" <td>PN809566</td>\n",
" <td>3.890076e+07</td>\n",
" <td>276</td>\n",
" <td>2.554121e+07</td>\n",
" <td>400</td>\n",
" <td>1.523059</td>\n",
" <td>Others</td>\n",
" <td>Low Risk</td>\n",
" <td>N</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10013</th>\n",
" <td>PN739647</td>\n",
" <td>3.505184e+07</td>\n",
" <td>223</td>\n",
" <td>2.232980e+07</td>\n",
" <td>381</td>\n",
" <td>1.569734</td>\n",
" <td>Others</td>\n",
" <td>Low Risk</td>\n",
" <td>N</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>10014 rows × 9 columns</p>\n",
"</div>"
],
"text/plain": [
" Focal_id Credit_transaction_amount Total_no_of_credit_transactions \\\n",
"0 PN808624 4.601504e+09 3239 \n",
"1 PN663041 2.106224e+09 1573 \n",
"2 PN525913 1.057799e+09 776 \n",
"3 PN440274 4.806265e+09 3506 \n",
"4 PN213026 3.982349e+09 2809 \n",
"... ... ... ... \n",
"10009 PN774741 3.373466e+07 250 \n",
"10010 PN868326 3.785344e+07 259 \n",
"10011 PN667837 3.330357e+07 256 \n",
"10012 PN809566 3.890076e+07 276 \n",
"10013 PN739647 3.505184e+07 223 \n",
"\n",
" Debit_transaction_amount Total_no_of_debit_transactions Wash_Ratio \\\n",
"0 4.461280e+09 3129 1.031431 \n",
"1 2.281829e+09 1563 0.923042 \n",
"2 1.223876e+09 850 0.864302 \n",
"3 4.972813e+09 3599 0.966508 \n",
"4 4.122674e+09 2783 0.965963 \n",
"... ... ... ... \n",
"10009 2.443148e+07 381 1.380787 \n",
"10010 2.408309e+07 352 1.571785 \n",
"10011 2.676301e+07 359 1.244388 \n",
"10012 2.554121e+07 400 1.523059 \n",
"10013 2.232980e+07 381 1.569734 \n",
"\n",
" Segment Risk SAR_FLAG \n",
"0 Corporate Banking Medium Risk N \n",
"1 Corporate Banking Low Risk N \n",
"2 Whole Sale Banking Low Risk N \n",
"3 Whole Sale Banking Medium Risk N \n",
"4 Whole Sale Banking Medium Risk N \n",
"... ... ... ... \n",
"10009 Priority Banking Medium Risk N \n",
"10010 Ultra High NetWorth Medium Risk Y \n",
"10011 Mass Market Medium Risk N \n",
"10012 Others Low Risk N \n",
"10013 Others Low Risk N \n",
"\n",
"[10014 rows x 9 columns]"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# sen = Scenario()\n",
"# sen.logic()"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "150bb5ce-6be1-44fc-a606-6d375354626d",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.8"
}
},
"nbformat": 4,
"nbformat_minor": 5
}