System save at 09/10/2024 09:40 by user_client2024

This commit is contained in:
user_client2024 2024-10-09 04:10:27 +00:00
parent 78a5049a4a
commit a73e5758e1
3 changed files with 715 additions and 33 deletions

View File

@ -0,0 +1,307 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 2,
"id": "e706cfb0-2234-4c4c-95d8-d1968f656aa0",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import pandas as pd\n",
"\n",
"query = \"\"\"\n",
" select final.CUSTOMER_NUMBER_main as Focal_id,\n",
" CAST(final.Cash_deposit_total AS DECIMAL(18, 2)) AS Cash_deposit_total,\n",
" final.Cash_deposit_count,\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.Cash_deposit_total,\n",
" subquery.Cash_deposit_count\n",
" from \n",
" (\n",
" select customer_number as CUSTOMER_NUMBER_1, \n",
" sum(transaction_amount) as Cash_deposit_total, \n",
" count(*) as Cash_deposit_count\n",
" from \n",
" (\n",
" select * \n",
" from {trans_data} trans_table \n",
" left join {acc_data} acc_table\n",
" on trans_table.benef_account_number = acc_table.account_number\n",
" ) trans\n",
" where account_number not in ('None')\n",
" and transaction_desc = 'CASH RELATED TRANSACTION'\n",
" group by customer_number\n",
" ) subquery\n",
" ) main \n",
" left join \n",
" (\n",
" select cd.CUSTOMER_NUMBER_3 as CUSTOMER_NUMBER_cust,\n",
" cd.SEGMENT,\n",
" cd.RISK,\n",
" case\n",
" when ad.SAR_FLAG is NULL then 'N'\n",
" else ad.SAR_FLAG\n",
" end as SAR_FLAG \n",
" from\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 \n",
" left join\n",
" (\n",
" select customer_number as CUSTOMER_NUMBER_4, \n",
" sar_flag as SAR_FLAG\n",
" from {alert_data}\n",
" ) ad \n",
" on cd.CUSTOMER_NUMBER_3 = ad.CUSTOMER_NUMBER_4\n",
" ) as cust_alert\n",
" on cust_alert.CUSTOMER_NUMBER_cust = main.CUSTOMER_NUMBER_main\n",
") as final\n",
"\"\"\"\n",
"\n",
"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\", \"Cash_deposit_total\", \"Cash_deposit_count\",\n",
" \"Segment\", \"Risk\", \"SAR_FLAG\"]\n",
" df = pd.DataFrame(row_list, columns = cols)\n",
" df[\"Cash_deposit_total\"] = df[\"Cash_deposit_total\"].astype(float)\n",
" return df"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "1f20337b-8116-47e5-8743-1ba41e2df819",
"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>Cash_deposit_total</th>\n",
" <th>Cash_deposit_count</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>PN469304</td>\n",
" <td>8049952.0</td>\n",
" <td>141</td>\n",
" <td>Mass Market</td>\n",
" <td>High Risk</td>\n",
" <td>N</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>PN605743</td>\n",
" <td>9766101.0</td>\n",
" <td>175</td>\n",
" <td>Others</td>\n",
" <td>Low Risk</td>\n",
" <td>N</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>PN399215</td>\n",
" <td>8469943.0</td>\n",
" <td>164</td>\n",
" <td>Mass Market</td>\n",
" <td>Low Risk</td>\n",
" <td>N</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>PN175020</td>\n",
" <td>17724959.0</td>\n",
" <td>313</td>\n",
" <td>Others</td>\n",
" <td>Low Risk</td>\n",
" <td>N</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>PN345085</td>\n",
" <td>7518628.0</td>\n",
" <td>124</td>\n",
" <td>Others</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",
" </tr>\n",
" <tr>\n",
" <th>9005</th>\n",
" <td>PN660329</td>\n",
" <td>8528178.0</td>\n",
" <td>141</td>\n",
" <td>Others</td>\n",
" <td>Low Risk</td>\n",
" <td>N</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9006</th>\n",
" <td>PN336833</td>\n",
" <td>8475036.0</td>\n",
" <td>150</td>\n",
" <td>Others</td>\n",
" <td>Low Risk</td>\n",
" <td>N</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9007</th>\n",
" <td>PN428534</td>\n",
" <td>7871170.0</td>\n",
" <td>129</td>\n",
" <td>Priority Banking</td>\n",
" <td>Low Risk</td>\n",
" <td>N</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9008</th>\n",
" <td>PN101660</td>\n",
" <td>8450309.0</td>\n",
" <td>142</td>\n",
" <td>Mass Market</td>\n",
" <td>Low Risk</td>\n",
" <td>N</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9009</th>\n",
" <td>PN198641</td>\n",
" <td>8690226.0</td>\n",
" <td>166</td>\n",
" <td>Others</td>\n",
" <td>Low Risk</td>\n",
" <td>N</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>9010 rows × 6 columns</p>\n",
"</div>"
],
"text/plain": [
" Focal_id Cash_deposit_total Cash_deposit_count Segment \\\n",
"0 PN469304 8049952.0 141 Mass Market \n",
"1 PN605743 9766101.0 175 Others \n",
"2 PN399215 8469943.0 164 Mass Market \n",
"3 PN175020 17724959.0 313 Others \n",
"4 PN345085 7518628.0 124 Others \n",
"... ... ... ... ... \n",
"9005 PN660329 8528178.0 141 Others \n",
"9006 PN336833 8475036.0 150 Others \n",
"9007 PN428534 7871170.0 129 Priority Banking \n",
"9008 PN101660 8450309.0 142 Mass Market \n",
"9009 PN198641 8690226.0 166 Others \n",
"\n",
" Risk SAR_FLAG \n",
"0 High Risk N \n",
"1 Low Risk N \n",
"2 Low Risk N \n",
"3 Low Risk N \n",
"4 Medium Risk N \n",
"... ... ... \n",
"9005 Low Risk N \n",
"9006 Low Risk N \n",
"9007 Low Risk N \n",
"9008 Low Risk N \n",
"9009 Low Risk N \n",
"\n",
"[9010 rows x 6 columns]"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# sen = Scenario()\n",
"# sen.logic()"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "6de62b37-00d1-4c88-b27b-9a70e05add91",
"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
}

View File

@ -1,33 +1,307 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": null,
"id": "e706cfb0-2234-4c4c-95d8-d1968f656aa0",
"metadata": {},
"outputs": [],
"source": "from tms_data_interface import SQLQueryInterface\n\nclass Scenario:\n\tseq = SQLQueryInterface()\n\n\tdef logic(self, **kwargs):\n\t\t# Write your code here\n"
}
],
"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.8.13"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
{
"cells": [
{
"cell_type": "code",
"execution_count": 2,
"id": "e706cfb0-2234-4c4c-95d8-d1968f656aa0",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import pandas as pd\n",
"\n",
"query = \"\"\"\n",
" select final.CUSTOMER_NUMBER_main as Focal_id,\n",
" CAST(final.Cash_deposit_total AS DECIMAL(18, 2)) AS Cash_deposit_total,\n",
" final.Cash_deposit_count,\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.Cash_deposit_total,\n",
" subquery.Cash_deposit_count\n",
" from \n",
" (\n",
" select customer_number as CUSTOMER_NUMBER_1, \n",
" sum(transaction_amount) as Cash_deposit_total, \n",
" count(*) as Cash_deposit_count\n",
" from \n",
" (\n",
" select * \n",
" from {trans_data} trans_table \n",
" left join {acc_data} acc_table\n",
" on trans_table.benef_account_number = acc_table.account_number\n",
" ) trans\n",
" where account_number not in ('None')\n",
" and transaction_desc = 'CASH RELATED TRANSACTION'\n",
" group by customer_number\n",
" ) subquery\n",
" ) main \n",
" left join \n",
" (\n",
" select cd.CUSTOMER_NUMBER_3 as CUSTOMER_NUMBER_cust,\n",
" cd.SEGMENT,\n",
" cd.RISK,\n",
" case\n",
" when ad.SAR_FLAG is NULL then 'N'\n",
" else ad.SAR_FLAG\n",
" end as SAR_FLAG \n",
" from\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 \n",
" left join\n",
" (\n",
" select customer_number as CUSTOMER_NUMBER_4, \n",
" sar_flag as SAR_FLAG\n",
" from {alert_data}\n",
" ) ad \n",
" on cd.CUSTOMER_NUMBER_3 = ad.CUSTOMER_NUMBER_4\n",
" ) as cust_alert\n",
" on cust_alert.CUSTOMER_NUMBER_cust = main.CUSTOMER_NUMBER_main\n",
") as final\n",
"\"\"\"\n",
"\n",
"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\", \"Cash_deposit_total\", \"Cash_deposit_count\",\n",
" \"Segment\", \"Risk\", \"SAR_FLAG\"]\n",
" df = pd.DataFrame(row_list, columns = cols)\n",
" df[\"Cash_deposit_total\"] = df[\"Cash_deposit_total\"].astype(float)\n",
" return df"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "1f20337b-8116-47e5-8743-1ba41e2df819",
"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>Cash_deposit_total</th>\n",
" <th>Cash_deposit_count</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>PN469304</td>\n",
" <td>8049952.0</td>\n",
" <td>141</td>\n",
" <td>Mass Market</td>\n",
" <td>High Risk</td>\n",
" <td>N</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>PN605743</td>\n",
" <td>9766101.0</td>\n",
" <td>175</td>\n",
" <td>Others</td>\n",
" <td>Low Risk</td>\n",
" <td>N</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>PN399215</td>\n",
" <td>8469943.0</td>\n",
" <td>164</td>\n",
" <td>Mass Market</td>\n",
" <td>Low Risk</td>\n",
" <td>N</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>PN175020</td>\n",
" <td>17724959.0</td>\n",
" <td>313</td>\n",
" <td>Others</td>\n",
" <td>Low Risk</td>\n",
" <td>N</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>PN345085</td>\n",
" <td>7518628.0</td>\n",
" <td>124</td>\n",
" <td>Others</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",
" </tr>\n",
" <tr>\n",
" <th>9005</th>\n",
" <td>PN660329</td>\n",
" <td>8528178.0</td>\n",
" <td>141</td>\n",
" <td>Others</td>\n",
" <td>Low Risk</td>\n",
" <td>N</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9006</th>\n",
" <td>PN336833</td>\n",
" <td>8475036.0</td>\n",
" <td>150</td>\n",
" <td>Others</td>\n",
" <td>Low Risk</td>\n",
" <td>N</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9007</th>\n",
" <td>PN428534</td>\n",
" <td>7871170.0</td>\n",
" <td>129</td>\n",
" <td>Priority Banking</td>\n",
" <td>Low Risk</td>\n",
" <td>N</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9008</th>\n",
" <td>PN101660</td>\n",
" <td>8450309.0</td>\n",
" <td>142</td>\n",
" <td>Mass Market</td>\n",
" <td>Low Risk</td>\n",
" <td>N</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9009</th>\n",
" <td>PN198641</td>\n",
" <td>8690226.0</td>\n",
" <td>166</td>\n",
" <td>Others</td>\n",
" <td>Low Risk</td>\n",
" <td>N</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>9010 rows × 6 columns</p>\n",
"</div>"
],
"text/plain": [
" Focal_id Cash_deposit_total Cash_deposit_count Segment \\\n",
"0 PN469304 8049952.0 141 Mass Market \n",
"1 PN605743 9766101.0 175 Others \n",
"2 PN399215 8469943.0 164 Mass Market \n",
"3 PN175020 17724959.0 313 Others \n",
"4 PN345085 7518628.0 124 Others \n",
"... ... ... ... ... \n",
"9005 PN660329 8528178.0 141 Others \n",
"9006 PN336833 8475036.0 150 Others \n",
"9007 PN428534 7871170.0 129 Priority Banking \n",
"9008 PN101660 8450309.0 142 Mass Market \n",
"9009 PN198641 8690226.0 166 Others \n",
"\n",
" Risk SAR_FLAG \n",
"0 High Risk N \n",
"1 Low Risk N \n",
"2 Low Risk N \n",
"3 Low Risk N \n",
"4 Medium Risk N \n",
"... ... ... \n",
"9005 Low Risk N \n",
"9006 Low Risk N \n",
"9007 Low Risk N \n",
"9008 Low Risk N \n",
"9009 Low Risk N \n",
"\n",
"[9010 rows x 6 columns]"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# sen = Scenario()\n",
"# sen.logic()"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "6de62b37-00d1-4c88-b27b-9a70e05add91",
"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
}

101
main.py Normal file
View File

@ -0,0 +1,101 @@
#!/usr/bin/env python
# coding: utf-8
# In[2]:
import pandas as pd
query = """
select final.CUSTOMER_NUMBER_main as Focal_id,
CAST(final.Cash_deposit_total AS DECIMAL(18, 2)) AS Cash_deposit_total,
final.Cash_deposit_count,
final.SEGMENT,
final.RISK,
final.SAR_FLAG
from
(
(
select subquery.CUSTOMER_NUMBER_1 as CUSTOMER_NUMBER_main,
subquery.Cash_deposit_total,
subquery.Cash_deposit_count
from
(
select customer_number as CUSTOMER_NUMBER_1,
sum(transaction_amount) as Cash_deposit_total,
count(*) as Cash_deposit_count
from
(
select *
from {trans_data} trans_table
left join {acc_data} acc_table
on trans_table.benef_account_number = acc_table.account_number
) trans
where account_number not in ('None')
and transaction_desc = 'CASH RELATED TRANSACTION'
group by customer_number
) subquery
) main
left join
(
select cd.CUSTOMER_NUMBER_3 as CUSTOMER_NUMBER_cust,
cd.SEGMENT,
cd.RISK,
case
when ad.SAR_FLAG is NULL then 'N'
else ad.SAR_FLAG
end as SAR_FLAG
from
(
select customer_number as CUSTOMER_NUMBER_3,
business_segment as SEGMENT,
case
when RISK_CLASSIFICATION = 1 then 'Low Risk'
when RISK_CLASSIFICATION = 2 then 'Medium Risk'
when RISK_CLASSIFICATION = 3 then 'High Risk'
else 'Unknown Risk'
end AS RISK
from {cust_data}
) cd
left join
(
select customer_number as CUSTOMER_NUMBER_4,
sar_flag as SAR_FLAG
from {alert_data}
) ad
on cd.CUSTOMER_NUMBER_3 = ad.CUSTOMER_NUMBER_4
) as cust_alert
on cust_alert.CUSTOMER_NUMBER_cust = main.CUSTOMER_NUMBER_main
) as final
"""
from tms_data_interface import SQLQueryInterface
class Scenario:
seq = SQLQueryInterface(schema="transactionschema")
def logic(self, **kwargs):
row_list = self.seq.execute_raw(query.format(trans_data="transaction10m",
cust_data="customer_data_v1",
acc_data="account_data_v1",
alert_data="alert_data_v1")
)
cols = ["Focal_id", "Cash_deposit_total", "Cash_deposit_count",
"Segment", "Risk", "SAR_FLAG"]
df = pd.DataFrame(row_list, columns = cols)
df["Cash_deposit_total"] = df["Cash_deposit_total"].astype(float)
return df
# In[3]:
# sen = Scenario()
# sen.logic()
# In[ ]: