在编程大神里,对于动态柱状图来说应该是小儿科,可对于我这个自学者,真是一个“大课题”呢,但跟着学下来,心里很爽,这不就是前几年很火的动态表格么,原来只需要一些代码。
准备前的补充学习:列表的sort方法:
使用方法:
列表.sort(key=选择排序依据的函数,reverse=True|False)
·参数key,是要求传入一个函数,表示将列表的每一个元素都传入函数中,返回排序的依据;
·参数reverse,是否反转排序结果,True表示降序,False表示升序。
这是要做出的效果,依然是按照编程的思路来写流程,强化逻辑
1.数据的整理
打开文件,对文件内不符合要求的进行增删改切。
#读取数据 f = open("D:/1960-2019全球GDP数据.csv", "r", encoding="GB2312") data_lines = f.readlines() #关闭数据 f.close() #删除第一行数据 data_lines.pop(0)
UTF-8:国际通用字库,支持现今世界各种不同语言。
gb2312 :是国标,是中国的字库,里面仅涵盖了汉字和一些常用外文
字库规模: UTF-8(字全) > gb2312(只有汉字)
UTF-8里面存储一个汉字3个字节,而gb2312中存储一个汉字2个字节
保存大小: UTF-8(更臃肿、加载更慢) > gb2312 (更小巧,加载更快)
这个案例里面延伸了些内容,比如这个编码。
二、数据的处理
编程说到底还是数据处理,算法的思考。那么对于一个数据,处理计算机能识别的符合python编辑语言的数据,就很有必要。
#将数据转化为字典存储,格式为: #{年份:【国家,GDP】}.........} #定义一个字典 data_dict = {} for line in data_lines: year = int(line.split(",")[0]) #取年份KEY ,split 分割出每一个数据元 int 是把数字调整为整数 country = line.split(",")[1] #取国家 gdp = float(line.split(",")[2]) #gdp数据 try: data_dict[year].append([country, gdp]) #如何判断字典里面有没有KEY except KeyError: data_dict[year] = [] #如果异常了,就给它赋值一个空的年 data_dict[year].append([country, gdp]) print(data_dict)
这里面的练习是对数据进行重新的字典类型存储,取年、取国家、取数据。
这里面出现了对“异常”处理的方法,try: except KeyError: 意思有点像,如果这样出错,就那样来的感觉,反正有一个能对就行。
三、数据的呈现:绘图
动态的GDP,其实跟视频一样,每一帧都是一个画面,也可以看成一个柱状图。时间线是在for循环里的,先设置年的遍历。
#创建时间线 timeline = Timeline({"theme":ThemeType.LIGHT}) #排序年份 #把KEY 取出来排序 sorted_year_list = sorted(data_dict.keys()) for year in sorted_year_list: data_dict[year].sort(key=lambda element:element[1], reverse=True) #取前10 year_data = data_dict[year][0:10] x_data = [] y_data = [] for country_gdp in year_data: x_data.append(country_gdp[0]) #x轴添加国家 y_data.append(country_gdp[1]/100000000) #y轴添加gtp #构建柱状图 bar = Bar() x_data.reverse() y_data.reverse() bar.add_xaxis(x_data) bar.add_yaxis("GDP(亿)", y_data, label_opts=LabelOpts(position="right")) bar.reversal_axis()#反转XY轴 #每一年的图标标题 bar.set_global_opts( title_opts=TitleOpts(title=f"{year}全球前十GDP数据") ) timeline.add(bar,str(year)) #自动播放 timeline.add_schema( play_interval=800, is_timeline_show=True, is_auto_play=True, is_loop_play=False ) timeline.render("1960-2019年全球GDP前10国家.html")
看着教科书讲完都觉得蛮震撼,但自己编辑估计还不行。加油
这个训练完后,感受到码农的心酸苦楚乃至快乐快感了。