Files
F6--/其它系统脚本/续约回访:基础版120,其它90-180V5.ipynb
T
2026-01-30 11:28:35 +08:00

961 lines
46 KiB
Plaintext
Raw 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": "markdown",
"metadata": {},
"source": [
"# 含多年"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2023-11-10 不是节假日\n",
"[datetime.date(2023, 1, 1), datetime.date(2023, 1, 8), datetime.date(2023, 1, 15), datetime.date(2023, 1, 22), datetime.date(2023, 1, 29), datetime.date(2023, 2, 5), datetime.date(2023, 2, 12), datetime.date(2023, 2, 19), datetime.date(2023, 2, 26), datetime.date(2023, 3, 5), datetime.date(2023, 3, 12), datetime.date(2023, 3, 19), datetime.date(2023, 3, 26), datetime.date(2023, 4, 2), datetime.date(2023, 4, 9), datetime.date(2023, 4, 16), datetime.date(2023, 4, 23), datetime.date(2023, 4, 30), datetime.date(2023, 5, 7), datetime.date(2023, 5, 14), datetime.date(2023, 5, 21), datetime.date(2023, 5, 28), datetime.date(2023, 6, 4), datetime.date(2023, 6, 11), datetime.date(2023, 6, 18), datetime.date(2023, 6, 25), datetime.date(2023, 7, 2), datetime.date(2023, 7, 9), datetime.date(2023, 7, 16), datetime.date(2023, 7, 23), datetime.date(2023, 7, 30), datetime.date(2023, 8, 6), datetime.date(2023, 8, 13), datetime.date(2023, 8, 20), datetime.date(2023, 8, 27), datetime.date(2023, 9, 3), datetime.date(2023, 9, 10), datetime.date(2023, 9, 17), datetime.date(2023, 9, 24), datetime.date(2023, 10, 1), datetime.date(2023, 10, 8), datetime.date(2023, 10, 15), datetime.date(2023, 10, 22), datetime.date(2023, 10, 29), datetime.date(2023, 11, 5), datetime.date(2023, 11, 12), datetime.date(2023, 11, 19), datetime.date(2023, 11, 26), datetime.date(2023, 12, 3), datetime.date(2023, 12, 10), datetime.date(2023, 12, 17), datetime.date(2023, 12, 24), datetime.date(2023, 12, 31)]\n",
"读取到省市小六技术专家区域客服区域客成表单中 67 条数据!\n",
"读取到市-技术专家id表单中 370 条数据!\n",
"34\n",
"['陈晨', '吕浩杰', '刘磊', '柴铁峰', '胡冰', '张宏伟', '王云梅', '舒晓明', '赵涛', '王蔚东', '王鑫', '贾宏伟', '胡仲远', '丰文祥', '许盼盼', '陈俊', '赵旭伟', '严冬延', '刘剑桥', '梁柱', '吴宏伟', '金华斌', '孙振华', '申晨']\n",
"101152211221580284\n",
"195159084238961158\n",
"031367616021462180\n",
"116743693536486170\n",
"03274749341150662\n",
"3704680936560271\n",
"116743693536486170\n",
"101152211221580284\n",
"080964261223281432\n",
"080964261223281432\n",
"013348061829263997\n",
"224934300132837549\n",
"14583865321049759\n",
"2626065538702722\n",
"3048162260682931\n",
"282157630429075679\n",
"1143206052848269\n",
"03274749341150662\n",
"010955014424149136\n",
"282157630429075679\n",
"195159084238961158\n",
"03274749341150662\n",
"293429301023738442\n",
"0103433535667605\n",
"116743693536486170\n",
"054169455736370109\n",
"1143206052848269\n",
"293429301023738442\n",
"\n",
"27676626601228861\n",
"1143206052848269\n",
"05463054031221652\n",
"163135142119897263\n",
"283227523421943504\n"
]
}
],
"source": [
"import holidays\n",
"from datetime import date\n",
"\n",
"# 创建一个中国节假日对象\n",
"cn_holidays = holidays.China()\n",
"# 获取当前日期\n",
"input_date = date.today()\n",
"switch = \"\"\n",
"# 判断日期是否为节假日\n",
"if input_date in cn_holidays:\n",
" switch = \"节假日\"\n",
" print(f\"{input_date} 是节假日\")\n",
"else:\n",
" switch = \"非节假日\"\n",
" print(f\"{input_date} 不是节假日\")\n",
"date_list = []\n",
"for data in cn_holidays:\n",
" date_list.append(str(data))\n",
"\n",
"from datetime import date, timedelta\n",
"\n",
"def get_saturdays(year):\n",
" start_date = date(year, 1, 1)\n",
" end_date = date(year, 12, 31)\n",
" saturdays = []\n",
"\n",
" while start_date <= end_date:\n",
" if start_date.weekday() == 6: # 周日的weekday值为6\n",
" saturdays.append(start_date)\n",
" start_date += timedelta(days=1)\n",
"\n",
" return saturdays\n",
"\n",
"current_year = date.today().year\n",
"saturdays = get_saturdays(current_year)\n",
"print(saturdays)\n",
"for data in saturdays:\n",
" date_list.append(str(data))\n",
"date_list = list(set(date_list))\n",
"date_list = sorted(date_list, reverse=False)\n",
"\n",
"# -*- coding: utf-8 -*-\n",
"import psycopg2\n",
"import pandas as pd\n",
"# 获得连接\n",
"conn = psycopg2.connect(database=\"f6_bi\", user=\"BASIC$ro_caowei\", password=\"!ro_caowei123\", host=\"hgprecn-cn-nif1vnv0y002-cn-shanghai.hologres.aliyuncs.com\", port=\"80\")\n",
"# 获得游标对象,一个游标对象可以对数据库进行执行操作\n",
"cursor = conn.cursor()\n",
"\n",
"import datetime\n",
"now_time = datetime.datetime.now()\n",
"yes_time = now_time + datetime.timedelta(days=-1)\n",
"yes_time_nyr = int(yes_time.strftime('%Y%m%d'))# 获取前一天日期\n",
"# sql语句 建表\n",
"sql =f\"\"\"SELECT * FROM \"public\".\"holo_ads_report_saas_profile_ngv_detail_d\" WHERE \"date_id\" = '{yes_time_nyr}' ;\"\"\"\n",
"# 执行语句\n",
"cursor.execute(sql)\n",
"# 获取结果集的每一行\n",
"rows = cursor.fetchall()\n",
"# 获取所有字段名\n",
"all_fields = cursor.description\n",
"#执行结果转化为dataframe\n",
"col = []\n",
"for i in all_fields:\n",
" col.append(i[0])\n",
"data_NGV = pd.DataFrame(list(rows),columns=col)\n",
"# data_NGV.to_excel(r'C:\\Users\\admin\\Desktop\\NGV明细.xlsx')\n",
"# 关闭数据库连接\n",
"cursor.close()\n",
"conn.close()\n",
"# 将A列和B列的日期字符串转换为日期格式\n",
"data_NGV['A'] = pd.to_datetime(data_NGV['expiry_time'])\n",
"data_NGV['B'] = pd.to_datetime(data_NGV['renew_date'])\n",
"data_NGV['条件'] = (data_NGV['org_type'] == \"一般\") & (data_NGV['org_status'] == '留存') & (data_NGV['group_grade'] != '区域KAMVP') & (data_NGV['group_grade'] != '全国KAFMVP')& (data_NGV['area_manager'] != '殷昊')& (data_NGV['area_manager'] != '孙玉蕾')\n",
"data_NGV = data_NGV.loc[data_NGV[\"条件\"] == True]\n",
"data_details = data_NGV.copy()\n",
"# 重置索引\n",
"data_details = data_details.reset_index(drop=True)\n",
"# 判断A列的日期是否大于B列的日期730天,如果是的话,将B列的值设置为1\n",
"data_details['条件'] = data_details.apply(lambda row: (row['A'] - row['B']).days if row['A'] - row['B'] >= pd.Timedelta(days=730) else row['条件'], axis=1)\n",
"data_details = data_details.loc[data_details[\"条件\"] != True]\n",
"# 定义一个函数,用于将数字除以365并取整数\n",
"def divide_by_365(x):\n",
" if isinstance(x, (int, float)):\n",
" return int(x / 365)\n",
" else:\n",
" return x\n",
"# 使用applymap()函数将divide_by_365函数应用到DataFrame的每个元素\n",
"data_details['年'] = data_details['条件'].apply(divide_by_365)\n",
"# 重置索引\n",
"data_details = data_details.reset_index(drop=True)\n",
"# 创建一个新的空的DataFrame\n",
"new_df = pd.DataFrame()\n",
"# 遍历原始DataFrame的每一行\n",
"from datetime import datetime, timedelta\n",
"for index, row in data_details.iterrows():\n",
" # 根据A列的值来决定复制的次数\n",
" for i_new in range(1,row['年']):\n",
" # 修改日期\n",
" row_new = row.copy()\n",
" c = row_new[\"renew_date\"]\n",
" date_obj = datetime.strptime(c, \"%Y-%m-%d\")\n",
" new_year = date_obj.year + i_new\n",
" new_date_obj = date_obj.replace(year=new_year)\n",
" new_c = new_date_obj.strftime(\"%Y-%m-%d\")\n",
" row_new[\"renew_date\"] = new_c\n",
" # 将当前行添加到新的DataFrame中\n",
" new_df = new_df._append(row_new, ignore_index=True)\n",
"# 合并两个DataFrame\n",
"merged_df = pd.concat([data_NGV, new_df], axis=0, ignore_index=True)\n",
"data_details = merged_df.copy() # 替换名称\n",
"\n",
"data_details_not_null = data_details[data_details['renew_date'].notnull()]\n",
"data_details_not_null = data_details_not_null[data_details_not_null['renew_date'].str.contains('2023')]\n",
"data_details_not_null = data_details_not_null.sort_values(by='renew_date', ascending=True).drop_duplicates(subset='id_own_group')\n",
"# 重置索引\n",
"data_details_not_null = data_details_not_null.reset_index(drop=True)\n",
"data_details = data_details_not_null.copy() # 替换名称 v2 \n",
"\n",
"from datetime import datetime\n",
"from dateutil.relativedelta import relativedelta\n",
"\n",
"for data in date_list:\n",
" # 将字符串转换为日期\n",
" date = datetime.strptime(data, '%Y-%m-%d')\n",
" # 将日期加1\n",
" date = date + relativedelta(days=1)\n",
" # 将日期转换回字符串格式\n",
" date_str = date.strftime('%Y-%m-%d')\n",
" # 遍历 renew_date 列,如果值等于 A,则将其改为 B\n",
" data_details['renew_date'] = data_details['renew_date'].replace(data, date_str)\n",
"\n",
"\n",
"\n",
"import pandas as pd\n",
"import pandas as pd\n",
"import numpy as np\n",
"import requests\n",
"import json\n",
"import time\n",
"import re\n",
"from datetime import datetime\n",
"from dateutil.relativedelta import relativedelta\n",
"from pathlib import Path\n",
"from urllib.parse import quote\n",
"from io import BytesIO\n",
"\n",
"ROOT = Path('.').absolute() # 当前工作目录\n",
"\n",
"\n",
"# 生成 token,参数不需要修改\n",
"def generateToken() -> str:\n",
" \"\"\" 生成 token \"\"\"\n",
"\n",
" token_api = 'https://api.dingtalk.com/v1.0/oauth2/accessToken'\n",
"\n",
" # 该信息在钉钉开放应用中\n",
" data = {\n",
" \"appKey\": \"ding5kqocon5s9oph5uq\",\n",
" \"appSecret\": 'HL1jgsIIfLAC0eTH0A1m4mwxUDqbgsiPeCCGGE3ocM6qJBTIW7Ivt9drxF_Z4Kb_'\n",
" }\n",
"\n",
" res = requests.post(token_api, json=data)\n",
" token = res.json()['accessToken']\n",
"\n",
" return token\n",
"\n",
"def read_instances(token, formUuid, page, n,formatted_today,formatted_today_two):\n",
" \"\"\" 函数功能:读取普通表单的所有数据 \"\"\"\n",
"\n",
" api = f'https://api.dingtalk.com//v1.0/yida/forms/instances/search'\n",
"\n",
" headers = {\n",
" \"Content-Type\": \"application/json\",\n",
" \"x-acs-dingtalk-access-token\": token\n",
" }\n",
"\n",
" formData = {\n",
" \"appType\" : \"APP_UYZ0KG6L0CCNV80GZ66O\",\n",
" \"systemToken\" : \"XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2\",\n",
" \"userId\" : \"yida_pub_account\",\n",
" \"language\" : \"zh_CN\",\n",
" \"formUuid\" : formUuid,\n",
" \"createFromTimeGMT\" : formatted_today,\n",
" \"createToTimeGMT\" : formatted_today_two,\n",
" \"currentPage\" : page,\n",
" \"pageSize\" : n\n",
" }\n",
"\n",
" res = requests.post(api, headers=headers, json=formData)\n",
" return res.json()\n",
"\n",
"def initiate_process(TOKEN,formUuid,processCode,formData):\n",
" \"\"\" 发起宜搭审批流程 \"\"\"\n",
" api = f'https://api.dingtalk.com//v1.0/yida/processes/instances/start'\n",
"\n",
" headers = {\n",
" \"Content-Type\": \"application/json\",\n",
" \"x-acs-dingtalk-access-token\": TOKEN\n",
" }\n",
" payload = {\n",
" \"appType\" : \"APP_UYZ0KG6L0CCNV80GZ66O\",\n",
" \"systemToken\" : \"XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2\",\n",
" \"userId\" : \"yida_pub_account\",\n",
" \"language\" : \"zh_CN\",\n",
" \"formUuid\" : formUuid,\n",
" \"formDataJson\" : json.dumps(formData, cls=NpEncoder),\n",
" \"processCode\" : processCode,\n",
" }\n",
"\n",
" res = requests.post(api, headers=headers, json=payload)\n",
" return res.json()\n",
"\n",
"def read_instances_new(token, formUuid, page, n):\n",
" \"\"\" 函数功能:读取普通表单的所有数据 \"\"\"\n",
"\n",
" api = f'https://api.dingtalk.com//v1.0/yida/forms/instances/search'\n",
"\n",
" headers = {\n",
" \"Content-Type\": \"application/json\",\n",
" \"x-acs-dingtalk-access-token\": token\n",
" }\n",
"\n",
" formData = {\n",
" \"appType\" : \"APP_UYZ0KG6L0CCNV80GZ66O\",\n",
" \"systemToken\" : \"XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2\",\n",
" \"userId\" : \"yida_pub_account\",\n",
" \"language\" : \"zh_CN\",\n",
" \"formUuid\" : formUuid,\n",
" \"currentPage\" : page,\n",
" \"pageSize\" : n\n",
" }\n",
"\n",
" res = requests.post(api, headers=headers, json=formData)\n",
" return res.json()\n",
"def read_instances_ngv(token, formUuid, page, n,searchField):\n",
" \"\"\" 函数功能:读取普通表单的所有数据 \"\"\"\n",
"\n",
" api = f'https://api.dingtalk.com//v1.0/yida/forms/instances/search'\n",
"\n",
" headers = {\n",
" \"Content-Type\": \"application/json\",\n",
" \"x-acs-dingtalk-access-token\": token\n",
" }\n",
"\n",
" formData = {\n",
" \"appType\" : \"APP_UYZ0KG6L0CCNV80GZ66O\",\n",
" \"systemToken\" : \"XA966F81JAJOFCVVVKO64E9MIIZV1EWE5SFMKJ2\",\n",
" \"userId\" : \"yida_pub_account\",\n",
" \"language\" : \"zh_CN\",\n",
" \"formUuid\" : formUuid,\n",
" \"searchFieldJson\": json.dumps(searchField),\n",
" \"currentPage\" : page,\n",
" \"pageSize\" : n\n",
" }\n",
"\n",
" res = requests.post(api, headers=headers, json=formData)\n",
" return res.json()\n",
"class NpEncoder(json.JSONEncoder):\n",
" def default(self, obj):\n",
" if isinstance(obj, np.integer):\n",
" return int(obj)\n",
" elif isinstance(obj, np.floating):\n",
" return float(obj)\n",
" elif isinstance(obj, np.ndarray):\n",
" return obj.tolist()\n",
" else:\n",
" return super(NpEncoder, self).default(obj)\n",
" \n",
"TOKEN = generateToken()\n",
"'''读取员工对应关系:宜搭员工-ID对应表 '''\n",
"FORMID = \"FORM-EA866E715PF9YA7ECCAGSABX91Q72PVA3WRFL6\" # 宜搭员工-ID对应表 FORM-EA866E715PF9YA7ECCAGSABX91Q72PVA3WRFL6\n",
"# 读取流程表单数据\n",
"form_data = read_instances_new(token=TOKEN, formUuid=FORMID, page=1, n=100)\n",
"PAGES = form_data.get('totalCount')//100 + 1\n",
"ALL_DATA_staff = {}\n",
"\"\"\" 获取全量数据 \"\"\"\n",
"for i in range(1, PAGES+1):\n",
" # form_data = read_processes_instances(token=TOKEN, formUuid=FORMID, createFromTimeGMT=CREATE_FROM, createToTimeGMT=CREATE_TO, page=i, n=100, searchField={'textField_l7if5ff9': '否'})\n",
" form_data = read_instances_new(token=TOKEN, formUuid=FORMID, page=i, n=100)\n",
" for data in form_data.get('data'):\n",
" ALL_DATA_staff[data['formData']['textField_lfrw3u58']]=data['formData']['textField_lfrw3u59']\n",
"'''读取省市小六技术专家区域客服区域客成 '''\n",
"FORMID = \"FORM-TP866D918DFCA4FW79YZU5X43FO32QZJQDZJL7\" #省市小六技术专家区域客服区域客成\n",
"# 读取流程表单数据\n",
"form_data = read_instances_new(token=TOKEN, formUuid=FORMID, page=1, n=100)\n",
"PAGES = form_data.get('totalCount')//100 + 1\n",
"textField_gif29wy = {}\n",
"textField_3athky8 = {}\n",
"textField_3hgho1m = {}\n",
"textField_nc7gskc = {}\n",
"textField_qk1e5di = {}\n",
"textField_m3hchxc = {} # 市\n",
"\"\"\" 获取全量数据 \"\"\"\n",
"for i in range(1, PAGES+1):\n",
" form_data = read_instances_new(token=TOKEN, formUuid=FORMID, page=i, n=100)\n",
" for data in form_data.get('data'):\n",
" textField_gif29wy[data['formData']['textField_o7jtgf1']]=data['formData']['textField_gif29wy'] #区域客成id\n",
" textField_3athky8[data['formData']['textField_o7jtgf1']]=data['formData']['textField_3athky8'] #区域客服id\n",
" textField_3hgho1m[data['formData']['textField_o7jtgf1']]=data['formData']['textField_3hgho1m'] #小六id\n",
" textField_nc7gskc[data['formData']['textField_o7jtgf1']]=data['formData']['textField_nc7gskc'] #技术专家id\n",
" textField_qk1e5di[data['formData']['textField_o7jtgf1']]=data['formData']['textField_lntniove'] #区域经理id\n",
" textField_m3hchxc[data['formData']['textField_m3hchxc']]=data['formData']['textField_3hgho1m'] #小六id-市\n",
"print(f'读取到省市小六技术专家区域客服区域客成表单中 {len(textField_gif29wy)} 条数据!')\n",
"'''读取市-技术专家id '''\n",
"FORMID = \"FORM-A8666NA1FJDEVPBB6VVTOCMP47UP2J2L6SPML2\" #市-技术专家id\n",
"# 读取流程表单数据\n",
"form_data = read_instances_new(token=TOKEN, formUuid=FORMID, page=1, n=100)\n",
"PAGES = form_data.get('totalCount')//100 + 1\n",
"textField_lmps6q39 = {}\n",
"\"\"\" 获取全量数据 \"\"\"\n",
"for i in range(1, PAGES+1):\n",
" # form_data = read_processes_instances(token=TOKEN, formUuid=FORMID, createFromTimeGMT=CREATE_FROM, createToTimeGMT=CREATE_TO, page=i, n=100, searchField={'textField_l7if5ff9': '否'})\n",
" form_data = read_instances_new(token=TOKEN, formUuid=FORMID, page=i, n=100)\n",
" for data in form_data.get('data'):\n",
" textField_lmps6q39[data['formData']['textField_lmps6q38']]=data['formData']['textField_lmps6q39'] #技术专家id\n",
"print(f'读取到市-技术专家id表单中 {len(textField_lmps6q39)} 条数据!')\n",
"import datetime\n",
"now_time = datetime.datetime.now()\n",
"today = now_time + datetime.timedelta(days=-83)\n",
"formatted_today_90 = today.strftime(\"%Y-%m-%d\")\n",
"today = now_time + datetime.timedelta(days=-113)\n",
"formatted_today_120 = today.strftime(\"%Y-%m-%d\")\n",
"today = now_time + datetime.timedelta(days=-173)\n",
"formatted_today_180 = today.strftime(\"%Y-%m-%d\")\n",
"timestamp_ms = int(time.time() * 1000) # 当然日期时间戳 毫秒级\n",
"# 获取数据\n",
"data_details_90 = data_details.copy()\n",
"data_details_90['条件'] = (data_details_90['renew_date'] == formatted_today_90) & (data_details_90['saas_edition_fmt'] != '基础版')\n",
"data_details_90 = data_details_90.loc[data_details_90[\"条件\"] == True]\n",
"data_details_120 = data_details.copy()\n",
"data_details_120['条件'] = (data_details_120['renew_date'] == formatted_today_120) & (data_details_120['saas_edition_fmt'] == '基础版')\n",
"data_details_120 = data_details_120.loc[data_details_120[\"条件\"] == True]\n",
"data_details_180 = data_details.copy()\n",
"data_details_180['条件'] = (data_details_180['renew_date'] == formatted_today_180) & (data_details_180['saas_edition_fmt'] != '基础版')\n",
"data_details_180 = data_details_180.loc[data_details_180[\"条件\"] == True]\n",
"\n",
"text_jcb_120 = '''\n",
"续约后120天:\n",
"1.客户系统使用问题集中解答;\n",
"2.跟客户查看车辆分析,推荐短信及其他营销功能;\n",
"3.红包裂变功能介绍;\n",
"4.说明转介绍政策,索要转介绍;\n",
"'''\n",
"text_bzb_90 = '''\n",
"续约后90天:\n",
"1.客户系统使用问题集中解答;\n",
"2.跟客户查看车辆分析,推荐短信及其他营销功能;\n",
"3.会员卡功能使用情况分析,推荐公众号引导升级;\n",
"4.说明转介绍政策,索要转介绍;\n",
"'''\n",
"text_bzb_180 = '''\n",
"续约后180天:\n",
"1.客户系统使用问题集中解答;\n",
"2.跟客户查看车辆分析,推荐短信及其他营销功能;\n",
"3.会员卡功能使用情况分析,推荐公众号引导升级;\n",
"4.红包裂变推荐;\n",
"'''\n",
"text_qita_90 = '''\n",
"续约后90天:\n",
"1.客户系统使用问题集中解答;\n",
"2.跟客户查看车辆分析,推荐短信及其他营销功能;\n",
"3.公众号小程序功能使用情况分析,提升系统使用深度;\n",
"4.说明转介绍政策,索要转介绍;\n",
"'''\n",
"text_qita_180 = '''\n",
"续约后180天:\n",
"1.客户系统使用问题集中解答;\n",
"2.跟客户查看车辆分析,推荐短信及其他营销功能;\n",
"3.公众号小程序功能使用情况分析,提升系统使用深度;\n",
"4.红包裂变推荐;\n",
"'''\n",
"data_details_90['拜访目的说明'] = \"\"\n",
"# text_bzb_90\n",
"data_details_90['拜访目的说明'] = data_details_90.apply(lambda row: text_bzb_90 if row['saas_edition_fmt'] == '标准版' else row['拜访目的说明'], axis=1)\n",
"# text_qita_90\n",
"data_details_90['拜访目的说明'] = data_details_90.apply(lambda row: text_qita_90 if row['saas_edition_fmt'] != '标准版' else row['拜访目的说明'], axis=1)\n",
"\n",
"# text_jcb_120\n",
"data_details_120['拜访目的说明'] = text_jcb_120\n",
"\n",
"data_details_180['拜访目的说明'] = \"\"\n",
"# text_bzb_180\n",
"data_details_180['拜访目的说明'] = data_details_180.apply(lambda row: text_bzb_180 if row['saas_edition_fmt'] == '标准版' else row['拜访目的说明'], axis=1)\n",
"# text_qita_180\n",
"data_details_180['拜访目的说明'] = data_details_180.apply(lambda row: text_qita_180 if row['saas_edition_fmt'] != '标准版' else row['拜访目的说明'], axis=1)\n",
"# 合并三个DataFrame\n",
"data_result = pd.concat([data_details_90, data_details_120, data_details_180], ignore_index=True)\n",
"print(len(data_result))\n",
"# 获取待回访人员信息+去重\n",
"name_list = []\n",
"for data in data_result['service_impl_principal']:\n",
" name_list.append(data)\n",
"unique_arr = []\n",
"[unique_arr.append(x) for x in name_list if x not in unique_arr]\n",
"print(unique_arr)\n",
"# 每日工作计划\n",
"formUuid = \"FORM-4V966N81OMEEH85QDP8XW4AH1AIZ2GKRLZTML21\"\n",
"processCode = \"TPROC--4V966N81OMEEH85QDP8XW4AH1AIZ21ORLZTML31\"\n",
"# 遍历数据并进行创建\n",
"for name in unique_arr:\n",
" tableField_lnsi0v71 = {}\n",
" tableField_lnsi0v71['dateField_lmelabb1'] = \"\"\n",
" tableField_lnsi0v71['employeeField_lmeqk429'] = \"\"\n",
" tableField_lnsi0v71['employeeField_lmeqk423'] = \"\"\n",
" tableField_lnsi0v71['employeeField_lmeqk424'] = \"\"\n",
" for i in range(0,len(data_result)):\n",
" if data_result.loc[i,\"service_impl_principal\"] == name:\n",
" print(textField_m3hchxc[data_details[\"city_name\"][i]]) # data_details\n",
" data_one = {} # 子表单\n",
" data_two = {} # 主表单\n",
" # 子表单\n",
" data_one['textField_lnsi0v72'] = data_result.loc[i,\"org_name\"] # 门店名称\n",
" data_one['textField_lnsi0v6s'] = data_result.loc[i,\"saas_edition_fmt\"] # 销售版本\n",
" try:\n",
" data_one['employeeField_lnsi0v6u'] = textField_nc7gskc[name] # 技术专家\n",
" data_one['employeeField_lnsi0v6v'] = textField_qk1e5di[name] # 区域经理\n",
" if textField_3hgho1m[name] ==\"\":\n",
" data_one['employeeField_lnsi0v6w'] = textField_m3hchxc[data_details[\"city_name\"][i]] # 运营顾问 \n",
" else:\n",
" data_one['employeeField_lnsi0v6w'] = textField_3hgho1m[name] # 运营顾问\n",
" except:\n",
" data_one['employeeField_lnsi0v6u'] = textField_lmps6q39[data_details[\"city_name\"][i]] # 技术专家\n",
" data_one['employeeField_lnsi0v6v'] = ALL_DATA_staff[data_result.loc[i,\"area_manager\"]] # 区域经理\n",
" data_one['employeeField_lnsi0v6w'] = textField_m3hchxc[data_details[\"city_name\"][i]] # 运营顾问\n",
" data_one['dateField_lnsi0v6x'] = str(timestamp_ms) # 计划日期\n",
" data_one['textField_lnsi0v6y'] = data_result.loc[i,\"org_name\"] # 门店名称-拷贝\n",
" data_one['textField_lnsi0v6z'] = data_result.loc[i,\"org_code\"] # 门店编码\n",
" data_one['selectField_lnsi0v6q'] = \"客情维护\" # 拜访目的\n",
" data_one['textareaField_lnsi0v6r'] = data_result.loc[i,\"拜访目的说明\"] # 拜访目的说明\n",
" data_one['textField_lnsi0v70'] = data_result.loc[i,\"id_own_group\"] # 公司id\n",
" # 加入数据\n",
" \n",
" tableField_lnsi0v71['tableField_lnsi0v71'] = [data_one]\n",
" # 主表单\n",
" tableField_lnsi0v71['dateField_lmelabb1'] = str(timestamp_ms)\n",
" try:\n",
" if textField_3hgho1m[name] ==\"\":\n",
" tableField_lnsi0v71['employeeField_lmeqk429'] = textField_m3hchxc[data_details[\"city_name\"][i]] # 小六 textField_m3hchxc[data_NGV[\"city_name\"][i]]\n",
" else:\n",
" tableField_lnsi0v71['employeeField_lmeqk429'] = textField_3hgho1m[name] # 小六\n",
" tableField_lnsi0v71['employeeField_lmeqk423'] = textField_qk1e5di[name] # 区域经理\n",
" tableField_lnsi0v71['employeeField_lmeqk424'] = textField_nc7gskc[name] # 技术专家\n",
" except:\n",
" tableField_lnsi0v71['employeeField_lmeqk429'] = textField_m3hchxc[data_details[\"city_name\"][i]] # 小六\n",
" tableField_lnsi0v71['employeeField_lmeqk423'] = ALL_DATA_staff[data_result.loc[i,\"area_manager\"]] # 区域经理\n",
" tableField_lnsi0v71['employeeField_lmeqk424'] = textField_lmps6q39[data_details[\"city_name\"][i]] # 技术专家\n",
" tableField_lnsi0v71['textField_lmu0523h'] = \"自动派发回访计划\" # 状态备用\n",
" # 富文本 超链接 NGV\n",
" try:\n",
" form_data_ngv = read_instances_ngv(token=TOKEN, formUuid=\"FORM-ZK866D91O9LA4NIHCARG2DPIPCXF3Z087PPHL91\", page=1, n=100, searchField={'textField_zc1iowp': data_result.loc[i,\"org_code\"]})\n",
" tableField_lnsi0v71['editorField_lodoplg0'] = [\"root\",{},[\"p\",{},[\"span\",{\"data-type\":\"text\"},[\"span\",{\"data-type\":\"leaf\"},\"\"]],[\"a\",{\"href\":\"https://f6car.aliwork.com/APP_UYZ0KG6L0CCNV80GZ66O/formDetail/FORM-ZK866D91O9LA4NIHCARG2DPIPCXF3Z087PPHL91?formInstId=\"+form_data_ngv['data'][0]['formInstanceId']+\"&isAdmin=true\"},[\"span\",{\"data-type\":\"text\"},[\"span\",{\"unlink\":{},\"data-type\":\"leaf\"},\"点击查看门店NGV\"]]],[\"span\",{\"data-type\":\"text\"},[\"span\",{\"unlink\":{},\"data-type\":\"leaf\"},\"\"]]]] # 富文本 超链接 NGV\n",
" except:\n",
" pass\n",
" # res=initiate_process(TOKEN,formUuid,processCode,tableField_lnsi0v71)\n",
" # print(res,tableField_lnsi0v71)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"i"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"2 宝鸡市\n",
"3 大同市\n",
"6 台州市\n",
"7 北京市市辖区\n",
"8 邯郸市\n",
" ... \n",
"32067 苏州市\n",
"32070 镇江市\n",
"32071 泰州市\n",
"32073 南通市\n",
"32074 洛阳市\n",
"Name: city_name, Length: 15450, dtype: object"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data_NGV[\"city_name\"]"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'呼和浩特市': '010955014424149136',\n",
" '沧州市': '055512041727184572',\n",
" '西安市': '101152211221580284',\n",
" '台州市': '195159084238961158',\n",
" '郑州市': '6412695429095931',\n",
" '南通市': '20590707351213970',\n",
" '信阳市': '116743693536486170',\n",
" '大理白族自治州': '175713105932935289',\n",
" '杭州市': '036316110429501709',\n",
" '黔南布依族苗族自治州': '283227523421943504',\n",
" '乌鲁木齐市': '0103433535667605',\n",
" '洛阳市': '054169455736370109',\n",
" '绍兴市': '195159084238961158',\n",
" '黄山市': '075458412020533110',\n",
" '嘉峪关市': '282157630429075679',\n",
" '湖州市': '036316110429501709',\n",
" '常州市': '030337256535629831',\n",
" '沈阳市': '031367616021462180',\n",
" '唐山市': '2750181616954944',\n",
" '济南市': '032861373036352679',\n",
" '渭南市': '0103433535667605',\n",
" '苏州市': '03274749341150662',\n",
" '张掖市': '282157630429075679',\n",
" '包头市': '055512041727184572',\n",
" '天水市': '282157630429075679',\n",
" '定西市': '282157630429075679',\n",
" '扬州市': '110740004537832492',\n",
" '徐州市': '106216373838354980',\n",
" '丹东市': '031367616021462180',\n",
" '无锡市': '030337256535629831',\n",
" '太原市': '050160034020876364',\n",
" '忻州市': '050160034020876364',\n",
" '昆明市': '175713105932935289',\n",
" '南京市': '1143206052848269',\n",
" '马鞍山市': '075458412020533110',\n",
" '北京市市辖区': '171201105229666119',\n",
" '淮安市': '03274749341150662',\n",
" '平顶山市': '0117472424956309',\n",
" '盐城市': '1143206052848269',\n",
" '吕梁市': '050160034020876364',\n",
" '鄂尔多斯市': '055512041727184572',\n",
" '宿迁市': '110740004537832492',\n",
" '乌兰察布市': '055512041727184572',\n",
" '上海市市辖区': '2626065538702722',\n",
" '南昌市': '',\n",
" '焦作市': '0117472424956309',\n",
" '福州市': '053052302136860181',\n",
" '菏泽市': '032861373036352679',\n",
" '岳阳市': '224934300132837549',\n",
" '廊坊市': '2750181616954944',\n",
" '阜新市': '052909055823302010',\n",
" '宁波市': '195159084238961158',\n",
" '襄阳市': '05463054031221652',\n",
" '济宁市': '1253235059942945',\n",
" '西宁市': '282157630429075679',\n",
" '荆门市': '3704680936560271',\n",
" '咸阳市': '0103433535667605',\n",
" '金华市': '253635282420072174',\n",
" '安阳市': '6412695429095931',\n",
" '枣庄市': '27676626601228861',\n",
" '辽阳市': '03051357221235925',\n",
" '长沙市': '3704680936560271',\n",
" '深圳市': '0615271028177307',\n",
" '开封市': '116743693536486170',\n",
" '许昌市': '116743693536486170',\n",
" '塔城地区': '080964261223281432',\n",
" '邢台市': '416944291218848',\n",
" '新乡市': '6412695429095931',\n",
" '嘉兴市': '013348061829263997',\n",
" '南阳市': '116743693536486170',\n",
" '漯河市': '116743693536486170',\n",
" '武汉市': '3704680936560271',\n",
" '巴音郭楞蒙古自治州': '080964261223281432',\n",
" '重庆市市辖区': '100425305526134642',\n",
" '汉中市': '14583865321049759',\n",
" '保山市': '175713105932935289',\n",
" '泸州市': '293429301023738442',\n",
" '常德市': '224934300132837549',\n",
" '成都市': '293429301023738442',\n",
" '株洲市': '224934300132837549',\n",
" '毕节市': '283227523421943504',\n",
" '阜阳市': '054169455736370109',\n",
" '贵阳市': '283227523421943504',\n",
" '抚顺市': '052909055823302010',\n",
" '新余市': '3704680936560271',\n",
" '运城市': '14583865321049759',\n",
" '楚雄彝族自治州': '133703272626143118',\n",
" '庆阳市': '282157630429075679',\n",
" '郴州市': '19212436541043695',\n",
" '安庆市': '075458412020533110',\n",
" '青岛市': '1253235059942945',\n",
" '承德市': '2750181616954944',\n",
" '银川市': '282157630429075679',\n",
" '延安市': '101152211221580284',\n",
" '白银市': '282157630429075679',\n",
" '商洛市': '14583865321049759',\n",
" '大庆市': '3048162260682931',\n",
" '濮阳市': '6412695429095931',\n",
" '鞍山市': '031367616021462180',\n",
" '九江市': '19212436541043695',\n",
" '恩施土家族苗族自治州': '3704680936560271',\n",
" '宝鸡市': '0103433535667605',\n",
" '萍乡市': '',\n",
" '天津市市辖区': '2750181616954944',\n",
" '保定市': '693800011139268',\n",
" '秦皇岛市': '0254392654682418',\n",
" '宜昌市': '3704680936560271',\n",
" '拉萨市': '012138015932369611',\n",
" '金昌市': '282157630429075679',\n",
" '铁岭市': '03051357221235925',\n",
" '海南藏族自治州': '282157630429075679',\n",
" '普洱市': '175713105932935289',\n",
" '镇江市': '110740004537832492',\n",
" '景德镇市': '224934300132837549',\n",
" '广安市': '15235241321213058',\n",
" '铜川市': '101152211221580284',\n",
" '抚州市': '19212436541043695',\n",
" '营口市': '016222434123279671',\n",
" '黔西南布依族苗族自治州': '283227523421943504',\n",
" '钦州市': '096317175340000380',\n",
" '黑河市': '3048162260682931',\n",
" '张家口市': '010955014424149136',\n",
" '海东市': '282157630429075679',\n",
" '西双版纳傣族自治州': '175713105932935289',\n",
" '北屯市': '080964261223281432',\n",
" '铁门关市': '080964261223281432',\n",
" '中山市': '180720602439816818',\n",
" '滨州市': '1253235059942945',\n",
" '绵阳市': '293429301023738442',\n",
" '梅州市': '163135142119897263',\n",
" '珠海市': '1457294844855952',\n",
" '阳江市': '0615271028177307',\n",
" '池州市': '075458412020533110',\n",
" '柳州市': '096317175340000380',\n",
" '昌都市': '180668465038030327',\n",
" '厦门市': '053052302136860181',\n",
" '攀枝花市': '100425305526134642',\n",
" '益阳市': '224934300132837549',\n",
" '阳泉市': '0237196424846034',\n",
" '本溪市': '031367616021462180',\n",
" '宜宾市': '012138015932369611',\n",
" '眉山市': '100425305526134642',\n",
" '兰州市': '282157630429075679',\n",
" '遵义市': '283227523421943504',\n",
" '重庆市郊县': '15235241321213058',\n",
" '兴安盟': '011062062226778435',\n",
" '榆林市': '101152211221580284',\n",
" '吉林市': '011062062226778435',\n",
" '清远市': '163135142119897263',\n",
" '烟台市': '27676626601228861',\n",
" '大连市': '016222434123279671',\n",
" '茂名市': '0615271028177307',\n",
" '广州市': '180720602439816818',\n",
" '昭通市': '133703272626143118',\n",
" '朔州市': '055512041727184572',\n",
" '巴中市': '180668465038030327',\n",
" '商丘市': '116743693536486170',\n",
" '吉安市': '',\n",
" '赣州市': '',\n",
" '防城港市': '096317175340000380',\n",
" '日喀则市': '012138015932369611',\n",
" '海西蒙古族藏族自治州': '282157630429075679',\n",
" '海口市': '096317175340000380',\n",
" '通辽市': '03051357221235925',\n",
" '东营市': '1253235059942945',\n",
" '达州市': '180668465038030327',\n",
" '延边朝鲜族自治州': '011062062226778435',\n",
" '定安县': '096317175340000380',\n",
" '韶关市': '163135142119897263',\n",
" '佛山市': '163135142119897263',\n",
" '崇左市': '180720602439816818',\n",
" '儋州市': '096317175340000380',\n",
" '那曲市': '012138015932369611',\n",
" '邯郸市': '416944291218848',\n",
" '林芝市': '180668465038030327',\n",
" '玉溪市': '133703272626143118',\n",
" '北海市': '096317175340000380',\n",
" '内江市': '180668465038030327',\n",
" '张家界市': '224934300132837549',\n",
" '衡阳市': '224934300132837549',\n",
" '永州市': '224934300132837549',\n",
" '怒江傈僳族自治州': '175713105932935289',\n",
" '琼海市': '096317175340000380',\n",
" '博尔塔拉蒙古自治州': '080964261223281432',\n",
" '乌海市': '055512041727184572',\n",
" '潮州市': '0615271028177307',\n",
" '潍坊市': '1253235059942945',\n",
" '迪庆藏族自治州': '133703272626143118',\n",
" '南宁市': '180720602439816818',\n",
" '朝阳市': '031367616021462180',\n",
" '孝感市': '05463054031221652',\n",
" '周口市': '054169455736370109',\n",
" '东莞市': '180720602439816818',\n",
" '哈尔滨市': '031367616021462180',\n",
" '临汾市': '050160034020876364',\n",
" '赤峰市': '031367616021462180',\n",
" '湘潭市': '19212436541043695',\n",
" '漳州市': '053052302136860181',\n",
" '白城市': '011062062226778435',\n",
" '长春市': '011062062226778435',\n",
" '和田地区': '080964261223281432',\n",
" '巴彦淖尔市': '010955014424149136',\n",
" '六盘水市': '283227523421943504',\n",
" '揭阳市': '0615271028177307',\n",
" '阿拉善盟': '010955014424149136',\n",
" '长治市': '050160034020876364',\n",
" '三亚市': '096317175340000380',\n",
" '德州市': '032861373036352679',\n",
" '肇庆市': '180720602439816818',\n",
" '湛江市': '163135142119897263',\n",
" '六安市': '075458412020533110',\n",
" '锡林郭勒盟': '055512041727184572',\n",
" '文山壮族苗族自治州': '175713105932935289',\n",
" '陇南市': '282157630429075679',\n",
" '贵港市': '180720602439816818',\n",
" '铜陵市': '075458412020533110',\n",
" '宁德市': '053052302136860181',\n",
" '随州市': '05463054031221652',\n",
" '温州市': '253635282420072174',\n",
" '玉林市': '180720602439816818',\n",
" '云浮市': '1457294844855952',\n",
" '安顺市': '283227523421943504',\n",
" '汕尾市': '163135142119897263',\n",
" '德宏傣族景颇族自治州': '175713105932935289',\n",
" '河源市': '0615271028177307',\n",
" '贺州市': '096317175340000380',\n",
" '万宁市': '096317175340000380',\n",
" '连云港市': '1143206052848269',\n",
" '平凉市': '282157630429075679',\n",
" '乐山市': '133703272626143118',\n",
" '来宾市': '096317175340000380',\n",
" '固原市': '282157630429075679',\n",
" '临夏回族自治州': '282157630429075679',\n",
" '凉山彝族自治州': '100425305526134642',\n",
" '上饶市': '19212436541043695',\n",
" '临沂市': '1253235059942945',\n",
" '淄博市': '27676626601228861',\n",
" '泉州市': '053052302136860181',\n",
" '鹤壁市': '6412695429095931',\n",
" '仙桃市': '05463054031221652',\n",
" '潜江市': '3704680936560271',\n",
" '宣城市': '054169455736370109',\n",
" '松原市': '011062062226778435',\n",
" '佳木斯市': '011062062226778435',\n",
" '绥化市': '011062062226778435',\n",
" '牡丹江市': '011062062226778435',\n",
" '双鸭山市': '3048162260682931',\n",
" '克拉玛依市': '080964261223281432',\n",
" '宜春市': '3704680936560271',\n",
" '七台河市': '011062062226778435',\n",
" '日照市': '1253235059942945',\n",
" '大同市': '010955014424149136',\n",
" '喀什地区': '080964261223281432',\n",
" '舟山市': '036316110429501709',\n",
" '天门市': '3704680936560271',\n",
" '江门市': '180720602439816818',\n",
" '伊犁哈萨克自治州': '080964261223281432',\n",
" '齐齐哈尔市': '016222434123279671',\n",
" '百色市': '180720602439816818',\n",
" '四平市': '011062062226778435',\n",
" '德阳市': '012138015932369611',\n",
" '阿勒泰地区': '080964261223281432',\n",
" '南充市': '100425305526134642',\n",
" '自贡市': '012138015932369611',\n",
" '黔东南苗族侗族自治州': '283227523421943504',\n",
" '石嘴山市': '282157630429075679',\n",
" '芜湖市': '075458412020533110',\n",
" '酒泉市': '282157630429075679',\n",
" '吴忠市': '282157630429075679',\n",
" '红河哈尼族彝族自治州': '133703272626143118',\n",
" '吐鲁番市': '080964261223281432',\n",
" '莆田市': '053052302136860181',\n",
" '锦州市': '03051357221235925',\n",
" '黄石市': '05463054031221652',\n",
" '桂林市': '096317175340000380',\n",
" '河池市': '096317175340000380',\n",
" '湘西土家族苗族自治州': '224934300132837549',\n",
" '曲靖市': '283227523421943504',\n",
" '黄冈市': '05463054031221652',\n",
" '临沧市': '175713105932935289',\n",
" '南平市': '053052302136860181',\n",
" '晋中市': '050160034020876364',\n",
" '惠州市': '0615271028177307',\n",
" '衢州市': '253635282420072174',\n",
" '衡水市': '416944291218848',\n",
" '呼伦贝尔市': '011062062226778435',\n",
" '荆州市': '05463054031221652',\n",
" '通化市': '011062062226778435',\n",
" '遂宁市': '012138015932369611',\n",
" '资阳市': '012138015932369611',\n",
" '咸宁市': '05463054031221652',\n",
" '丽江市': '175713105932935289',\n",
" '雅安市': '180668465038030327',\n",
" '广元市': '012138015932369611',\n",
" '伊春市': '011062062226778435',\n",
" '鹤岗市': '011062062226778435',\n",
" '阿克苏地区': '080964261223281432',\n",
" '淮南市': '054169455736370109',\n",
" '武威市': '282157630429075679',\n",
" '十堰市': '05463054031221652',\n",
" '泰州市': '1143206052848269',\n",
" '铜仁市': '063217573735785932',\n",
" '克孜勒苏柯尔克孜自治州': '080964261223281432',\n",
" '驻马店市': '116743693536486170',\n",
" '宿州市': '054169455736370109',\n",
" '亳州市': '054169455736370109',\n",
" '晋城市': '050160034020876364',\n",
" '昌吉回族自治州': '080964261223281432',\n",
" '邵阳市': '224934300132837549',\n",
" '怀化市': '224934300132837549',\n",
" '威海市': '27676626601228861',\n",
" '石家庄市': '416944291218848',\n",
" '蚌埠市': '054169455736370109',\n",
" '娄底市': '224934300132837549',\n",
" '葫芦岛市': '031367616021462180',\n",
" '泰安市': '032861373036352679',\n",
" '丽水市': '195159084238961158',\n",
" '哈密市': '080964261223281432',\n",
" '阿拉尔市': '080964261223281432',\n",
" '淮北市': '054169455736370109',\n",
" '盘锦市': '052909055823302010',\n",
" '鄂州市': '05463054031221652',\n",
" '山南市': '100425305526134642',\n",
" '汕头市': '163135142119897263',\n",
" '澄迈县': '096317175340000380',\n",
" '五家渠市': '080964261223281432',\n",
" '合肥市': '075458412020533110',\n",
" '三门峡市': '0117472424956309',\n",
" '滁州市': '054169455736370109',\n",
" '聊城市': '032861373036352679',\n",
" '安康市': '245308451136546029',\n",
" '济源市': '6412695429095931',\n",
" '石河子市': '080964261223281432',\n",
" '临高县': '096317175340000380',\n",
" '中卫市': '282157630429075679',\n",
" '乐东黎族自治县': '096317175340000380',\n",
" '龙岩市': '053052302136860181',\n",
" '鸡西市': '011062062226778435',\n",
" '鹰潭市': '3704680936560271',\n",
" '东方市': '096317175340000380',\n",
" '陵水黎族自治县': '096317175340000380',\n",
" '辽源市': '011062062226778435',\n",
" '梧州市': '096317175340000380',\n",
" '昌江黎族自治县': '096317175340000380',\n",
" '阿坝藏族羌族自治州': '012138015932369611',\n",
" '大兴安岭地区': '011062062226778435',\n",
" '三明市': '053052302136860181'}"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"textField_m3hchxc"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "F6processing",
"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.9.4"
}
},
"nbformat": 4,
"nbformat_minor": 2
}