大学中获奖的我是如何在美国数学建模比赛中划水的——分享技巧

(美国大学生数学建模竞赛,简称美赛。一共五个奖项,分别为O,F,M,H,S奖。 在国内,约定俗成地将这五个奖项分别对应为特等奖、特等奖候选奖、一等奖、二等奖,成功参与奖,所以在保研同学的心目中,这个比赛还是很有分量的。)

美赛粗略地计算一共三天。第一天我们一直在审题、选题、换题、审题、选题......反正会做的就那么几个,还好整个队伍的心理抗压能力很好,不然第一天就结束了。

第二天开始处理数据,然后交给我们队的大佬跑结果。第三天写论文,英语大佬满血通宵。最后获得了一般的成绩,H奖。

对!没错!看到这里,你会发现我就做了一件事,处理数据!处理数据!!处理数据!!!

嗯~o(* ̄▽ ̄*)o......我反省,我认错,我对不起那奋战一夜的队友。

正文开始:       

pyecharts——python数据可视化模块

先给出效果图,很开心呀^_^。网址:pyecharts - A Python Echarts Plotting Library


例子—条形图

首先,团队在写论文的过程中需要从时间上给出规律,这时给出一张条形图岂不是会加分嘛~

为了能够将数据及时取出并方便管理,采用excel从里面读出数据,所以程序要先读表。

data = xlrd.open_workbook('CLTCB.xlsx') # 打开xls文件

table = data.sheets()[0] # 打开第一张表

nrows = table.nrows # 获取表的行数

然后就用到了pyecharts,敲黑板!!!​

bar = Bar("TX",title_text_size=30)

bar.add(name[i], time, cols_,bar_category_gap='50%', mark_line=["min", "max"],mark_point=["average"],

       xaxis_interval=4, xaxis_rotate=0,legend_text_size=30)

这么多参数,一下子想问候我?别急,咱们慢慢来。​

首先实例化Bar这个类,也就是柱形图/条形图。

​ Bar("TX",title_text_size=30) ​//“TX”为标题(title),title_text_size为主标题字体大小(int类型)

还有很多参数(副标题、标题距离顶部距离、背景颜色、文本颜色等,参考链接:pyecharts - A Python Echarts Plotting Library

我们接着看下一行。

bar.add(name[i], time, cols_,bar_category_gap='50%', mark_line=["min", "max"],mark_point=["average"],

        xaxis_interval=4, xaxis_rotate=0,legend_text_size=30)​

add()函数,在给出的链接中叫做通用配置项(虽然不知道为啥叫这个)。

name列表是自己定义的,对应的是图例。

time也是自己写的,对应的是横坐标的数据。

cols_ 是之前从表格里读出来的,对应的是纵坐标的数据。

bar_category_gap调整的是柱形间距。

mark_line、mark_point使得想要的内容显示出来。

xaxis_interval调整的是横坐标的标度。

xaxis_rotate调整刻度标签旋转的角度。

legend_text_size调整的是图例文本大小。

大佬的教程里面显示要先有show_config(),然后render()结束。可能是我的粗心,应用中我只用了render(),还需要大佬指点,文章最后会贴上所有代码,程序运行完,会生成一个render.html文件,图就在里面,需要请自行下载。

一个超级简单的效果图就出现啦!


还在用饼图展示结果?NO!玫瑰图

个人感觉是个很神奇的存在...玫瑰图...\(^o^)/~

超喜欢的文章链接:Python 数据可视化? - 简书 大佬的脑袋个人很想拿去上解剖课

首先,继续从表格里面读数据,然后开始我们的求学之路。

data = xlrd.open_workbook('CLTCB.xlsx') # 打开xls文件

table = data.sheets()[0] # 打开第一张表

nrows = table.nrows # 获取表的行数

cols_ = table.col_values(i)​

pie = Pie("TX", title_pos='left', width=900,title_text_size=40)

#pie.add("商品A", attr, v1, center=[25, 50], is_random=False, radius=[30, 75], rosetype='radius')

pie.add("商品B", name, cols_, center=[50, 50], is_random=False, radius=[30, 75], rosetype='area',

        is_legend_show=False, is_label_show=True,label_text_size=28)

别急别急,慢慢学​。

Pie与Bar相同,都是一个对象(我瞎说的),首先实例化对象:

pie = Pie("TX", title_pos='left', width=900,title_text_size=40)

 "TX"为标题(title),title_pos调整标题位置,title_text_size调整主标题文字大小,其余的,根据自己需求来调整。​

pie.add("商品B", name, cols_, center=[50, 50], is_random=False, radius=[30, 75], rosetype='area',

        is_legend_show=False, is_label_show=True,label_text_size=28)

add()函数,通用配置项,不知道大家记住没有 ,“商品B”大家自行忽略......

后面的is_legend_show将图例设为不显示了 name为不同的属性名称,在这里为:oil、gas、coal、clean energy

cols为从表格读出来的,不同属性对用的数据 center为调整饼图圆心坐标

is_random为是否随即排列颜色列表(bool)

radius为半径,第一个为内半径,第二个是外半径

rosetype为是否展示成南丁格尔图

'radius' 圆心角展现数据半分比,半径展现数据大小

'area' 圆心角相同,为通过半径展现数据大小

is_label_show为是否显示标签(各个属性的数据信息) label_text_size为调整标签字体大小。​

这样,一个高大上的玫瑰图就弄好了。


我是代码——我是代码——我是代码​

//这是条形图哒

import xlrd

import matplotlib.pyplot as plt

from pyecharts import Bar

data = xlrd.open_workbook('CLTCB.xlsx') # 打开xls文件

table = data.sheets()[0] # 打开第一张表

nrows = table.nrows # 获取表的行数

name = ['Oil','Natural Gas','Coal','Clean Energy']

time = []

for j in range(1960,2010):

    time.append(j)

i = 0

num = i + 221

#plt.subplot(num)

cols_ = table.col_values(i)

bar = Bar("TX",title_text_size=30)

bar.add(name[i], time, cols_,bar_category_gap='50%', mark_line=["min", "max"],mark_point=["average"],

        xaxis_interval=4, xaxis_rotate=0,legend_text_size=30)

    #bar.add("商家B", time, v2, mark_line=["min", "max"])

bar.render()

​//这里是玫瑰图的代码

from pyecharts import Pie

import xlrd

i = 3

data = xlrd.open_workbook('CLTCB.xlsx') # 打开xls文件

table = data.sheets()[0] # 打开第一张表

nrows = table.nrows # 获取表的行数

cols_ = table.col_values(i)

print(len(cols_))

name = ['Oil','Natural Gas','Coal','Clean Energy']

states = ['AZ','CA','NM','TX']

#v1 = [11, 12, 13, 10, 10, 10]

#v2 = [19, 21, 32, 20, 20, 33]

pie = Pie("TX", title_pos='left', width=900,title_text_size=40)

pie.add("商品B", name, cols_, center=[50, 50], is_random=False, radius=[30, 75], rosetype='area',

        is_legend_show=False, is_label_show=True,label_text_size=28)

pie.show_config()

pie.render()


最后,我希望大家能多多评论我的文章,因为我想每篇文章都比之前做得好,感谢大家啦!​

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容