From f0ab02961729b6c5c9e7ebb724928c2bc479805a Mon Sep 17 00:00:00 2001 From: 512song Date: Sun, 8 Oct 2023 13:35:39 +0800 Subject: [PATCH] 20231008 --- 数据处理.ipynb | 481 +++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 444 insertions(+), 37 deletions(-) diff --git a/数据处理.ipynb b/数据处理.ipynb index 1734180..dcbccd7 100644 --- a/数据处理.ipynb +++ b/数据处理.ipynb @@ -159,29 +159,11 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": { - "execution": { - "iopub.execute_input": "2023-08-29T03:26:35.055593Z", - "iopub.status.busy": "2023-08-29T03:26:35.055086Z", - "iopub.status.idle": "2023-08-29T03:26:35.077483Z", - "shell.execute_reply": "2023-08-29T03:26:35.076400Z", - "shell.execute_reply.started": "2023-08-29T03:26:35.055541Z" - }, "tags": [] }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "bs b'\\xd4\\xc0\\xcd\\xaf'\n", - "decode-bs: 岳童\n", - "gbcode: b'\\xc2\\xed\\xc1\\xa2\\xd1\\xc7'\n", - "gbs: c2edc1a2d1c7\n" - ] - } - ], + "outputs": [], "source": [ "import binascii\n", "\n", @@ -345,26 +327,11 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "metadata": { - "execution": { - "iopub.execute_input": "2023-06-19T05:24:25.797002Z", - "iopub.status.busy": "2023-06-19T05:24:25.796160Z", - "iopub.status.idle": "2023-06-19T05:24:25.804970Z", - "shell.execute_reply": "2023-06-19T05:24:25.803852Z", - "shell.execute_reply.started": "2023-06-19T05:24:25.796962Z" - }, "tags": [] }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'C-14呼气试验阳性': {'病症对应中医辨证': ['湿热内盛', '脾胃虚弱'], '病症分析': 'C-14呼气试验是一种用于检测幽门螺杆菌感染的方法,通过摄入C-14标记的尿素,然后呼出含有C-14的二氧化碳进行检测。如果呼出的C-14二氧化碳含量高于正常水平即为阳性,表示感染了幽门螺杆菌。'}, 'C反应蛋白(CRP)升高': {'病症对应中医辨证': ['湿热内盛', '气血不畅'], '病症分析': 'C反应蛋白是一种血液中的蛋白质,常常用于衡量炎症的程度。当身体遭受感染、炎症、创伤等影响时,会出现CRP升高的现象。'}, 'V1呈QS型': {'病症对应中医辨证': ['气滞血瘀', '气血不足'], '病症分析': '心电图上V1导联呈现QS型,通常是一种正常的变异,也可能表示心肌损伤或心肌缺血等问题。'}, '癌胚抗原(定量)(CEA)增高': {'病症对应中医辨证': ['气滞血瘀', '痰湿阻滞', '外邪入侵'], '病症分析': 'CEA是一种蛋白质,当人体某些器官、如胃、肝、肺、乳腺、结肠等出现癌变时,会释放出更多的CEA,因此血液中CEA的浓度可能会增加。'}, '胆囊息肉样病变': {'病症对应中医辨证': ['气滞血瘀', '湿热内盛', '痰湿阻滞'], '病症分析': '指在胆囊内部发现了一些类似于息肉的突起,可能会引起胆囊炎、胆管阻塞等问题,需要注意观察和治疗。'}, '动脉血管弹性稍下降': {'病症对应中医辨证': ['气滞血瘀', '气血不畅'], '病症分析': '指动脉血管的弹性略有下降,可能是因为年龄、高血压、高血脂等原因导致,需要注意预防和控制血压和血脂。'}, '动脉血管弹性下降': {'病症对应中医辨证': ['气滞血瘀', '气血不畅', '气血不足'], '病症分析': '动脉血管弹性下降是指血管壁的弹性降低,即血管失去了正常的伸缩性。通常是由于动脉硬化引起的,这会增加心血管疾病的风险。'}, '窦性心动过缓': {'病症对应中医辨证': ['气滞血瘀', '痰湿阻滞'], '病症分析': '这是指心脏的节律过缓,心率在每分钟60次以下,可能会导致头晕、乏力、心慌等症状。'}, '肥胖': {'病症对应中医辨证': ['气滞血瘀', '脏腑失调', '肾气不足', '脾虚湿阻', '痰湿阻滞'], '病症分析': '指身体的脂肪组织过多,体重超过正常范围,可能会导致一些心血管疾病、糖尿病、关节疼痛等问题。'}, '肺大疱': {'病症对应中医辨证': ['肺气不足', '痰湿阻滞', '外邪入侵'], '病症分析': '肺组织内一个或多个气腔突出,通常由于肺泡壁的破裂或肺组织的破坏所致。它们可能会导致肺功能下降等问题。'}, '肺结节': {'病症对应中医辨证': ['气滞血瘀', '肝气郁结', '痰湿阻滞'], '病症分析': '指肺部出现大小不一的结节,可能是良性的肺结节,也有可能是恶性的肺癌。'}, '肺少许慢性炎症': {'病症对应中医辨证': ['气血不畅', '肺气不足', '外邪入侵'], '病症分析': '指肺部有轻微的慢性炎症反应,可能由于吸入异物、感染等原因引起,如果不及时治疗可能会加重。'}, '肺少许炎症': {'病症对应中医辨证': ['肝气郁结', '脾胃虚弱', '肾气不足', '外邪入侵'], '病症分析': '表示肺部存在炎症反应,可能是由于细菌、病毒或其他病原体引起的。'}, '肝囊肿': {'病症对应中医辨证': ['气滞血瘀', '肝气郁结'], '病症分析': '指肝脏内出现液体充填的囊肿,多数为良性病变。肝囊肿通常不会引起明显的症状,但如果囊肿过大或者数量过多时,可能会压迫周围的组织或器官,引起腹痛、不适等症状。'}, '肝实质光点密集': {'病症对应中医辨证': ['气滞血瘀', '情志不畅'], '病症分析': '指在肝脏的超声检查中发现了一些密集的、光点状的区域,可能提示肝脏存在一些异常变化,如脂肪肝等。'}, '肝实质光点稍密集': {'病症对应中医辨证': ['气滞血瘀', '肝气郁结', '湿热内盛', '脾虚湿阻'], '病症分析': '指在肝脏的超声检查中发现了一些密集的、光点状的区域,可能提示肝脏存在一些异常变化,如脂肪肝等。'}, '肝血管瘤': {'病症对应中医辨证': ['气滞血瘀', '肝气郁结', '外邪入侵'], '病症分析': '肝血管瘤是一种良性的肝脏肿瘤,由肝脏内的毛细血管扩张形成。大多数病人无症状,但在少数情况下可能会出现疼痛、肝功能异常等症状。'}, '骨量减少': {'病症对应中医辨证': ['气滞血瘀', '气血不足', '肝肾不足'], '病症分析': '指骨骼中的骨量逐渐减少,骨密度下降,导致骨质疏松症等疾病。骨量减少通常会增加骨折的风险,特别是在老年人群体中,更容易发生危险。'}, '骨质疏松': {'病症对应中医辨证': ['气滞血瘀', '肝气郁结', '湿热内盛', '脾胃虚弱', '气血不足', '肝肾不足'], '病症分析': '指骨密度下降,骨质变薄、变弱,易于骨折。常见于老年人、女性、长期服用激素等情况,可能导致骨折等'}, '甲胎蛋白(AFP)增高': {'病症对应中医辨证': ['气血不足', '情志不畅', '肝肾不足'], '病症分析': '甲胎蛋白是胎儿发育过程中产生的一种蛋白质,成人血液中含量极低。在某些疾病(如肝癌、睾丸癌、卵巢癌等)或正常生理状态下,甲胎蛋白的水平会异常增高。'}, '甲状腺低回声结节': {'病症对应中医辨证': ['气血不畅', '情志不畅', '肝肾不足', '痰湿阻滞'], '病症分析': '指甲状腺内出现低回声的结节,可能是由于甲状腺内的肿瘤、炎症、结节等因素引起的。甲状腺低回声结节通常需要进一步检查,以确定结节的性质。'}, '甲状腺结节': {'病症对应中医辨证': ['气滞血瘀', '湿热内盛'], '病症分析': '甲状腺是一个位于颈部的内分泌腺体,结节是指甲状腺内部出现了一些小的肿块,这些结节可以是良性的,也可能是恶性的。'}, '空腹血糖增高': {'病症对应中医辨证': ['肝气郁结', '湿热内盛', '肾气不足', '脾虚湿阻'], '病症分析': '指在空腹状态下测量的血糖水平。如果空腹血糖水平高于正常范围,可能存在糖尿病或糖尿病前期等情况。'}, '卵巢囊肿': {'病症对应中医辨证': ['气滞血瘀', '肝气郁结'], '病症分析': '卵巢囊肿是一种由于卵巢上皮细胞异常生长引起的囊性病变,通常为单侧性,可能会引起腹部不适、疼痛等症状。'}, '尿潜血阳性': {'病症对应中医辨证': ['湿热内盛', '脾胃虚弱', '肝火旺盛', '气血不畅'], '病症分析': '可能是由于泌尿系统出血所致,提示可能存在尿路感染、泌尿系统结石等问题。'}, '尿糖阳性': {'病症对应中医辨证': ['湿热内盛', '脾虚湿阻', '痰湿阻滞'], '病症分析': '尿糖阳性可能表示糖尿病或其他糖代谢紊乱问题。'}, '前列腺钙化灶': {'病症对应中医辨证': ['气滞血瘀', '湿热内盛', '肾气不足'], '病症分析': '指前列腺组织中出现钙化物质,可能是前列腺炎、前列腺增生等疾病的表现。'}, '前列腺囊肿': {'病症对应中医辨证': ['湿热内盛', '情志不畅'], '病症分析': '前列腺囊肿是一种在前列腺组织内形成的液体囊袋,可能会导致排尿不畅或疼痛等症状。'}, '前列腺稍大并钙化灶': {'病症对应中医辨证': ['气血不畅', '肾气不足', '情志不畅'], '病症分析': '指前列腺体积稍大,并且在前列腺内出现钙化灶。前列腺稍大通常是正常的生理变化,但如果前列腺增生过快,可能会压迫尿道,引起排尿不畅等症状。前列腺钙化灶可能是前列腺炎、前列腺癌等病变的表现。'}, '前列腺特异抗原(PSA)增高': {'病症对应中医辨证': ['湿热内盛', '肾气不足', '痰湿阻滞'], '病症分析': '前列腺特异抗原是一种由前列腺细胞产生的蛋白质,在一些疾病(如前列腺癌、前列腺增生等)或正常生理状态下会出现异常增高。'}, '前列腺增大': {'病症对应中医辨证': ['气滞血瘀', '湿热内盛', '肾气不足'], '病症分析': '前列腺增生是男性普遍面临的问题,随着年龄的增长,前列腺组织逐渐增生,压迫尿道,导致排尿困难等症状。'}, '屈光不正': {'病症对应中医辨证': ['肝气郁结', '脾胃虚弱', '肝火旺盛'], '病症分析': '指眼睛的折射状态不正常,导致近视、远视等视力问题。'}, '乳腺囊肿': {'病症对应中医辨证': ['气滞血瘀', '湿热内盛', '肾气不足', '情志不畅'], '病症分析': '乳腺组织内因液体聚集而形成的一种良性肿块,可能由于荷尔蒙变化等因素引起。一般无症状,可在体检时发现。'}, '肾错构瘤': {'病症对应中医辨证': ['湿热内盛', '痰湿阻滞'], '病症分析': '一种肾部常见的良性肿瘤,由于肾脏某些细胞错构而发生。一般无症状,大多在体检时无意间发现。'}, '肾钙乳症': {'病症对应中医辨证': ['肾气不足'], '病症分析': '肾钙乳症是指肾脏中的某些管道出现结晶,引起尿液中钙的排泄增加,并且与蛋白质、尿酸等物质混合形成小结石。病人通常无症状,但在尿液中发现结石或在X光检查中发现肾结石时会被诊断。'}, '肾结石': {'病症对应中医辨证': ['湿热内盛', '脾胃虚弱', '肾气不足', '情志不畅'], '病症分析': '肾结石是在肾脏内形成的固体结晶,通常由尿中过多的矿物质和盐类组成。它们可能会导致尿路梗阻、尿路感染和肾功能损伤等问题。'}, '肾囊肿': {'病症对应中医辨证': ['气滞血瘀', '肝气郁结', '肾气不足'], '病症分析': '肾囊肿是肾脏结构的一种变异,一般情况下不需要治疗。如果囊肿较大或症状明显,需要考虑治疗。'}, '视力低常': {'病症对应中医辨证': ['肝气郁结', '脾胃虚弱', '肝火旺盛', '肾气不足'], '病症分析': '指近视或远视等屈光不正的状况,导致眼球不能正确聚焦,造成眼睛看不清楚远近的事物,需要佩戴眼镜或隐形眼镜来矫正。'}, '舒张压低': {'病症对应中医辨证': ['脾胃虚弱', '气血不足', '情志不畅', '肝肾不足'], '病症分析': '血压测量时,舒张压指心脏舒张期(心脏放松时)的血压值,低于正常范围可能表示存在低血压、心脏功能不全等问题。'}, '糖化血红蛋白(HbA1c)增高': {'病症对应中医辨证': ['肝气郁结', '脾胃虚弱', '脏腑失调', '气血不足'], '病症分析': 'HbA1c是指红细胞内的血红蛋白与葡萄糖结合后形成的化合物,用于反映过去2-3个月内血糖水平的控制情况。HbA1c增高意味着血糖长期控制不好,可能存在糖尿病或糖尿病前期等情况。'}, '体重偏低': {'病症对应中医辨证': ['湿热内盛', '气血不足'], '病症分析': '体重偏低通常是指身体体重低于正常水平,可能与营养不良、消化吸收障碍、某些疾病等有关。'}, '天门冬氨酸氨基转移酶(AST)增高': {'病症对应中医辨证': ['湿热内盛', '脾胃虚弱', '情志不畅'], '病症分析': '天门冬氨酸氨基转移酶是一种酶,在肝脏和其他器官中都有存在。AST升高可能是由于肝脏、心脏、肌肉等组织受损导致的,提示可能存在相应的疾病。'}, '听力下降': {'病症对应中医辨证': ['肾气不足', '肝肾不足', '肝气郁结', '脾虚湿阻'], '病症分析': '指听觉感受器官和神经系统发生异常,引起听觉功能下降的症状。'}, '心脏杂音': {'病症对应中医辨证': ['气血不畅', '情志不畅'], '病症分析': '指心脏内血流速度、方向或路径发生改变,产生异常的心脏声音。可能由心脏瓣膜异常、心肌病变、先天性心脏疾病等引起。'}, '血肌酐增高': {'病症对应中医辨证': ['肝肾不足'], '病症分析': '血肌酐是由肌肉代谢产生的废物,主要通过肾脏排泄。如果肾脏功能不好,肾脏无法有效清除血液中的肌酐,导致血肌酐水平升高,反映肾功能异常。'}, '血尿酸增高': {'病症对应中医辨证': ['气滞血瘀', '湿热内盛', '脾胃虚弱', '气血不畅', '肝肾不足'], '病症分析': '指血液中尿酸含量超过正常范围,可能会导致痛风等疾病。'}, '血清γ-谷氨酰基转移酶(GGT)增高': {'病症对应中医辨证': ['气滞血瘀', '肝气郁结'], '病症分析': 'GGT和ALT都是肝功能指标,它们的升高可能提示肝脏存在一些病变或损伤,如肝炎、酒精性肝病等。'}, '血清丙氨酸氨基转移酶(ALT)增高': {'病症对应中医辨证': ['肝气郁结', '气血不畅'], '病症分析': 'GGT和ALT都是肝功能指标,它们的升高可能提示肝脏存在一些病变或损伤,如肝炎、酒精性肝病等。'}, '血压高': {'病症对应中医辨证': ['脾胃虚弱', '肝火旺盛', '肝肾不足', '脾虚湿阻', '痰湿阻滞'], '病症分析': '指血液在血管内流动时对血管壁的压力过高,通常会出现头痛、头晕、视力模糊等症状,长期高血压会增加心血管疾病、脑血管疾病等疾病的风险。'}, '血脂异常': {'病症对应中医辨证': ['气滞血瘀', '肝肾不足', '脾虚湿阻'], '病症分析': '当人体内的脂质代谢出现异常时,就会出现血脂异常的情况。这可能是由于遗传、生活方式、饮食习惯、药物影响、疾病等多种因素造成的,会增加心脑血管疾病的风险,引发心脑血管疾病。'}, '咽部充血': {'病症对应中医辨证': ['肝火旺盛', '情志不畅', '外邪入侵'], '病症分析': '咽部充血通常是由于病原体感染引起的一种症状,可能与上呼吸道感染、扁桃体炎等相关。'}, '子宫体结节': {'病症对应中医辨证': ['气滞血瘀', '肝气郁结', '脾胃虚弱'], '病症分析': '子宫体结节是子宫内膜异位症的一种表现,通常位于子宫体的肌层内或外,具有增生性病变的特点。'}}\n" - ] - } - ], + "outputs": [], "source": [ "import json\n", "\n", @@ -1434,6 +1401,446 @@ " .render(\"bar_histogram.html\")\n" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 生成雷达图" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "execution": { + "iopub.execute_input": "2023-10-08T02:00:19.557430Z", + "iopub.status.busy": "2023-10-08T02:00:19.556961Z", + "iopub.status.idle": "2023-10-08T02:00:19.571800Z", + "shell.execute_reply": "2023-10-08T02:00:19.571393Z", + "shell.execute_reply.started": "2023-10-08T02:00:19.557394Z" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "application/javascript": [ + "new Promise(function(resolve, reject) {\n", + " var script = document.createElement(\"script\");\n", + " script.onload = resolve;\n", + " script.onerror = reject;\n", + " script.src = \"https://assets.pyecharts.org/assets/v5/echarts.min.js\";\n", + " document.head.appendChild(script);\n", + "}).then(() => {\n", + "\n", + "});" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from pyecharts.globals import CurrentConfig, NotebookType\n", + "import pyecharts.options as opts\n", + "CurrentConfig.NOTEBOOK_TYPE = NotebookType.JUPYTER_LAB\n", + "from pyecharts.charts import Radar\n", + "\n", + "\n", + "v1 = [[90, 100, 80, 76, 88, 95]]\n", + "v2 = [[5000, 14000, 28000, 31000, 42000, 21000]]\n", + "\n", + "bar =(\n", + " Radar(init_opts=opts.InitOpts())\n", + " .add_schema(\n", + " schema=[\n", + " opts.RadarIndicatorItem(name=\"销售(sales)\", max_=100),\n", + " opts.RadarIndicatorItem(name=\"管理(Administration)\", max_=100),\n", + " opts.RadarIndicatorItem(name=\"信息技术(Information Technology)\", max_=100),\n", + " opts.RadarIndicatorItem(name=\"客服(Customer Support)\", max_=100),\n", + " opts.RadarIndicatorItem(name=\"研发(Development)\", max_=100),\n", + " opts.RadarIndicatorItem(name=\"市场(Marketing)\", max_=100),\n", + " ],\n", + " splitarea_opt=opts.SplitAreaOpts(\n", + " is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)\n", + " ),\n", + " textstyle_opts=opts.TextStyleOpts(color=\"#aaa\"),\n", + " )\n", + " .add(\n", + " series_name=\"预算分配(Allocated Budget)\",\n", + " data=v1,\n", + " linestyle_opts=opts.LineStyleOpts(color=\"#CD0000\"),\n", + " )\n", + " \n", + " .set_series_opts(label_opts=opts.LabelOpts(is_show=False))\n", + " .set_global_opts(\n", + " title_opts=opts.TitleOpts(title=\"基础雷达图\"), legend_opts=opts.LegendOpts()\n", + " )\n", + " #.render(\"basic_radar_chart.html\")\n", + " \n", + ")\n", + "bar.load_javascript()" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "execution": { + "iopub.execute_input": "2023-10-08T02:00:22.378306Z", + "iopub.status.busy": "2023-10-08T02:00:22.377831Z", + "iopub.status.idle": "2023-10-08T02:00:22.387577Z", + "shell.execute_reply": "2023-10-08T02:00:22.386538Z", + "shell.execute_reply.started": "2023-10-08T02:00:22.378268Z" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + " \n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "bar.render_notebook()" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "execution": { + "iopub.execute_input": "2023-10-08T02:09:05.895554Z", + "iopub.status.busy": "2023-10-08T02:09:05.895353Z", + "iopub.status.idle": "2023-10-08T02:09:06.036187Z", + "shell.execute_reply": "2023-10-08T02:09:06.035511Z", + "shell.execute_reply.started": "2023-10-08T02:09:05.895538Z" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "No phantomjs found in your PATH. Please install it!\n" + ] + }, + { + "ename": "AttributeError", + "evalue": "'tuple' object has no attribute 'tb_frame'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mFileNotFoundError\u001b[0m Traceback (most recent call last)", + "File \u001b[0;32m~/data/lib/python3.10/site-packages/snapshot_phantomjs/snapshot.py:44\u001b[0m, in \u001b[0;36mchk_phantomjs\u001b[0;34m()\u001b[0m\n\u001b[1;32m 43\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m---> 44\u001b[0m phantomjs_version \u001b[38;5;241m=\u001b[39m \u001b[43msubprocess\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcheck_output\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 45\u001b[0m \u001b[43m \u001b[49m\u001b[43m[\u001b[49m\u001b[43mPHANTOMJS_EXEC\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43m--version\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mshell\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mget_shell_flag\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 46\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 47\u001b[0m phantomjs_version \u001b[38;5;241m=\u001b[39m phantomjs_version\u001b[38;5;241m.\u001b[39mdecode(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mutf-8\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n", + "File \u001b[0;32m/usr/lib/python3.10/subprocess.py:421\u001b[0m, in \u001b[0;36mcheck_output\u001b[0;34m(timeout, *popenargs, **kwargs)\u001b[0m\n\u001b[1;32m 419\u001b[0m kwargs[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124minput\u001b[39m\u001b[38;5;124m'\u001b[39m] \u001b[38;5;241m=\u001b[39m empty\n\u001b[0;32m--> 421\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mrun\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mpopenargs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mstdout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mPIPE\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtimeout\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcheck\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 422\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241m.\u001b[39mstdout\n", + "File \u001b[0;32m/usr/lib/python3.10/subprocess.py:503\u001b[0m, in \u001b[0;36mrun\u001b[0;34m(input, capture_output, timeout, check, *popenargs, **kwargs)\u001b[0m\n\u001b[1;32m 501\u001b[0m kwargs[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mstderr\u001b[39m\u001b[38;5;124m'\u001b[39m] \u001b[38;5;241m=\u001b[39m PIPE\n\u001b[0;32m--> 503\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[43mPopen\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mpopenargs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;28;01mas\u001b[39;00m process:\n\u001b[1;32m 504\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n", + "File \u001b[0;32m/usr/lib/python3.10/subprocess.py:971\u001b[0m, in \u001b[0;36mPopen.__init__\u001b[0;34m(self, args, bufsize, executable, stdin, stdout, stderr, preexec_fn, close_fds, shell, cwd, env, universal_newlines, startupinfo, creationflags, restore_signals, start_new_session, pass_fds, user, group, extra_groups, encoding, errors, text, umask, pipesize)\u001b[0m\n\u001b[1;32m 968\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mstderr \u001b[38;5;241m=\u001b[39m io\u001b[38;5;241m.\u001b[39mTextIOWrapper(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mstderr,\n\u001b[1;32m 969\u001b[0m encoding\u001b[38;5;241m=\u001b[39mencoding, errors\u001b[38;5;241m=\u001b[39merrors)\n\u001b[0;32m--> 971\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_execute_child\u001b[49m\u001b[43m(\u001b[49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mexecutable\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpreexec_fn\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mclose_fds\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 972\u001b[0m \u001b[43m \u001b[49m\u001b[43mpass_fds\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcwd\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43menv\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 973\u001b[0m \u001b[43m \u001b[49m\u001b[43mstartupinfo\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcreationflags\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mshell\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 974\u001b[0m \u001b[43m \u001b[49m\u001b[43mp2cread\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mp2cwrite\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 975\u001b[0m \u001b[43m \u001b[49m\u001b[43mc2pread\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mc2pwrite\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 976\u001b[0m \u001b[43m \u001b[49m\u001b[43merrread\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43merrwrite\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 977\u001b[0m \u001b[43m \u001b[49m\u001b[43mrestore_signals\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 978\u001b[0m \u001b[43m \u001b[49m\u001b[43mgid\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mgids\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43muid\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mumask\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 979\u001b[0m \u001b[43m \u001b[49m\u001b[43mstart_new_session\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 980\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m:\n\u001b[1;32m 981\u001b[0m \u001b[38;5;66;03m# Cleanup if the child failed starting.\u001b[39;00m\n", + "File \u001b[0;32m/usr/lib/python3.10/subprocess.py:1863\u001b[0m, in \u001b[0;36mPopen._execute_child\u001b[0;34m(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session)\u001b[0m\n\u001b[1;32m 1862\u001b[0m err_msg \u001b[38;5;241m=\u001b[39m os\u001b[38;5;241m.\u001b[39mstrerror(errno_num)\n\u001b[0;32m-> 1863\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m child_exception_type(errno_num, err_msg, err_filename)\n\u001b[1;32m 1864\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m child_exception_type(err_msg)\n", + "\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: 'phantomjs'", + "\nDuring handling of the above exception, another exception occurred:\n", + "\u001b[0;31mSystemExit\u001b[0m Traceback (most recent call last)", + " \u001b[0;31m[... skipping hidden 1 frame]\u001b[0m\n", + "Cell \u001b[0;32mIn[21], line 41\u001b[0m\n\u001b[1;32m 12\u001b[0m bar \u001b[38;5;241m=\u001b[39m(\n\u001b[1;32m 13\u001b[0m Radar(init_opts\u001b[38;5;241m=\u001b[39mopts\u001b[38;5;241m.\u001b[39mInitOpts())\n\u001b[1;32m 14\u001b[0m \u001b[38;5;241m.\u001b[39madd_schema(\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 39\u001b[0m \n\u001b[1;32m 40\u001b[0m )\n\u001b[0;32m---> 41\u001b[0m \u001b[43mmake_snapshot\u001b[49m\u001b[43m(\u001b[49m\u001b[43msnapshot\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mbar\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrender\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mbar0.png\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/data/lib/python3.10/site-packages/pyecharts/render/snapshot.py:32\u001b[0m, in \u001b[0;36mmake_snapshot\u001b[0;34m(engine, file_name, output_name, delay, pixel_ratio, is_remove_html, **kwargs)\u001b[0m\n\u001b[1;32m 30\u001b[0m file_type \u001b[38;5;241m=\u001b[39m output_name\u001b[38;5;241m.\u001b[39msplit(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m.\u001b[39m\u001b[38;5;124m\"\u001b[39m)[\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m]\n\u001b[0;32m---> 32\u001b[0m content \u001b[38;5;241m=\u001b[39m \u001b[43mengine\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmake_snapshot\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 33\u001b[0m \u001b[43m \u001b[49m\u001b[43mhtml_path\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mfile_name\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 34\u001b[0m \u001b[43m \u001b[49m\u001b[43mfile_type\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mfile_type\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 35\u001b[0m \u001b[43m \u001b[49m\u001b[43mdelay\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdelay\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 36\u001b[0m \u001b[43m \u001b[49m\u001b[43mpixel_ratio\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mpixel_ratio\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 37\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 38\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 39\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m file_type \u001b[38;5;129;01min\u001b[39;00m [SVG_FORMAT, B64_FORMAT]:\n", + "File \u001b[0;32m~/data/lib/python3.10/site-packages/snapshot_phantomjs/snapshot.py:15\u001b[0m, in \u001b[0;36mmake_snapshot\u001b[0;34m(html_path, file_type, delay, pixel_ratio, **_)\u001b[0m\n\u001b[1;32m 12\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mmake_snapshot\u001b[39m(\n\u001b[1;32m 13\u001b[0m html_path: \u001b[38;5;28mstr\u001b[39m, file_type: \u001b[38;5;28mstr\u001b[39m, delay: \u001b[38;5;28mint\u001b[39m \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m2\u001b[39m, pixel_ratio: \u001b[38;5;28mint\u001b[39m \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m2\u001b[39m, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39m_\n\u001b[1;32m 14\u001b[0m ):\n\u001b[0;32m---> 15\u001b[0m \u001b[43mchk_phantomjs\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 16\u001b[0m logger\u001b[38;5;241m.\u001b[39minfo(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mGenerating file ...\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n", + "File \u001b[0;32m~/data/lib/python3.10/site-packages/snapshot_phantomjs/snapshot.py:51\u001b[0m, in \u001b[0;36mchk_phantomjs\u001b[0;34m()\u001b[0m\n\u001b[1;32m 50\u001b[0m logger\u001b[38;5;241m.\u001b[39mwarning(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mNo phantomjs found in your PATH. Please install it!\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m---> 51\u001b[0m \u001b[43msys\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mexit\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m)\u001b[49m\n", + "\u001b[0;31mSystemExit\u001b[0m: 1", + "\nDuring handling of the above exception, another exception occurred:\n", + "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", + " \u001b[0;31m[... skipping hidden 1 frame]\u001b[0m\n", + "File \u001b[0;32m~/data/lib/python3.10/site-packages/IPython/core/interactiveshell.py:2097\u001b[0m, in \u001b[0;36mInteractiveShell.showtraceback\u001b[0;34m(self, exc_tuple, filename, tb_offset, exception_only, running_compiled_code)\u001b[0m\n\u001b[1;32m 2094\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m exception_only:\n\u001b[1;32m 2095\u001b[0m stb \u001b[38;5;241m=\u001b[39m [\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mAn exception has occurred, use \u001b[39m\u001b[38;5;124m%\u001b[39m\u001b[38;5;124mtb to see \u001b[39m\u001b[38;5;124m'\u001b[39m\n\u001b[1;32m 2096\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mthe full traceback.\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m'\u001b[39m]\n\u001b[0;32m-> 2097\u001b[0m stb\u001b[38;5;241m.\u001b[39mextend(\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mInteractiveTB\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_exception_only\u001b[49m\u001b[43m(\u001b[49m\u001b[43metype\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 2098\u001b[0m \u001b[43m \u001b[49m\u001b[43mvalue\u001b[49m\u001b[43m)\u001b[49m)\n\u001b[1;32m 2099\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 2101\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mcontains_exceptiongroup\u001b[39m(val):\n", + "File \u001b[0;32m~/data/lib/python3.10/site-packages/IPython/core/ultratb.py:710\u001b[0m, in \u001b[0;36mListTB.get_exception_only\u001b[0;34m(self, etype, value)\u001b[0m\n\u001b[1;32m 702\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mget_exception_only\u001b[39m(\u001b[38;5;28mself\u001b[39m, etype, value):\n\u001b[1;32m 703\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Only print the exception type and message, without a traceback.\u001b[39;00m\n\u001b[1;32m 704\u001b[0m \n\u001b[1;32m 705\u001b[0m \u001b[38;5;124;03m Parameters\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 708\u001b[0m \u001b[38;5;124;03m value : exception value\u001b[39;00m\n\u001b[1;32m 709\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 710\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mListTB\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mstructured_traceback\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43metype\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mvalue\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/data/lib/python3.10/site-packages/IPython/core/ultratb.py:568\u001b[0m, in \u001b[0;36mListTB.structured_traceback\u001b[0;34m(self, etype, evalue, etb, tb_offset, context)\u001b[0m\n\u001b[1;32m 565\u001b[0m chained_exc_ids\u001b[38;5;241m.\u001b[39madd(\u001b[38;5;28mid\u001b[39m(exception[\u001b[38;5;241m1\u001b[39m]))\n\u001b[1;32m 566\u001b[0m chained_exceptions_tb_offset \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m0\u001b[39m\n\u001b[1;32m 567\u001b[0m out_list \u001b[38;5;241m=\u001b[39m (\n\u001b[0;32m--> 568\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mstructured_traceback\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 569\u001b[0m \u001b[43m \u001b[49m\u001b[43metype\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 570\u001b[0m \u001b[43m \u001b[49m\u001b[43mevalue\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 571\u001b[0m \u001b[43m \u001b[49m\u001b[43m(\u001b[49m\u001b[43metb\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mchained_exc_ids\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;66;43;03m# type: ignore\u001b[39;49;00m\n\u001b[1;32m 572\u001b[0m \u001b[43m \u001b[49m\u001b[43mchained_exceptions_tb_offset\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 573\u001b[0m \u001b[43m \u001b[49m\u001b[43mcontext\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 574\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 575\u001b[0m \u001b[38;5;241m+\u001b[39m chained_exception_message\n\u001b[1;32m 576\u001b[0m \u001b[38;5;241m+\u001b[39m out_list)\n\u001b[1;32m 578\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m out_list\n", + "File \u001b[0;32m~/data/lib/python3.10/site-packages/IPython/core/ultratb.py:1435\u001b[0m, in \u001b[0;36mAutoFormattedTB.structured_traceback\u001b[0;34m(self, etype, evalue, etb, tb_offset, number_of_lines_of_context)\u001b[0m\n\u001b[1;32m 1433\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 1434\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mtb \u001b[38;5;241m=\u001b[39m etb\n\u001b[0;32m-> 1435\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mFormattedTB\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mstructured_traceback\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 1436\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43metype\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mevalue\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43metb\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtb_offset\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mnumber_of_lines_of_context\u001b[49m\n\u001b[1;32m 1437\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/data/lib/python3.10/site-packages/IPython/core/ultratb.py:1326\u001b[0m, in \u001b[0;36mFormattedTB.structured_traceback\u001b[0;34m(self, etype, value, tb, tb_offset, number_of_lines_of_context)\u001b[0m\n\u001b[1;32m 1323\u001b[0m mode \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mmode\n\u001b[1;32m 1324\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m mode \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mverbose_modes:\n\u001b[1;32m 1325\u001b[0m \u001b[38;5;66;03m# Verbose modes need a full traceback\u001b[39;00m\n\u001b[0;32m-> 1326\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mVerboseTB\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mstructured_traceback\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 1327\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43metype\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mvalue\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtb\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtb_offset\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mnumber_of_lines_of_context\u001b[49m\n\u001b[1;32m 1328\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1329\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m mode \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mMinimal\u001b[39m\u001b[38;5;124m'\u001b[39m:\n\u001b[1;32m 1330\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m ListTB\u001b[38;5;241m.\u001b[39mget_exception_only(\u001b[38;5;28mself\u001b[39m, etype, value)\n", + "File \u001b[0;32m~/data/lib/python3.10/site-packages/IPython/core/ultratb.py:1173\u001b[0m, in \u001b[0;36mVerboseTB.structured_traceback\u001b[0;34m(self, etype, evalue, etb, tb_offset, number_of_lines_of_context)\u001b[0m\n\u001b[1;32m 1164\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mstructured_traceback\u001b[39m(\n\u001b[1;32m 1165\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m 1166\u001b[0m etype: \u001b[38;5;28mtype\u001b[39m,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 1170\u001b[0m number_of_lines_of_context: \u001b[38;5;28mint\u001b[39m \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m5\u001b[39m,\n\u001b[1;32m 1171\u001b[0m ):\n\u001b[1;32m 1172\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Return a nice text document describing the traceback.\"\"\"\u001b[39;00m\n\u001b[0;32m-> 1173\u001b[0m formatted_exception \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mformat_exception_as_a_whole\u001b[49m\u001b[43m(\u001b[49m\u001b[43metype\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mevalue\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43metb\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mnumber_of_lines_of_context\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1174\u001b[0m \u001b[43m \u001b[49m\u001b[43mtb_offset\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1176\u001b[0m colors \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mColors \u001b[38;5;66;03m# just a shorthand + quicker name lookup\u001b[39;00m\n\u001b[1;32m 1177\u001b[0m colorsnormal \u001b[38;5;241m=\u001b[39m colors\u001b[38;5;241m.\u001b[39mNormal \u001b[38;5;66;03m# used a lot\u001b[39;00m\n", + "File \u001b[0;32m~/data/lib/python3.10/site-packages/IPython/core/ultratb.py:1063\u001b[0m, in \u001b[0;36mVerboseTB.format_exception_as_a_whole\u001b[0;34m(self, etype, evalue, etb, number_of_lines_of_context, tb_offset)\u001b[0m\n\u001b[1;32m 1060\u001b[0m \u001b[38;5;28;01massert\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(tb_offset, \u001b[38;5;28mint\u001b[39m)\n\u001b[1;32m 1061\u001b[0m head \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mprepare_header(\u001b[38;5;28mstr\u001b[39m(etype), \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mlong_header)\n\u001b[1;32m 1062\u001b[0m records \u001b[38;5;241m=\u001b[39m (\n\u001b[0;32m-> 1063\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_records\u001b[49m\u001b[43m(\u001b[49m\u001b[43metb\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mnumber_of_lines_of_context\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtb_offset\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;28;01mif\u001b[39;00m etb \u001b[38;5;28;01melse\u001b[39;00m []\n\u001b[1;32m 1064\u001b[0m )\n\u001b[1;32m 1066\u001b[0m frames \u001b[38;5;241m=\u001b[39m []\n\u001b[1;32m 1067\u001b[0m skipped \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m0\u001b[39m\n", + "File \u001b[0;32m~/data/lib/python3.10/site-packages/IPython/core/ultratb.py:1131\u001b[0m, in \u001b[0;36mVerboseTB.get_records\u001b[0;34m(self, etb, number_of_lines_of_context, tb_offset)\u001b[0m\n\u001b[1;32m 1129\u001b[0m \u001b[38;5;28;01mwhile\u001b[39;00m cf \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 1130\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m-> 1131\u001b[0m mod \u001b[38;5;241m=\u001b[39m inspect\u001b[38;5;241m.\u001b[39mgetmodule(\u001b[43mcf\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtb_frame\u001b[49m)\n\u001b[1;32m 1132\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m mod \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 1133\u001b[0m mod_name \u001b[38;5;241m=\u001b[39m mod\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__name__\u001b[39m\n", + "\u001b[0;31mAttributeError\u001b[0m: 'tuple' object has no attribute 'tb_frame'" + ] + } + ], + "source": [ + "from pyecharts.globals import CurrentConfig, NotebookType\n", + "import pyecharts.options as opts\n", + "CurrentConfig.NOTEBOOK_TYPE = NotebookType.JUPYTER_LAB\n", + "from pyecharts.charts import Radar\n", + "from pyecharts.render import make_snapshot\n", + "from snapshot_phantomjs import snapshot\n", + "\n", + "\n", + "v1 = [[90, 100, 80, 76, 88, 95]]\n", + "v2 = [[5000, 14000, 28000, 31000, 42000, 21000]]\n", + "\n", + "bar =(\n", + " Radar(init_opts=opts.InitOpts())\n", + " .add_schema(\n", + " schema=[\n", + " opts.RadarIndicatorItem(name=\"销售(sales)\", max_=100),\n", + " opts.RadarIndicatorItem(name=\"管理(Administration)\", max_=100),\n", + " opts.RadarIndicatorItem(name=\"信息技术(Information Technology)\", max_=100),\n", + " opts.RadarIndicatorItem(name=\"客服(Customer Support)\", max_=100),\n", + " opts.RadarIndicatorItem(name=\"研发(Development)\", max_=100),\n", + " opts.RadarIndicatorItem(name=\"市场(Marketing)\", max_=100),\n", + " ],\n", + " splitarea_opt=opts.SplitAreaOpts(\n", + " is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)\n", + " ),\n", + " textstyle_opts=opts.TextStyleOpts(color=\"#aaa\"),\n", + " )\n", + " .add(\n", + " series_name=\"预算分配(Allocated Budget)\",\n", + " data=v1,\n", + " linestyle_opts=opts.LineStyleOpts(color=\"#CD0000\"),\n", + " )\n", + " \n", + " .set_series_opts(label_opts=opts.LabelOpts(is_show=False))\n", + " .set_global_opts(\n", + " title_opts=opts.TitleOpts(title=\"基础雷达图\"), legend_opts=opts.LegendOpts()\n", + " )\n", + " #.render(\"basic_radar_chart.html\")\n", + " \n", + ")\n", + "make_snapshot(snapshot, bar.render(), \"bar0.png\")" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "execution": { + "iopub.execute_input": "2023-10-08T02:30:58.347196Z", + "iopub.status.busy": "2023-10-08T02:30:58.346801Z", + "iopub.status.idle": "2023-10-08T02:30:58.438868Z", + "shell.execute_reply": "2023-10-08T02:30:58.438412Z", + "shell.execute_reply.started": "2023-10-08T02:30:58.347165Z" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "import pygal \n", + "\n", + "radar_chart = pygal.Radar()\n", + "radar_chart.title = 'V8 benchmark results'\n", + "radar_chart.x_labels = ['Richards', 'DeltaBlue', 'Crypto', 'RayTrace', 'EarleyBoyer', 'RegExp', 'Splay', 'NavierStokes']\n", + "radar_chart.add('Chrome', [6395, 8212, 7520, 7218, 12464, 1660, 2123, 8607])\n", + "\n", + "radar_chart.render_to_png('chart.png')" + ] + }, { "cell_type": "code", "execution_count": null,