博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【HighChart教程】编程语言详细程度的互动比较
阅读量:6373 次
发布时间:2019-06-23

本文共 4195 字,大约阅读时间需要 13 分钟。

hot3.png

HighChart

起点是评估他们在执行各种任务时的“简洁性”(而不是对任何语言的效率或效力做出任何判断)。

这引出了我Rosettacode.org,这是任何编程爱好者的一个很棒的信息来源。它提供了各种任务(超过870个)和代码片段来解决它们,在许多编程语言中(超过680个)。

探索Rosettacode.org并比较不同的编程语言。它可以帮助您找到解决您在“本土”语言中遇到的问题的新方法,并找出其他思维方式。为此,我写了一个小应用程序来促进这个过程,我将在这里与大家分享。

该应用程序,非常基本。它只是将Rosettacode.org的代码片段长度与不同的任务和语言进行比较,并使用我最喜欢的Javascript库在条形图上显示结果。

Python,Flask,Highcharts和Azure环境

Azure是微软的云(免责声明,我为微软工作)。它是托管数据,创建机器人和自动执行任务,部署Python应用程序或利用AI的绝佳基础架构。

在本演示中,我在Azure上安装了一个python 3.4环境和一些库(Beautiful Soup和Flask)

第1步:Scraping

第一步是刮掉RosettaCode以获取所有可用任务。我写了一个非常简短的python脚本来进行抓取。我预先选择了一部分编程语言(见languages_dict下文),以避免刮掉太多不相关的数据。

# Selected language names and corresponding spelling/encoding as in HTML page languages_dict={"Java":"Java","JavaScript":"JavaScript","C":"C","C.2B.2B":"C++","C.23":"C#","COBOL":"Cobol","Haskell":"Haskell","Python":"Python","R":"R","Julia":"Julia","MATLAB_.2F_Octave":"Matlab","Pascal":"Pascal","Fortran":"Fortran","BASIC":"BASIC","Go":"Go","Ruby":"Ruby","SAS":"SAS","Stata":"Stata","Swift":"Swift","Processing":"Processing","UNIX_Shell":"UNIX Shell","VBA":"VBA","PowerShell":"PowerShell"}#store language names in an arraylanguage_name=[]#populate the array from the dictfor item in languages_dict:language_name.append(languages_dict[item])#get all tasks from Rosettacode.orgurl_task="http://www.rosettacode.org/wiki/Category:Programming_Tasks"r = requests.get(url_task)soup = BeautifulSoup(r.text, 'html.parser')table=soup.find("div", {"class": "mw-category"})#Create an empty dictionary to be filled with the tasks as they appear in the HTML source and name (as header)url_dict={}#get all links (a tags) tags=table('a')#iterate over tag list and fill the task/url dictionaryfor tag in tags:    url_dict[tag.get('title',None)]=tag.get('href',None)[6:]#store task names in an arraytask_name=[]for item in url_dict: task_name.append(item)array_language=[]count=[]task=""#flask method to get the task the user wants to compareif request.method == "POST":    # get url from task the user requested    task = request.form['task']    url="https://www.rosettacode.org/wiki/"+url_dict[task]    r = requests.get(url)    soup = BeautifulSoup(r.text, 'html.parser')    dict_count={}    for language in languages_dict:        try:             header=soup.find("span", {"id": language})            snippet=BeautifulSoup(header.find_next("pre").text, 'html.parser')            dict_count[languages_dict[language]] = len(snippet.text)        except:             continue    #sort dictionary    for lang in sorted(dict_count, key=dict_count.get, reverse=True):        array_language.append(lang)        count.append(dict_count[lang])

当用户选择要比较的任务时,上面的脚本查找预先选择的语言并评估相应片段的长度(在HTML中相应的标题之后的“pre”标签内)。该脚本将结果存储在一个数组中,该数组将通过Flask发送到前端到我的Highcharts。

以下是与“ For循环 ” 对应的片段的结果数组:

# array_language['C', 'Swift', 'Pascal', 'Go', 'BASIC', 'Haskell', 'UNIX Shell', 'Matlab', 'Processing', 'PowerShell', 'Fortran', 'Cobol', 'VBA', 'C++', 'Java', 'Julia', 'Ruby', 'JavaScript', 'Python', 'R', 'SAS', 'Stata', 'C#']#count (length of the snippets)[90, 73, 144, 167, 70, 115, 400, 103, 103, 116, 1211, 533, 193, 104, 119, 71, 55, 114, 92, 85, 293, 79, 261]

然后这些数组将提供条形图。

第2步:Highcharts

Python和Flask使用和将数据数组发送到Highcharts 。在HTML页面呈现期间,服务器注入使用python构造的数组。请注意,我使用该选项来避免任何编码意外。{

{ array_language | safe}}{
{count}}
| safe

Highcharts.chart('container', {    chart: {        type: 'bar'    },    title: {        text: 'Programming language comparison: {
{task | safe}} ' }, subtitle: { text: 'Source: rosettacode.org' }, xAxis: { categories: {
{ array_language | safe}}, title: { text: null } }, yAxis: { min: 0, title: { text: 'Task size (char)', align: 'high' }, labels: { overflow: 'justify' } }, tooltip: { valueSuffix: 'chars' }, plotOptions: { bar: { dataLabels: { enabled: true } } }, series: [{ name: '{
{task}}', data: {
{count}} }]});

结果

  • 下面是该应用程序的屏幕截图。
  • 以下是Azure上托管的Python脚本和HTML页面。

HighChart

我们现在有一种交互方式来比较执行许多任务所需的代码长度!要添加到图表中的一个很好的功能是将代码段显示为每种语言的工具提示。这将增强我们对Rosettacode的视觉探索。

转载于:https://my.oschina.net/u/3905944/blog/3005799

你可能感兴趣的文章
linux如何恢复被删除的热文件
查看>>
Eclipse(MyEclipse) 自动补全
查看>>
Struts2中dispatcher与redirect的区别
查看>>
zabbix agentd configure
查看>>
地图点聚合优化方案
查看>>
Google Chrome 快捷方式
查看>>
备考PMP心得体会
查看>>
vue proxy匹配规则
查看>>
线上应用故障排查之一:高CPU占用
查看>>
Extend Volume 操作 - 每天5分钟玩转 OpenStack(56)
查看>>
IronPython教程
查看>>
squid via检测转发循环
查看>>
计算分页
查看>>
iptables 做nat路由器脚本
查看>>
数据结构(C语言版)第三章:栈和队列
查看>>
Stopping and/or Restarting an embedded Jetty in...
查看>>
Oracle存储过程中的数据集输入参数
查看>>
vsftp 配置
查看>>
VCSA中配置时间和时区,实测至6.5适用
查看>>
高并发IM系统架构优化实践
查看>>