在某次大型会议中,为确保会议过程安全,会场使用了电子胸牌对场内人员的移动轨迹进行了监控。现经过处理,得到了某一天内人员在场内各个区域逗留的时间统计数据(time_allocate_day1.csv,课程资料库下载)。请根据这份数据,完成以下任务:
1、设计可视化方案,通过该方案可实现对人员的分类(绘制出图像即可)
2、请分析会场中room1~6的功能。
二、思路分析(1)进入pyecharts官网修改demo即可
本实验涉及的图表类型如下:
parallel
pie(2)代码实现:
import pandas as pd from pyecharts import options as opts from pyecharts.charts import Parallel, Page, Pie # 获取绘制平行坐标系的数据 def get_data_for_parallel(f): parallel_axis = [] my_data = [] for index, column in enumerate(f): parallel_axis.append({"dim": index, "name": column}) for _, elem in f.iterrows(): temp = [] for i in range(24): # numpy.int64和python的int是不一样的 # print(type(elem[i])) ## print(type(int(elem[i]))) # temp.append(int(elem[i])) my_data.append(temp) return parallel_axis, my_data def draw_parallel(f): parallel_axis, my_data = get_data_for_parallel(f) ( Parallel(init_opts=opts.InitOpts(width="1500px", height="750px")) .add_schema(schema=parallel_axis) .add( series_name="人员分类", data=my_data, linestyle_opts=opts.LineStyleOpts( # 线宽 width=0.5, # 透明度 opacity=0.5, # 线的类型 solid/dashed/dotted type_="dashed", # 线的颜色 # 线性渐变,前四个参数分别是 x0, y0, x2, y2, 范围从 0 - 1,相当于在图形包围盒中的百分比 # 如果 globalCoord 为 `true`,则该四个值是绝对的像素位置 color={ 'type': 'linear', 'x': 0, 'y': 0, 'x2': 0, 'y2': 1, 'colorStops': [{'offset': 0, 'color': 'yellow'}, {'offset': 1, 'color': "purple"}], "global": False } ) ) .set_global_opts( title_opts=opts.TitleOpts( title="平行坐标系" ) ) .render("parallel.html") ) # 获取构建饼图的data def get_data_for_pie(f1, f2): # id与其对应的身份 id2identity = {} # 遍历id-身份表 for _, elem in f2.iterrows(): id2identity[elem[0]] = elem[1] data = [] # room1-room6 循环六次 for i in range(6, 12): # 初始化该房间不同身份的人停留的时间为0 this_room = {"waiter": 0, "vip": 0, "reporter": 0, "participant": 0, "meeting": 0} # 构建infos infos = [] for _, elem in f1.iterrows(): infos.append([id2identity[int(elem[0])], int(elem[i])]) # 遍历infos for info in infos: this_room[info[0]] += info[1] this_room = [(key, value) for key, value in this_room.items()] data.append(this_room) return data # 绘制room1-room6的饼图 def draw_pie(f1, f2): data = get_data_for_pie(f1, f2) page = Page() for i, this_data in enumerate(data): name = "room" + str(i+1) pie = ( Pie() .add("停留总时间", this_data) .set_global_opts(title_opts=opts.TitleOpts(title=name)) .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")) ) page.add(pie) page.render("pie.html") if __name__ == '__main__': # 读取文件 df1 = pd.read_excel("time_allocate_day1.xlsx") df2 = pd.read_excel("classifyday1.xlsx") # task1: 对人员分类 用平行坐标系表示 draw_parallel(df1) # task2: 推断每一个房间的类型 饼图 draw_pie(df1, df2)
(3)实验细节:
@一个易错点:
@在构造pie的数据时,初始化一个字典,然后遍历更新这个字典就可:
Room1: 普通参会人员“meeting”占比最多 => 休息区Room2:嘉宾“VIP”占比最多 => 嘉宾休息区
Room3: 普通参会人员“meeting”占比最多 => 休息区Room4: 记者“reporter”占比最多 => 记者区
Room5: 黑客竞赛参赛者“participant”占比最多 => 黑客竞赛现场
Room6: 场内工作人员“waiter”占比最多 => 工作人员休息区
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)