使用POI数据挖掘区域功能并在网页端显示
最近在做一个创新项目,其中包含区域功能挖掘的部分。前期我们使用了路网数据对上海市进行了区域的划分,并为每个POI加上了所属的区域标签。之后便使用此数据进行区域功能挖掘部分的展示。
一。使用TF_IDF算法挖掘出每个区域对应的功能,此处我们分了六大功能,分别是住宅,工作,教育,商业,公共服务,景点
有如下几个子步骤
(1)根据poi的三级目录将poi数据划分到六种poi类别
(2)统计TF_IDF算法使用到的中间结果
(3)
使用TF_IDF挖掘出每个区域的功能,并记录相关结果
代码如下
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
/*
* poi.csv 原始经处理的poi,而且已经加上了区域编号,式例如下图
* "241076","永生餐饮","121.603927","31.235058","餐饮服务;中餐厅;中餐厅","275"
*
* 将操作合并起来,包括向poi中添加类,保留统计中间结果到result.txt
* 和计算TF_IDF大小,并最终得到每个区域的功能,
*
* poiRange.csv 提取有用的信息(名称,经度,纬度,poi类别,所属区域)
* result.txt(各个poi类别的数量,每个区域含有的poi数量)
* TF_IDF1/2.txt 记录两种IDF算法产生的TF_IDF大小
* function1/2.txt 记录两种算法分别对应的每种功能区的区域数量
* 每个功能区包含的区域编号存储在poi_label.txt文件中
*/
public class POI_Func {
public static String [][] CC;//代表class的数量
public static String [][] CC2;//代表SecondClass的数量
public static int ccc=0;
public static int getPoiClass(String type) {
int num=-1;
int flag=0;
for (int i = 0; i < CC.length; i++) {
if (flag==1) {
flag=0;
break;
}
for (int j = 0; j < CC[i].length; j++) {
if (CC[i][j]==null) {
break;
}
else if(CC[i][j].equals(type)){
num=i;
flag=1;
break;
}
}
}
return num;
}
public static int getSecondPoi(String type) {
int num=-1;
int flag=0;
for (int i = 0; i < CC2.length; i++) {
if (flag==1) {
flag=0;
break;
}
for (int j = 1; j < CC2[i].length; j++) {
if (CC2[i][j]==null) {
break;
}
else if(CC2[i][j].equals(type)){
num=Integer.parseInt(CC2[i][0]);
ccc++;
flag=1;
break;
}
}
}
return num;
}
public static void main(String[] args) throws IOException{
// TODO Auto-generated method stub
/*第一步:对原始数据poi.csv添加class.txt 中的poi类别,提取有用信息,
并将结果保存在poiRange.csv文件中*/
String path1 = "class5.txt";
String path2 = "poi.csv";
String path3 = "poiRange.csv";
String path4="result.txt";
int classLength=6;//记录poi类别的数量
int secondLength=3;//记录第二级目录的分类
int bigClass=19;//大类的数量
int secondClass=11;
int rangeNum=542;
String[] d1=null;
String[] d2=null;
String line=null;
String line2=&#