Skip to content

Instantly share code, notes, and snippets.

@mrbkdad
Created June 21, 2019 04:48
Show Gist options
  • Save mrbkdad/d17f2fe5704c0adf1345839691a71a38 to your computer and use it in GitHub Desktop.
Save mrbkdad/d17f2fe5704c0adf1345839691a71a38 to your computer and use it in GitHub Desktop.
ROI from Orchestrator with API by python
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [],
"source": [
"import requests, json, datetime\n",
"from bs4 import BeautifulSoup"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
"def getAuthKey(url,tenancyName,userName,password):\n",
" data = {\n",
" \"tenancyName\": tenancyName,\n",
" \"usernameOrEmailAddress\": userName,\n",
" \"password\": password\n",
"\n",
" }\n",
" sess = requests.Session()\n",
" req = requests.post(url+\"/api/Account/Authenticate\",data)\n",
" if(req.status_code == 200):\n",
" resJson = req.json()\n",
" return resJson[\"result\"]\n",
" else:\n",
" return None\n",
"\n",
"def postUiPathAPI(url,key,data):\n",
" head = {\n",
" \"Content-Type\" : \"application/json\",\n",
" \"Authorization\" : \"Bearer \" + key\n",
" }\n",
" \n",
" req = requests.post(url,json.dumps(data),headers=head)\n",
" if(req.status_code == 200 or req.status_code == 201):\n",
" return req.json()\n",
" else:\n",
" print(BeautifulSoup(req.text,'lxml'))\n",
" return None\n",
"\n",
"def getUiPathAPI(url,key):\n",
" head = {\n",
" \"Content-Type\" : \"application/json\",\n",
" \"Authorization\" : \"Bearer \" + key\n",
" }\n",
" \n",
" req = requests.get(url,headers=head)\n",
" if(req.status_code == 200):\n",
" return req.json()\n",
" else:\n",
" print(BeautifulSoup(req.text,'lxml'))\n",
" return None\n",
"\n",
"def pretty(reqJson):\n",
" for k in reqJson:\n",
" print(k + \" : \" + str(reqJson[k]))"
]
},
{
"cell_type": "code",
"execution_count": 73,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"{'@odata.context': 'https://platform.uipath.com/input your tenacy/input your tenacy:443/odata/$metadata#Jobs',\n",
" '@odata.count': 13,\n",
" 'value': [{'Key': '4bff3094-ed99-474d-a390-51f331b3255d',\n",
" 'StartTime': '2019-06-21T02:03:41.993Z',\n",
" 'EndTime': '2019-06-21T02:03:44.287Z',\n",
" 'State': 'Successful',\n",
" 'Source': 'Manual',\n",
" 'SourceType': 'Manual',\n",
" 'BatchExecutionKey': '4d0ec00e-7c85-46e5-913b-76802b314d81',\n",
" 'Info': 'Job completed',\n",
" 'CreationTime': '2019-06-21T02:03:35.09Z',\n",
" 'StartingScheduleId': None,\n",
" 'ReleaseName': '로봇_테스트01_MyEnv01',\n",
" 'Type': 'Unattended',\n",
" 'InputArguments': None,\n",
" 'OutputArguments': '{}',\n",
" 'HostMachineName': 'WIN-UPT62LUQPN7',\n",
" 'HasMediaRecorded': False,\n",
" 'Id': 10597409},\n",
" {'Key': '3335cd80-62c4-4cb1-b767-27d00b0405a4',\n",
" 'StartTime': '2019-06-21T02:04:16.47Z',\n",
" 'EndTime': '2019-06-21T02:04:19.023Z',\n",
" 'State': 'Successful',\n",
" 'Source': 'Manual',\n",
" 'SourceType': 'Manual',\n",
" 'BatchExecutionKey': 'f078a587-1f31-47ff-ab23-1b3051902313',\n",
" 'Info': 'Job completed',\n",
" 'CreationTime': '2019-06-21T02:04:15.4Z',\n",
" 'StartingScheduleId': None,\n",
" 'ReleaseName': '로봇_테스트01_MyEnv01',\n",
" 'Type': 'Unattended',\n",
" 'InputArguments': None,\n",
" 'OutputArguments': '{}',\n",
" 'HostMachineName': 'WIN-UPT62LUQPN7',\n",
" 'HasMediaRecorded': False,\n",
" 'Id': 10597433},\n",
" {'Key': 'a81dc401-e4b4-418a-948e-c4aa5cded207',\n",
" 'StartTime': '2019-06-21T02:10:18.553Z',\n",
" 'EndTime': '2019-06-21T02:10:21.673Z',\n",
" 'State': 'Successful',\n",
" 'Source': 'RobotTest',\n",
" 'SourceType': 'Schedule',\n",
" 'BatchExecutionKey': '9aac0ee4-8e5b-44bf-9d2b-05ffdda49eaf',\n",
" 'Info': 'Job completed',\n",
" 'CreationTime': '2019-06-21T02:10:16.74Z',\n",
" 'StartingScheduleId': 58371,\n",
" 'ReleaseName': '로봇_테스트01_MyEnv01',\n",
" 'Type': 'Unattended',\n",
" 'InputArguments': None,\n",
" 'OutputArguments': '{}',\n",
" 'HostMachineName': 'WIN-UPT62LUQPN7',\n",
" 'HasMediaRecorded': False,\n",
" 'Id': 10597582},\n",
" {'Key': '7a033dbd-7b1e-48e0-9916-fd676a578bd7',\n",
" 'StartTime': '2019-06-21T03:10:17.723Z',\n",
" 'EndTime': '2019-06-21T03:32:50.913Z',\n",
" 'State': 'Successful',\n",
" 'Source': 'RobotTest',\n",
" 'SourceType': 'Schedule',\n",
" 'BatchExecutionKey': '75b07649-07b9-40a8-90aa-2e0bdae74b52',\n",
" 'Info': 'Job completed',\n",
" 'CreationTime': '2019-06-21T03:10:16.69Z',\n",
" 'StartingScheduleId': 58371,\n",
" 'ReleaseName': '로봇_테스트01_MyEnv01',\n",
" 'Type': 'Unattended',\n",
" 'InputArguments': None,\n",
" 'OutputArguments': '{}',\n",
" 'HostMachineName': 'WIN-UPT62LUQPN7',\n",
" 'HasMediaRecorded': False,\n",
" 'Id': 10599036},\n",
" {'Key': 'db955a0b-515c-40bb-85c4-6c735b543826',\n",
" 'StartTime': '2019-06-21T03:46:38.667Z',\n",
" 'EndTime': '2019-06-21T03:46:43.61Z',\n",
" 'State': 'Successful',\n",
" 'Source': 'Manual',\n",
" 'SourceType': 'Manual',\n",
" 'BatchExecutionKey': '5db28e14-e7b8-4bc9-a220-4c1b0484a475',\n",
" 'Info': 'Job completed',\n",
" 'CreationTime': '2019-06-21T03:46:37.277Z',\n",
" 'StartingScheduleId': None,\n",
" 'ReleaseName': '로봇_테스트01_MyEnv01',\n",
" 'Type': 'Unattended',\n",
" 'InputArguments': '{\"roi\":240}',\n",
" 'OutputArguments': '{}',\n",
" 'HostMachineName': 'WIN-UPT62LUQPN7',\n",
" 'HasMediaRecorded': False,\n",
" 'Id': 10599847},\n",
" {'Key': '43291c19-642d-4b7c-9973-a14df95645f1',\n",
" 'StartTime': '2019-06-21T03:48:43.77Z',\n",
" 'EndTime': '2019-06-21T03:48:46.52Z',\n",
" 'State': 'Successful',\n",
" 'Source': 'Manual',\n",
" 'SourceType': 'Manual',\n",
" 'BatchExecutionKey': '5ee08e13-3458-4188-9956-d355d34d5e8f',\n",
" 'Info': 'Job completed',\n",
" 'CreationTime': '2019-06-21T03:48:42.737Z',\n",
" 'StartingScheduleId': None,\n",
" 'ReleaseName': '로봇_테스트01_MyEnv01',\n",
" 'Type': 'Unattended',\n",
" 'InputArguments': '{\"roi\":240}',\n",
" 'OutputArguments': '{}',\n",
" 'HostMachineName': 'WIN-UPT62LUQPN7',\n",
" 'HasMediaRecorded': False,\n",
" 'Id': 10599882},\n",
" {'Key': '1122429d-b30c-4c5a-9593-24291aa7dbed',\n",
" 'StartTime': '2019-06-21T04:10:12.643Z',\n",
" 'EndTime': '2019-06-21T04:10:15.94Z',\n",
" 'State': 'Successful',\n",
" 'Source': 'TestSchedule',\n",
" 'SourceType': 'Schedule',\n",
" 'BatchExecutionKey': 'f99b6db0-c91f-4d4e-bf7d-704174b01e1e',\n",
" 'Info': 'Job completed',\n",
" 'CreationTime': '2019-06-21T04:10:11.443Z',\n",
" 'StartingScheduleId': 58378,\n",
" 'ReleaseName': '로봇_테스트01_MyEnv01',\n",
" 'Type': 'Unattended',\n",
" 'InputArguments': '{\"roi\":240}',\n",
" 'OutputArguments': '{}',\n",
" 'HostMachineName': 'WIN-UPT62LUQPN7',\n",
" 'HasMediaRecorded': False,\n",
" 'Id': 10600470},\n",
" {'Key': 'b739b918-7d3f-412b-9806-ae4aaedc8b07',\n",
" 'StartTime': '2019-06-21T04:26:40.193Z',\n",
" 'EndTime': '2019-06-21T04:26:44.98Z',\n",
" 'State': 'Successful',\n",
" 'Source': 'Manual',\n",
" 'SourceType': 'Manual',\n",
" 'BatchExecutionKey': '8da604b4-dab3-4014-b3ec-ffe98e6a1f0e',\n",
" 'Info': 'Job completed',\n",
" 'CreationTime': '2019-06-21T04:26:39.18Z',\n",
" 'StartingScheduleId': None,\n",
" 'ReleaseName': '로봇_테스트01_MyEnv01',\n",
" 'Type': 'Unattended',\n",
" 'InputArguments': None,\n",
" 'OutputArguments': '{}',\n",
" 'HostMachineName': 'WIN-UPT62LUQPN7',\n",
" 'HasMediaRecorded': False,\n",
" 'Id': 10600883},\n",
" {'Key': '057c18d1-f4f9-4fd5-93f3-61a57a029c5f',\n",
" 'StartTime': '2019-06-21T04:27:06.477Z',\n",
" 'EndTime': '2019-06-21T04:27:10.933Z',\n",
" 'State': 'Successful',\n",
" 'Source': 'Manual',\n",
" 'SourceType': 'Manual',\n",
" 'BatchExecutionKey': '6d2ccd01-3fba-44d8-b38c-94db31b3fe54',\n",
" 'Info': 'Job completed',\n",
" 'CreationTime': '2019-06-21T04:27:05.183Z',\n",
" 'StartingScheduleId': None,\n",
" 'ReleaseName': '로봇_테스트02_MyEnv01',\n",
" 'Type': 'Unattended',\n",
" 'InputArguments': None,\n",
" 'OutputArguments': '{}',\n",
" 'HostMachineName': 'WIN-UPT62LUQPN7',\n",
" 'HasMediaRecorded': False,\n",
" 'Id': 10600887},\n",
" {'Key': 'bc463438-15db-4826-8f40-2434d9972ca0',\n",
" 'StartTime': '2019-06-21T04:28:26.527Z',\n",
" 'EndTime': '2019-06-21T04:28:36.387Z',\n",
" 'State': 'Successful',\n",
" 'Source': 'Manual',\n",
" 'SourceType': 'Manual',\n",
" 'BatchExecutionKey': 'a1477225-022d-4c06-9707-0f73c616c593',\n",
" 'Info': 'Job completed',\n",
" 'CreationTime': '2019-06-21T04:28:25.087Z',\n",
" 'StartingScheduleId': None,\n",
" 'ReleaseName': '로봇_테스트01_MyEnv01',\n",
" 'Type': 'Unattended',\n",
" 'InputArguments': '{\"roi\":240}',\n",
" 'OutputArguments': '{}',\n",
" 'HostMachineName': 'WIN-UPT62LUQPN7',\n",
" 'HasMediaRecorded': False,\n",
" 'Id': 10600921},\n",
" {'Key': '286de55c-d4a7-4a31-a576-93e675228fbd',\n",
" 'StartTime': '2019-06-21T04:29:05.673Z',\n",
" 'EndTime': '2019-06-21T04:29:09.65Z',\n",
" 'State': 'Successful',\n",
" 'Source': 'Manual',\n",
" 'SourceType': 'Manual',\n",
" 'BatchExecutionKey': '8b7e111b-621c-45a9-b0e4-aad69bcafcb0',\n",
" 'Info': 'Job completed',\n",
" 'CreationTime': '2019-06-21T04:28:34.067Z',\n",
" 'StartingScheduleId': None,\n",
" 'ReleaseName': '로봇_테스트02_MyEnv01',\n",
" 'Type': 'Unattended',\n",
" 'InputArguments': '{\"roi\":100}',\n",
" 'OutputArguments': '{}',\n",
" 'HostMachineName': 'WIN-UPT62LUQPN7',\n",
" 'HasMediaRecorded': False,\n",
" 'Id': 10600922},\n",
" {'Key': '851b250c-3c9c-40d9-8aa5-f9aaa26a73ba',\n",
" 'StartTime': '2019-06-21T04:34:13.35Z',\n",
" 'EndTime': '2019-06-21T04:34:15.88Z',\n",
" 'State': 'Successful',\n",
" 'Source': 'Manual',\n",
" 'SourceType': 'Manual',\n",
" 'BatchExecutionKey': '84f2af4e-c0f3-464e-9964-6b33c1cbb6aa',\n",
" 'Info': 'Job completed',\n",
" 'CreationTime': '2019-06-21T04:34:12.267Z',\n",
" 'StartingScheduleId': None,\n",
" 'ReleaseName': '로봇_테스트02_MyEnv01',\n",
" 'Type': 'Unattended',\n",
" 'InputArguments': '{\"roi\":100}',\n",
" 'OutputArguments': '{}',\n",
" 'HostMachineName': 'WIN-UPT62LUQPN7',\n",
" 'HasMediaRecorded': False,\n",
" 'Id': 10601108},\n",
" {'Key': '767755f1-a635-46ed-8b45-fd6e5d28ac1e',\n",
" 'StartTime': '2019-06-21T04:34:28.34Z',\n",
" 'EndTime': '2019-06-21T04:35:02.213Z',\n",
" 'State': 'Successful',\n",
" 'Source': 'Manual',\n",
" 'SourceType': 'Manual',\n",
" 'BatchExecutionKey': '3d70457d-cf9a-4ab7-a386-f7317432fe1e',\n",
" 'Info': 'Job completed',\n",
" 'CreationTime': '2019-06-21T04:34:27.267Z',\n",
" 'StartingScheduleId': None,\n",
" 'ReleaseName': '로봇_테스트02_MyEnv01',\n",
" 'Type': 'Unattended',\n",
" 'InputArguments': '{\"roi\":100}',\n",
" 'OutputArguments': '{}',\n",
" 'HostMachineName': 'WIN-UPT62LUQPN7',\n",
" 'HasMediaRecorded': False,\n",
" 'Id': 10601110}]}"
]
},
"execution_count": 73,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"## 오늘/어제 job 정보 읽어오기\n",
"api_url = \"https://platform.uipath.com/input your tenacy/input your tenacy:443\"\n",
"api_info = {\n",
" \"tenancyName\": \"input your tenacy\",\n",
" \"usernameOrEmailAddress\": \"input your username\",\n",
" \"password\": \"input your password\"\n",
"\n",
"}\n",
"key = getAuthKey(api_url,api_info[\"tenancyName\"],api_info[\"usernameOrEmailAddress\"],api_info[\"password\"])\n",
"\n",
"start_date = datetime.date.today().strftime(\"%Y-%m-%d\")\n",
"end_date = (datetime.date.today()+datetime.timedelta(days=1)).strftime(\"%Y-%m-%d\")\n",
"# StartTime ge 2019-06-21T00:00:00.00Z and StartTime lt 2019-06-22T00:00:00.00Z\n",
"url = api_url + \"/odata/Jobs?$filter=StartTime ge {0}T00:00:00.00Z and StartTime lt {1}T00:00:00.00Z\"\n",
"job_info = getUiPathAPI(url.format(start_date,end_date),key)\n",
"job_info"
]
},
{
"cell_type": "code",
"execution_count": 74,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"[('4bff3094-ed99-474d-a390-51f331b3255d',\n",
" '로봇_테스트01_MyEnv01',\n",
" 10597409,\n",
" 'Successful',\n",
" None),\n",
" ('3335cd80-62c4-4cb1-b767-27d00b0405a4',\n",
" '로봇_테스트01_MyEnv01',\n",
" 10597433,\n",
" 'Successful',\n",
" None),\n",
" ('a81dc401-e4b4-418a-948e-c4aa5cded207',\n",
" '로봇_테스트01_MyEnv01',\n",
" 10597582,\n",
" 'Successful',\n",
" None),\n",
" ('7a033dbd-7b1e-48e0-9916-fd676a578bd7',\n",
" '로봇_테스트01_MyEnv01',\n",
" 10599036,\n",
" 'Successful',\n",
" None),\n",
" ('db955a0b-515c-40bb-85c4-6c735b543826',\n",
" '로봇_테스트01_MyEnv01',\n",
" 10599847,\n",
" 'Successful',\n",
" '{\"roi\":240}'),\n",
" ('43291c19-642d-4b7c-9973-a14df95645f1',\n",
" '로봇_테스트01_MyEnv01',\n",
" 10599882,\n",
" 'Successful',\n",
" '{\"roi\":240}'),\n",
" ('1122429d-b30c-4c5a-9593-24291aa7dbed',\n",
" '로봇_테스트01_MyEnv01',\n",
" 10600470,\n",
" 'Successful',\n",
" '{\"roi\":240}'),\n",
" ('b739b918-7d3f-412b-9806-ae4aaedc8b07',\n",
" '로봇_테스트01_MyEnv01',\n",
" 10600883,\n",
" 'Successful',\n",
" None),\n",
" ('057c18d1-f4f9-4fd5-93f3-61a57a029c5f',\n",
" '로봇_테스트02_MyEnv01',\n",
" 10600887,\n",
" 'Successful',\n",
" None),\n",
" ('bc463438-15db-4826-8f40-2434d9972ca0',\n",
" '로봇_테스트01_MyEnv01',\n",
" 10600921,\n",
" 'Successful',\n",
" '{\"roi\":240}'),\n",
" ('286de55c-d4a7-4a31-a576-93e675228fbd',\n",
" '로봇_테스트02_MyEnv01',\n",
" 10600922,\n",
" 'Successful',\n",
" '{\"roi\":100}'),\n",
" ('851b250c-3c9c-40d9-8aa5-f9aaa26a73ba',\n",
" '로봇_테스트02_MyEnv01',\n",
" 10601108,\n",
" 'Successful',\n",
" '{\"roi\":100}'),\n",
" ('767755f1-a635-46ed-8b45-fd6e5d28ac1e',\n",
" '로봇_테스트02_MyEnv01',\n",
" 10601110,\n",
" 'Successful',\n",
" '{\"roi\":100}')]"
]
},
"execution_count": 74,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"## 읽어온 잡 리스트 - json 포맷에서 필요한 부분 추출\n",
"\n",
"[(job['Key'],job['ReleaseName'],job['Id'],job['State'],job['InputArguments']) for job in job_info['value']]"
]
},
{
"cell_type": "code",
"execution_count": 75,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[('로봇_테스트01_MyEnv01', 10),\n",
" ('로봇_테스트01_MyEnv01', 10),\n",
" ('로봇_테스트01_MyEnv01', 10),\n",
" ('로봇_테스트01_MyEnv01', 10),\n",
" ('로봇_테스트01_MyEnv01', 240),\n",
" ('로봇_테스트01_MyEnv01', 240),\n",
" ('로봇_테스트01_MyEnv01', 240),\n",
" ('로봇_테스트01_MyEnv01', 10),\n",
" ('로봇_테스트02_MyEnv01', 10),\n",
" ('로봇_테스트01_MyEnv01', 240),\n",
" ('로봇_테스트02_MyEnv01', 100),\n",
" ('로봇_테스트02_MyEnv01', 100),\n",
" ('로봇_테스트02_MyEnv01', 100)]"
]
},
"execution_count": 75,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"## 성공인 잡중 ReleaseName와 roi 값 읽어 오기 - Default ROI 10분\n",
"## Process deploy시 input 파라미터에 roi 추가, 이후 Orchestrator에서 프로세스 등록시 roi 값을 실제 roi 시간(분으로 계산) 등록\n",
"\n",
"job_data = [(job['ReleaseName'],10 if job['InputArguments'] is None else json.loads(job['InputArguments'])['roi'] )\n",
" for job in job_info['value'] if job['State'] == 'Successful']\n",
"job_data"
]
},
{
"cell_type": "code",
"execution_count": 86,
"metadata": {},
"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>name</th>\n",
" <th>ROI</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>로봇_테스트01_MyEnv01</td>\n",
" <td>10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>로봇_테스트01_MyEnv01</td>\n",
" <td>10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>로봇_테스트01_MyEnv01</td>\n",
" <td>10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>로봇_테스트01_MyEnv01</td>\n",
" <td>10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>로봇_테스트01_MyEnv01</td>\n",
" <td>240</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>로봇_테스트01_MyEnv01</td>\n",
" <td>240</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>로봇_테스트01_MyEnv01</td>\n",
" <td>240</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>로봇_테스트01_MyEnv01</td>\n",
" <td>10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>로봇_테스트02_MyEnv01</td>\n",
" <td>10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>로봇_테스트01_MyEnv01</td>\n",
" <td>240</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" name ROI\n",
"0 로봇_테스트01_MyEnv01 10\n",
"1 로봇_테스트01_MyEnv01 10\n",
"2 로봇_테스트01_MyEnv01 10\n",
"3 로봇_테스트01_MyEnv01 10\n",
"4 로봇_테스트01_MyEnv01 240\n",
"5 로봇_테스트01_MyEnv01 240\n",
"6 로봇_테스트01_MyEnv01 240\n",
"7 로봇_테스트01_MyEnv01 10\n",
"8 로봇_테스트02_MyEnv01 10\n",
"9 로봇_테스트01_MyEnv01 240"
]
},
"execution_count": 86,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"## ReleaseName 기준으로 합계 처리, Pandas 이용\n",
"%matplotlib inline\n",
"import pandas as pd1\n",
"from matplotlib import pyplot as plt\n",
"\n",
"df = pd.DataFrame(job_data,columns=[\"name\",\"ROI\"])\n",
"df.head(10)"
]
},
{
"cell_type": "code",
"execution_count": 77,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array(['로봇_테스트01_MyEnv01', '로봇_테스트02_MyEnv01'], dtype=object)"
]
},
"execution_count": 77,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df['name'].unique()"
]
},
{
"cell_type": "code",
"execution_count": 79,
"metadata": {},
"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>ROI</th>\n",
" </tr>\n",
" <tr>\n",
" <th>name</th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>로봇_테스트01_MyEnv01</th>\n",
" <td>1010</td>\n",
" </tr>\n",
" <tr>\n",
" <th>로봇_테스트02_MyEnv01</th>\n",
" <td>310</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" ROI\n",
"name \n",
"로봇_테스트01_MyEnv01 1010\n",
"로봇_테스트02_MyEnv01 310"
]
},
"execution_count": 79,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"roi = df.groupby('name').sum()\n",
"roi"
]
},
{
"cell_type": "code",
"execution_count": 87,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"roi.plot.bar()\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"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.7.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment