当前位置: 首页 > 科技观察

Python数据可视化神器—Pyecharts

时间:2023-03-13 06:55:07 科技观察

今日分享主题:PythonPyecharts模块实现数据动态可视化分析前言Echarts是百度开源的一款数据可视化JS工具。运行。作为一个经常在工作中使用Python的玩家,一定知道这款数据可视化插件的强大之处。那么,是不是也可以在Python中使用Echarts的功能呢?惊喜地在搜索中找到了pyecharts,只需在python中安装模块即可使用。一键安装pyecharts安装常用的pip安装包#pyecharts安装命令:python-mpipinstallpyechartsPython+pyecharts具体应用结合工作中的项目资料,我选择了测试项目需求中的hotel_code_new为CNSZVS_002,并且CWSWS_003对应2019年12月指标,用于RNs数据的可视化展示和分析。1、Hive数据库查询sqlhive_sql内容如下#sql中使用的部分语法是hivesql中的常规语法,与mysql不同,请注意。选择rrrd1.hotel_code_new作为hotel_code_new,dda.natural_date作为natural_date,nvl(rrrd.room_nights,0)作为room_nightsfrom(选择不同的substr(natural_dt,1,7)作为natural_datefromdws.dws_test_date_calendarwheredt_year='2019')ddaleftjoin(select'CNSZVS_002'hotel_code_newUNIONallselect'CWSWS_003'hotel_code_new)rrrd1leftjoin(selecthotel_code_new,substr(stay_date,1,7)asstay_datesum(number_of_room_nights)asroom_nightsfromdwm.dwm_test_resvs_rom_daily_df其中dt='2021-10-24'andhotel_code_newin(CNSZVS_002','CWSWS_003')andresv_statusin('CHECKEDSSSIN','CHECKEDSSSOUT')andsubstr(stay_date,0,4)='2019'groupbyhotel_code_new,substr(stay_date,1,7))rrrdondda.natural_date=rrrd.stay_date和rrrd1.hotel_code_new=rrrd.hotel_code_new由rrrd.hotel_code_new订购;2.Python代码实现—histogramfromimpala.dbapiimportconnectimportwarnings#datawarehouse数据获取准备defhive_connect(sql):warnings.filterwarnings('ignore')config_hive_beta={'host':'10.7.0.12',#hivehostaddress'port':10000,#hive端口号'user':'hive',#hive用户名'password':'hive',#hive密码'database':'tmp',要查询的数据库名在#hive'auth_mechanism':'PLAIN'#obtainedfromhive-site.xml配置文件中}conn=connect(**config_hive_beta)cursor=conn.cursor()cursor.execute(sql)hive_all_data=cursor.fetchall()returnhive_all_data#all_data=hive_connect(hive_sql)#调用hive_connect方法得到的数据库查询结果数据显示在all_data列表中all_data=[('CNSZVS_002','2019-01',0),('CNSZVS_002','2019-02',0),('CNSZVS_002','2019-03',0),('CNSZVS_002','2019-04',0),('CNSZVS_002','2019-05',0),('CNSZVS_002','2019-06',2353),('CNSZVS_002','2019-07',2939),('CNSZVS_002','2019-08',5148),('CNSZVS_002','2019-09',3850),('CNSZVS_002','2019-10',4973),('CNSZVS_002','2019-11',5467),('CNSZVS_002','2019-12',4742),('CWSWS_003','2019-01',5914),('CWSWS_003','2019-02',4434),('CWSWS_003','2019-03',6003),('CWSWS_003','2019-04',6611),('CWSWS_003','2019-05',6586),('CWSWS_003','2019-06',5840),('CWSWS_003','2019-07',6624),('CWSWS_003','2019-08',7001),('CWSWS_003','2019-09',5792),('CWSWS_003','2019-10',6898),('CWSWS_003','2019-11',6944),('CWSWS_003','2019-12',5404)]#importhistogramfrompyechartsmodule-BarfrompyechartsimportBar#设置横轴行名,这里使用12个月的英文缩写columns=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]#创建2个空列表存储每个月对应的RNs的值CNSZVS_002=[]CWSWS_003=[]foriinall_data:ifi[0]=='CNSZVS_002':CNSZVS_002.append(i[2])elifi[0]=='CWSWS_003':CWSWS_003.append(i[2])else:pass#设置直方图的主标题和副标题bar=Bar("Histogram","TestRequirements—RNsin2019")#添加直方图的数据以及配置项-average,maximum,minimumbar.add("CNSZVS_002",columns,CNSZVS_002,mark_line=["average"],mark_point=["max","min"])bar.add("CWSWS_003",columns,CWSWS_003,mark_line=["average"],mark_point=["max","min"])#在这个py文件(默认是.html文件)同级目录下生成一个名为render.html的本地文件吧。render()#也可以设置到指定路径保存html文件#bar.render(r"D:bar_render.html")柱状渲染生成的柱状渲染是html格式的,可??以在打开它一个浏览器来查看它。在浏览器中支持以图片格式下载到本地,点击图例可以将对应的图例灰显,隐藏图例对应的直方图数据,如下图3.Python代码实现——饼图注:数据准备部分的代码与直方图相同,这里只展示饼图特有的代码#ImportpiechartfrompyechartsmodulePiefrompyechartsimportPie#设置主标题和副标题,title设置中心,宽度设置为1000pie=Pie("PieChart","TestRequirements—RNsin2019",title_pos='left',width=1000)#使用add导入data,设置坐标位置为[20,50],上面的colums选项取消pie的显示.add("CNSZVS_002",columns,CNSZVS_002,center=[20,50],is_legend_show=True)#使用add导入数据,设置坐标位置为[75,50],上面colums选项正常显示pie.add("CWSWS_003",columns,CWSWS_003,center=[75,50],is_legend_show=False,is_label_show=True)#保存图表pie.render()饼图效果图展示-隐藏分享Percentage饼图效果图展示-显示百分比4.Python代码实现-箱线图#importboxplotfrompyechartsmoduleBoxplotfrompyechartsimportBoxplotboxplot=Boxplot("Boxplot","测试需求-2019年RNs")x_axis=['CNSZVS_002','CWSWS_003']y_axis=[CNSZVS_002,CWSWS_003]#prepare_data方法可以将数据转换为嵌套的[min,Q1,median(orQ2),Q3,max]yaxis=boxplot。prepare_data(y_axis)boxplot.add("RNsstatisticsin2019",x_axis,yaxis)boxplot.render()箱线图效果展示5.Python代码实现-折线图frompyechartsimportLineline=Line("折线图","Testrequirements—RNsin2019")#is_label_show属性是设置以上数据是否显示line.add("CNSZVS_002",columns,CNSZVS_002,is_label_show=True)line.add("CWSWS_003",columns,CWSWS_003,is_label_show=True)line.render()折线图效果展示6.Python代码实现-雷达图从pyecharts导入Radarradar=Radar("RadarChart","TestRequirements—RNsin2019")#由于雷达图导入的数据一定是多维数据,所以列表需要再次转换一次CNSZVS_002=[CNSZVS_002]CWSWS_003=[CWSWS_003]#设置列的最大值。为了让雷达图更直观,这里月份的最大值是根据真实数据的值设置的,所以每个月都是不同的schema_diff=[("Jan",7000),("Feb",5000),("三月",6500),("四月",7000),("五月",7000),("六月",6200),("七月",6800),("八月",7200),("Sep",6000),("Oct",7300),("Nov",7500),("Dec",6000)]#输入坐标radar.config(schema_diff)radar.add("CNSZVS_002",CNSZVS_002)#一般默认是同色。这里为了方便区分,需要设置item的颜色radar.add("CWSWS_003",CWSWS_003,item_color="#1C86EE")radar.render()雷达渲染显示7.Python代码实现——散点图frompyechartsimportScatterscatter=Scatter("散点图","考试要求——2019年RNs")#xais_name是设置横坐标的名称。这里由于显示问题,还需要结合y轴名称和y轴的距离设置scatter.add("CWSWS_003&CNSZVS_002ScatterdistributionofRNs",CNSZVS_002,CWSWS_003,xaxis_name="CNSZVS_002",yaxis_name="CWSWS_003",yaxis_name_gap=40)scatter.render()散点图效果展示总结准备好需要的数据及其格式导入对应图表使用的包add()方法:main方法,用于添加图表数据和设置各种配置项render()方法:用于保存生成的图表