arcgis 大数据

时间:2024-10-27 08:49 人气:0 编辑:招聘街

一、arcgis 大数据

使用ArcGIS处理大数据的技术

随着信息时代的发展,大数据已经成为各行各业的热门话题。在地理信息系统(GIS)领域,处理大数据也是一项重要的技术挑战。ArcGIS作为领先的GIS软件平台,为处理大数据提供了全面的解决方案和工具。

什么是大数据

大数据是指体量巨大、种类繁多的数据集合。这些数据通常具有三个特征:Volume(海量)、Velocity(高速)、Variety(多样)。处理大数据需要具备高效的数据管理和分析能力。

ArcGIS在大数据处理中的优势

ArcGIS作为一套综合的地理信息系统软件,具有许多优势适用于大数据处理:

  • 强大的数据处理能力:ArcGIS可以处理多种不同格式和来源的大数据,包括卫星影像、传感器数据、数据库等。
  • 可扩展性:ArcGIS支持并行处理和分布式计算,可以轻松处理海量数据集。
  • 空间分析功能:ArcGIS提供丰富的空间分析工具,可以帮助用户从大数据中提取有用的地理信息。
  • 用户友好的界面:ArcGIS的界面简单直观,即使处理大数据集也能保持操作的便捷性。

如何使用ArcGIS处理大数据

在ArcGIS中处理大数据通常包括以下几个步骤:

  1. 数据导入:将大数据导入到ArcGIS平台中,可以通过文件导入、数据库连接等方式。
  2. 数据清洗:清洗和预处理大数据,确保数据质量和完整性。
  3. 空间分析:利用ArcGIS提供的空间分析工具,对数据进行空间分析和建模。
  4. 数据可视化:通过地图可视化等方式展示处理后的数据结果,便于用户理解和决策。

案例分析:利用ArcGIS处理大数据的应用

以气象数据分析为例,使用ArcGIS平台处理大规模气象数据。首先,将气象数据导入ArcGIS,然后利用空间插值等技术对数据进行预测和分析。最后,通过地图可视化展示气象结果,帮助用户更好地理解气象变化情况。

结论

总的来说,ArcGIS作为一套专业的GIS软件平台,具有处理大数据的强大能力和丰富工具。在处理大数据时,用户可以通过ArcGIS提供的功能,高效地进行数据管理、分析和可视化,从而更好地利用大数据为科学研究和决策提供支持。

二、arcgis操作?

arcgis具体操作步骤:

1

/6

首先,打开arcgis软件中的arcmap(这是arcgis最常用的,很多人接触arcgis也只是使用了arcmap,初学者必学)。

2

/6

然后,一般情况下,我们打开arcgis后,就会点击工具栏中加号样式的按钮:添加数据(格式为shp、gdb、mdb等)或者影像(tif等),将数据添加进来,待编辑。

3

/6

添加进来后,可以在主界面左侧的内容列表中看到,这个窗口主要功能就是显示本页面中添加的所有数据。

4

/6

再对数据进行编辑,打开菜单栏中的编辑器工具栏下的开始编辑,同时这里也有停止编辑,在我们编辑数据完成后,需要保存的时候,就可以点这个停止编辑,它会提示保存。

5

/6

点击开始编辑后,主界面就会出现一个创建要素窗口,这也是我们使用最多的功能:创建要素,点击其中的要素模板,即可开始创建要素了,鼠标点击左键即可绘制。

6

/6

再编辑过程中,常用操作:删除、撤回、复制、粘贴、剪切、恢复等操作都可以在工具栏中的标准工具中找到。

操作的最后,就是保存编辑(第4步中的停止编辑)和关闭arcgis软件

三、arcgis 帮助文档

使用ArcGIS帮助文档掌握空间分析和地理信息系统

作为一名地理信息系统(GIS)专业人士或地理爱好者,了解ArcGIS帮助文档的重要性不言而喻。ArcGIS帮助文档是Esri公司提供的全面指南,旨在帮助用户掌握ArcGIS平台中的空间分析技术和工具。无论您是初学者还是有经验的专业人士,通过学习和使用帮助文档,您可以更好地利用ArcGIS提供的功能和资源,实现您的空间分析目标。

使用ArcGIS帮助文档,您可以深入了解各种空间分析工具、函数、扩展和数据模型。帮助文档提供了详尽的说明、示例和操作步骤,以帮助您了解如何正确使用ArcGIS工具进行地理数据处理和分析。通过逐步指导和图文并茂的示例,您能够轻松学习和掌握ArcGIS平台的强大功能。

ArcGIS帮助文档的特点

ArcGIS帮助文档为用户提供了丰富的资源和工具,使您能够解决各种与空间分析和地理信息相关的问题。以下是ArcGIS帮助文档的一些主要特点:

  • 全面性:帮助文档涵盖了ArcGIS平台的各个方面,从基础知识到高级技术,从数据管理到地理处理,从二维到三维分析,它包罗万象。
  • 实用性:帮助文档提供了实际示例和项目案例,以帮助您将所学知识应用到真实世界的问题中。这使得学习过程更具有实际意义,并能够迅速提高您的实际工作效率。
  • 易于导航:帮助文档采用了直观的导航结构,使您可以快速找到所需的信息。您可以通过目录、搜索功能或相关主题链接来轻松浏览和定位内容。
  • 及时更新:ArcGIS平台不断演进和更新,帮助文档也会相应进行更新和改进。这使得您始终能够访问到最新的功能和最新的操作指南。

ArcGIS帮助文档的应用领域

ArcGIS帮助文档适用于广泛的领域和行业。无论您是从事环境科学、城市规划、交通管理、自然资源管理还是应急响应等领域,ArcGIS帮助文档都能成为您的宝贵资料库和学习指南。以下是一些常见应用领域:

  • 环境保护与管理:帮助文档提供了许多工具和技术,用于分析环境数据、监测环境变化和保护自然资源。您可以学习如何使用ArcGIS平台进行环境影响评估、模拟气候变化、保护生物多样性等。
  • 城市规划与土地管理:帮助文档介绍了许多有关城市规划、土地管理和城市发展的工具和方法。您可以学习如何利用ArcGIS平台进行土地利用规划、交通网络分析、人口流动模拟等。
  • 应急响应与灾害管理:ArcGIS帮助文档提供了紧急情况下地理数据收集、分析和可视化的工具和技术。您可以学习如何使用ArcGIS平台进行紧急灾害响应、救援计划制定和风险评估等。
  • 商业和市场分析:帮助文档包含了许多与商业智能和市场分析相关的工具和方法。您可以学习如何使用ArcGIS平台进行销售地理分析、客户洞察和市场定位等。

使用ArcGIS帮助文档的建议和技巧

为了更好地利用ArcGIS帮助文档,以下是一些建议和技巧:

  1. 明确学习目标:在开始阅读帮助文档之前,明确您的学习目标和需求。这将帮助您更快地找到所需的信息,并快速掌握相关知识。
  2. 尝试实践:帮助文档提供了示例和练习,尽量将所学知识应用到实际问题中。通过实践,您能够更好地理解和掌握ArcGIS平台的功能和技术。
  3. 积极参与社区:Esri社区论坛和博客是与其他ArcGIS用户交流和分享经验的绝佳场所。积极参与社区讨论,向其他用户请教问题,可以加快学习进程并获得更多实践经验。
  4. 持续学习:ArcGIS平台不断更新和发展,您需要持续学习和探索新的功能和技术。定期查看帮助文档和相关资源,了解最新的更新和改进。

通过学习ArcGIS帮助文档,您将获得一种有力的工具,帮助您解决各种与空间分析和地理信息相关的挑战。无论您是初学者还是有经验的专业人士,帮助文档都将成为您的指南和知识库。开始使用ArcGIS帮助文档,开启您的空间分析之旅!

四、arcgis函数?

ArcGIS 是一套地理信息系统 (GIS) 软件,提供了丰富的功能和工具来处理、分析和可视化地理数据。在 ArcGIS 中,有许多内置的函数和工具可供使用,用于执行各种地理数据处理和分析操作。以下是一些常用的 ArcGIS 函数示例:

1. Buffer 函数:用于创建一个指定距离的缓冲区区域,可以用来表示周围的影响范围或保护区域。

2. Clip 函数:用于将一个图层或要素类裁剪到另一个图层或要素类的边界范围内,生成一个新的裁剪后的图层。

3. Intersect 函数:用于计算多个图层或要素类的交集,生成一个包含两者共有部分的新图层。

4. Union 函数:用于计算多个图层或要素类的并集,生成一个包含两者全部要素的新图层。

5. SpatialJoin 函数:用于根据空间关系将两个图层或要素类连接在一起,生成一个包含连接结果的新图层。

6. CalculateField 函数:用于在属性表中计算字段的值,可以执行各种数学运算、文本处理、逻辑判断等操作。

7. SelectByAttribute 函数:用于根据指定的属性条件选择要素,生成一个包含符合条件要素的新图层。

8. Near 函数:用于计算每个要素与最近邻要素之间的距离和其他属性信息,可以用来分析空间接近程度等。

这只是一小部分 ArcGIS 中可用的函数示例,实际上还有很多其他函数和工具可供使用,以满足不同的地理数据处理和分析需求。具体的函数和工具使用方法可以参考 ArcGIS 软件的帮助文档或相关的教程和文档资源。

五、ArcGis入门教程,如何学习ArcGis?

1.一、选择一套系统的教程,快速入门1、对于ArcGIS初学者来说,不建议自己在网上漫无边际的去找资料学习,对于网上那些杂乱的教程,除非你的ArcGIS水平达到一定程度,随便看到一个视频教程,你能快速的找到自己所要的东西。而对于初学者来说,那些教程使初学者这里学一下那里学一下,是非常困难快速入门的,而且还浪费大量的时间和精力。2、开始学习,在没有任何基础的情况下,我使用的教程是《10天精通ArcGIS教程》,这套教程对于ArcGIS的学习帮助是很大的,都是视频教程包含理论和实践视频都讲的很清楚。对于软件的学习,不建议大家购买书籍教程,软件重在操作和实践,掌握其各个板块的用法很重要,而不是像书籍教程那样大量的纸上谈兵,一接触到软件本身,就顿时一无所知。

2.二、合理应用帮助文档ArcGIS帮助文档对我们的学习是很有帮助的,我们在学习过程中,除了仔细掌握视频里面的内容,要合理的去独自思考,ArcGIS从版本10开始,软件中增加了大量的练习数据,而且在帮助文档中也有相关的操作介绍。这些包括基础的功能和综合案例。我们如果结合这些数据勤加练习,那么自己的软件操作能力一定会大幅度的提升。同时,我们如果遇到操作方面的不懂之处,也可以多查看帮助文档。

3.三、明确学习目标对ArcGIS的学习绝大部分的人都是从ArcMap这个软件下手的(准确来说甚至就是ArcGIS Desktop 的ArcInfo【ArcInfo是在Desktop中的角色类似于win7中的ultimate】),或者也是老师的安排吧,不少同学都只顾着看老师给的PPT或PDF教程,或者也会Google一下、论坛走一趟,这些都不错。但有一些关于ArcGIS更全面的教程和学习资源却很少关注,即使你已经安装了那些东西在你的电脑中。其实如果你能早点利用好这些资源,你对GIS的学习才能为以后更有深度打下及时的基础。

4.四、掌握学习方法跟着视频,系统,计划的学习是你在短时间内掌握ArcGIS的根本。

六、arcgis初学者:如何用arcgis画图?

1.我们首先要做的就是创建图层,用来储存我们将要画出来的点、线、面等信息。

2.打开ArcCatalog后,在下面的窗口中选择我们需要储存的位置。我选择的是D盘下的arcgis学习文件夹,所以左边就选择这个。

3.选择创建图层后,就有一个下拉菜单,能够选择你要创建点、线、面图层。我这里先选择一个线图层来进行讲解。在下拉菜单中选择线(即polyline)选项,然后选择你需要的坐标系,点击Edit按钮,我现在选用的是西安80坐标,选择Select按钮,下面选择平面坐标(Projected Coordinate Systems)\高斯克吕格(Gauss Kruger)\西安80(Xian 1980)\Xian 1980 GK CM 99E 。这里只是为了方便选择的坐标系,而在实际生产过程中,需选择需要的坐标系统。

4.然后打开Arcmap,将刚才创建好的图层添加进去。接着打开编辑,如果菜单栏中没有编辑按钮,可以自己添加,在菜单栏处右键,找到editor打勾,这样就会出现编辑工具栏了,然后打开Editor下拉菜单,选择Start Editing。

5.现在,你就可以在窗口中画出自己需要的线条了。左键画出节点,画完后按F2键完成线条。画完记得要选择保存,Editor下的Save Editing。

七、arcgis pro和arcgis有什么区别?

你说的arcgis应该就是arcmap,他两的区别有:

1、pro是64位,arcmap是32位

2、pro是二三维一体化的,arcmap系列的三维很难用,也差不多淘汰了。

3、如果跟服务结合,一般pro是配protal,而arcmap是配arcgis server,pro可以发布三维服务,arcmap基本不行。

4、pro对硬件要求比较高,如果硬件一般,用起来比较难受。而arcmap现在应该只要是电脑都能跑的比较流畅。

5、pro是arcmap的替代品,10.5之后arcmap基本不更新了,只修复bug,但pro一直在更新,一些新功能,比如矢量切片,创建slpk等只在pro中有。

总结,如果新学arcgis系列,建议直接学pro,arcmap迟早会被替代,但pro现在貌似没破解版,可以申请使用版,或者购买个人许可搭配arcgis online使用,挺好的,个人许可价格应该是900+ 每年,可以考虑跟同学合买。

八、ArcGIS入门教程,ArcGIS图框的制作?

1、首先打开一个arcgis工程文件。

2、在视图窗口左下方有两个小按钮,一个为数据视图,一个为布局视图,平时操作的时候都为数据视图模式。现在我们点击第二个按钮“布局视图”。

3、可以看到图框大小不适合图片大小,需要更改。

4、点击左上角的“file”“page and print setup”。

5、在出现的窗口中,去掉第一个箭头所指的前面的对勾,然后修改图框大小。

6、可以看到图框大小已经修改,用鼠标点击小方框进行调整。

7、选中图框右击鼠标,点击如下图所示,让图框居中。

8、这样就完成了图框。

九、arcgis和arcgis pro有什么区别?

关于这个问题,ArcGIS和ArcGIS Pro都是由Esri公司开发的GIS(地理信息系统)软件。以下是它们之间的主要区别:

1. 用户界面:ArcGIS Pro具有现代化的用户界面,与传统的ArcGIS Desktop相比更直观、易于使用。它采用了Ribbon界面,类似于Microsoft Office软件,使用户能够更轻松地访问和使用各种工具和功能。

2. 功能和工具:ArcGIS Pro在功能和工具方面比ArcGIS Desktop更强大和先进。ArcGIS Pro引入了新的功能和工具,如3D编辑、地图制作、网络分析等,并提供了更好的性能和处理速度。

3. 多线程处理:ArcGIS Pro可以利用多线程处理,从而提高了处理速度和效率。这使得用户能够更快地完成复杂的GIS分析和处理任务。

4. 支持的数据类型:ArcGIS Pro支持更多的数据类型,包括3D数据、点云数据和图像数据等。它还提供了更多的数据分析和处理选项,使用户能够更好地处理和分析不同类型的地理数据。

5. 项目组织:ArcGIS Pro使用项目文件(.aprx)来组织和管理地理数据、地图、工具箱和其他资源。这种项目组织方式比ArcGIS Desktop中的地理数据库和地理信息文档更灵活和方便。

6. 平台集成:ArcGIS Pro更好地集成了Esri公司的其他产品和平台,如ArcGIS Online和ArcGIS Enterprise。这使得用户能够更方便地共享、发布和访问地理数据和地图,并与其他用户进行协作和交流。

总体而言,ArcGIS Pro是Esri公司在ArcGIS Desktop基础上进行了全面升级和改进的下一代GIS软件,提供了更强大、更先进的功能和工具,以及更现代化、更直观的用户界面。

十、mahout面试题?

之前看了Mahout官方示例 20news 的调用实现;于是想根据示例的流程实现其他例子。网上看到了一个关于天气适不适合打羽毛球的例子。

训练数据:

Day Outlook Temperature Humidity Wind PlayTennis

D1 Sunny Hot High Weak No

D2 Sunny Hot High Strong No

D3 Overcast Hot High Weak Yes

D4 Rain Mild High Weak Yes

D5 Rain Cool Normal Weak Yes

D6 Rain Cool Normal Strong No

D7 Overcast Cool Normal Strong Yes

D8 Sunny Mild High Weak No

D9 Sunny Cool Normal Weak Yes

D10 Rain Mild Normal Weak Yes

D11 Sunny Mild Normal Strong Yes

D12 Overcast Mild High Strong Yes

D13 Overcast Hot Normal Weak Yes

D14 Rain Mild High Strong No

检测数据:

sunny,hot,high,weak

结果:

Yes=》 0.007039

No=》 0.027418

于是使用Java代码调用Mahout的工具类实现分类。

基本思想:

1. 构造分类数据。

2. 使用Mahout工具类进行训练,得到训练模型。

3。将要检测数据转换成vector数据。

4. 分类器对vector数据进行分类。

接下来贴下我的代码实现=》

1. 构造分类数据:

在hdfs主要创建一个文件夹路径 /zhoujainfeng/playtennis/input 并将分类文件夹 no 和 yes 的数据传到hdfs上面。

数据文件格式,如D1文件内容: Sunny Hot High Weak

2. 使用Mahout工具类进行训练,得到训练模型。

3。将要检测数据转换成vector数据。

4. 分类器对vector数据进行分类。

这三步,代码我就一次全贴出来;主要是两个类 PlayTennis1 和 BayesCheckData = =》

package myTesting.bayes;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.fs.FileSystem;

import org.apache.hadoop.fs.Path;

import org.apache.hadoop.util.ToolRunner;

import org.apache.mahout.classifier.naivebayes.training.TrainNaiveBayesJob;

import org.apache.mahout.text.SequenceFilesFromDirectory;

import org.apache.mahout.vectorizer.SparseVectorsFromSequenceFiles;

public class PlayTennis1 {

private static final String WORK_DIR = "hdfs://192.168.9.72:9000/zhoujianfeng/playtennis";

/*

* 测试代码

*/

public static void main(String[] args) {

//将训练数据转换成 vector数据

makeTrainVector();

//产生训练模型

makeModel(false);

//测试检测数据

BayesCheckData.printResult();

}

public static void makeCheckVector(){

//将测试数据转换成序列化文件

try {

Configuration conf = new Configuration();

conf.addResource(new Path("/usr/local/hadoop/conf/core-site.xml"));

String input = WORK_DIR+Path.SEPARATOR+"testinput";

String output = WORK_DIR+Path.SEPARATOR+"tennis-test-seq";

Path in = new Path(input);

Path out = new Path(output);

FileSystem fs = FileSystem.get(conf);

if(fs.exists(in)){

if(fs.exists(out)){

//boolean参数是,是否递归删除的意思

fs.delete(out, true);

}

SequenceFilesFromDirectory sffd = new SequenceFilesFromDirectory();

String[] params = new String[]{"-i",input,"-o",output,"-ow"};

ToolRunner.run(sffd, params);

}

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

System.out.println("文件序列化失败!");

System.exit(1);

}

//将序列化文件转换成向量文件

try {

Configuration conf = new Configuration();

conf.addResource(new Path("/usr/local/hadoop/conf/core-site.xml"));

String input = WORK_DIR+Path.SEPARATOR+"tennis-test-seq";

String output = WORK_DIR+Path.SEPARATOR+"tennis-test-vectors";

Path in = new Path(input);

Path out = new Path(output);

FileSystem fs = FileSystem.get(conf);

if(fs.exists(in)){

if(fs.exists(out)){

//boolean参数是,是否递归删除的意思

fs.delete(out, true);

}

SparseVectorsFromSequenceFiles svfsf = new SparseVectorsFromSequenceFiles();

String[] params = new String[]{"-i",input,"-o",output,"-lnorm","-nv","-wt","tfidf"};

ToolRunner.run(svfsf, params);

}

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

System.out.println("序列化文件转换成向量失败!");

System.out.println(2);

}

}

public static void makeTrainVector(){

//将测试数据转换成序列化文件

try {

Configuration conf = new Configuration();

conf.addResource(new Path("/usr/local/hadoop/conf/core-site.xml"));

String input = WORK_DIR+Path.SEPARATOR+"input";

String output = WORK_DIR+Path.SEPARATOR+"tennis-seq";

Path in = new Path(input);

Path out = new Path(output);

FileSystem fs = FileSystem.get(conf);

if(fs.exists(in)){

if(fs.exists(out)){

//boolean参数是,是否递归删除的意思

fs.delete(out, true);

}

SequenceFilesFromDirectory sffd = new SequenceFilesFromDirectory();

String[] params = new String[]{"-i",input,"-o",output,"-ow"};

ToolRunner.run(sffd, params);

}

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

System.out.println("文件序列化失败!");

System.exit(1);

}

//将序列化文件转换成向量文件

try {

Configuration conf = new Configuration();

conf.addResource(new Path("/usr/local/hadoop/conf/core-site.xml"));

String input = WORK_DIR+Path.SEPARATOR+"tennis-seq";

String output = WORK_DIR+Path.SEPARATOR+"tennis-vectors";

Path in = new Path(input);

Path out = new Path(output);

FileSystem fs = FileSystem.get(conf);

if(fs.exists(in)){

if(fs.exists(out)){

//boolean参数是,是否递归删除的意思

fs.delete(out, true);

}

SparseVectorsFromSequenceFiles svfsf = new SparseVectorsFromSequenceFiles();

String[] params = new String[]{"-i",input,"-o",output,"-lnorm","-nv","-wt","tfidf"};

ToolRunner.run(svfsf, params);

}

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

System.out.println("序列化文件转换成向量失败!");

System.out.println(2);

}

}

public static void makeModel(boolean completelyNB){

try {

Configuration conf = new Configuration();

conf.addResource(new Path("/usr/local/hadoop/conf/core-site.xml"));

String input = WORK_DIR+Path.SEPARATOR+"tennis-vectors"+Path.SEPARATOR+"tfidf-vectors";

String model = WORK_DIR+Path.SEPARATOR+"model";

String labelindex = WORK_DIR+Path.SEPARATOR+"labelindex";

Path in = new Path(input);

Path out = new Path(model);

Path label = new Path(labelindex);

FileSystem fs = FileSystem.get(conf);

if(fs.exists(in)){

if(fs.exists(out)){

//boolean参数是,是否递归删除的意思

fs.delete(out, true);

}

if(fs.exists(label)){

//boolean参数是,是否递归删除的意思

fs.delete(label, true);

}

TrainNaiveBayesJob tnbj = new TrainNaiveBayesJob();

String[] params =null;

if(completelyNB){

params = new String[]{"-i",input,"-el","-o",model,"-li",labelindex,"-ow","-c"};

}else{

params = new String[]{"-i",input,"-el","-o",model,"-li",labelindex,"-ow"};

}

ToolRunner.run(tnbj, params);

}

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

System.out.println("生成训练模型失败!");

System.exit(3);

}

}

}

package myTesting.bayes;

import java.io.IOException;

import java.util.HashMap;

import java.util.Map;

import org.apache.commons.lang.StringUtils;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.fs.Path;

import org.apache.hadoop.fs.PathFilter;

import org.apache.hadoop.io.IntWritable;

import org.apache.hadoop.io.LongWritable;

import org.apache.hadoop.io.Text;

import org.apache.mahout.classifier.naivebayes.BayesUtils;

import org.apache.mahout.classifier.naivebayes.NaiveBayesModel;

import org.apache.mahout.classifier.naivebayes.StandardNaiveBayesClassifier;

import org.apache.mahout.common.Pair;

import org.apache.mahout.common.iterator.sequencefile.PathType;

import org.apache.mahout.common.iterator.sequencefile.SequenceFileDirIterable;

import org.apache.mahout.math.RandomAccessSparseVector;

import org.apache.mahout.math.Vector;

import org.apache.mahout.math.Vector.Element;

import org.apache.mahout.vectorizer.TFIDF;

import com.google.common.collect.ConcurrentHashMultiset;

import com.google.common.collect.Multiset;

public class BayesCheckData {

private static StandardNaiveBayesClassifier classifier;

private static Map<String, Integer> dictionary;

private static Map<Integer, Long> documentFrequency;

private static Map<Integer, String> labelIndex;

public void init(Configuration conf){

try {

String modelPath = "/zhoujianfeng/playtennis/model";

String dictionaryPath = "/zhoujianfeng/playtennis/tennis-vectors/dictionary.file-0";

String documentFrequencyPath = "/zhoujianfeng/playtennis/tennis-vectors/df-count";

String labelIndexPath = "/zhoujianfeng/playtennis/labelindex";

dictionary = readDictionnary(conf, new Path(dictionaryPath));

documentFrequency = readDocumentFrequency(conf, new Path(documentFrequencyPath));

labelIndex = BayesUtils.readLabelIndex(conf, new Path(labelIndexPath));

NaiveBayesModel model = NaiveBayesModel.materialize(new Path(modelPath), conf);

classifier = new StandardNaiveBayesClassifier(model);

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

System.out.println("检测数据构造成vectors初始化时报错。。。。");

System.exit(4);

}

}

/**

* 加载字典文件,Key: TermValue; Value:TermID

* @param conf

* @param dictionnaryDir

* @return

*/

private static Map<String, Integer> readDictionnary(Configuration conf, Path dictionnaryDir) {

Map<String, Integer> dictionnary = new HashMap<String, Integer>();

PathFilter filter = new PathFilter() {

@Override

public boolean accept(Path path) {

String name = path.getName();

return name.startsWith("dictionary.file");

}

};

for (Pair<Text, IntWritable> pair : new SequenceFileDirIterable<Text, IntWritable>(dictionnaryDir, PathType.LIST, filter, conf)) {

dictionnary.put(pair.getFirst().toString(), pair.getSecond().get());

}

return dictionnary;

}

/**

* 加载df-count目录下TermDoc频率文件,Key: TermID; Value:DocFreq

* @param conf

* @param dictionnaryDir

* @return

*/

private static Map<Integer, Long> readDocumentFrequency(Configuration conf, Path documentFrequencyDir) {

Map<Integer, Long> documentFrequency = new HashMap<Integer, Long>();

PathFilter filter = new PathFilter() {

@Override

public boolean accept(Path path) {

return path.getName().startsWith("part-r");

}

};

for (Pair<IntWritable, LongWritable> pair : new SequenceFileDirIterable<IntWritable, LongWritable>(documentFrequencyDir, PathType.LIST, filter, conf)) {

documentFrequency.put(pair.getFirst().get(), pair.getSecond().get());

}

return documentFrequency;

}

public static String getCheckResult(){

Configuration conf = new Configuration();

conf.addResource(new Path("/usr/local/hadoop/conf/core-site.xml"));

String classify = "NaN";

BayesCheckData cdv = new BayesCheckData();

cdv.init(conf);

System.out.println("init done...............");

Vector vector = new RandomAccessSparseVector(10000);

TFIDF tfidf = new TFIDF();

//sunny,hot,high,weak

Multiset<String> words = ConcurrentHashMultiset.create();

words.add("sunny",1);

words.add("hot",1);

words.add("high",1);

words.add("weak",1);

int documentCount = documentFrequency.get(-1).intValue(); // key=-1时表示总文档数

for (Multiset.Entry<String> entry : words.entrySet()) {

String word = entry.getElement();

int count = entry.getCount();

Integer wordId = dictionary.get(word); // 需要从dictionary.file-0文件(tf-vector)下得到wordID,

if (StringUtils.isEmpty(wordId.toString())){

continue;

}

if (documentFrequency.get(wordId) == null){

continue;

}

Long freq = documentFrequency.get(wordId);

double tfIdfValue = tfidf.calculate(count, freq.intValue(), 1, documentCount);

vector.setQuick(wordId, tfIdfValue);

}

// 利用贝叶斯算法开始分类,并提取得分最好的分类label

Vector resultVector = classifier.classifyFull(vector);

double bestScore = -Double.MAX_VALUE;

int bestCategoryId = -1;

for(Element element: resultVector.all()) {

int categoryId = element.index();

double score = element.get();

System.out.println("categoryId:"+categoryId+" score:"+score);

if (score > bestScore) {

bestScore = score;

bestCategoryId = categoryId;

}

}

classify = labelIndex.get(bestCategoryId)+"(categoryId="+bestCategoryId+")";

return classify;

}

public static void printResult(){

System.out.println("检测所属类别是:"+getCheckResult());

}

}

相关资讯
热门频道

Copyright © 2024 招聘街 滇ICP备2024020316号-38