`
ybak
  • 浏览: 35430 次
  • 性别: Icon_minigender_1
  • 来自: XX
社区版块
存档分类
最新评论

生成统计成都市商品房成交量的bar chart.

阅读更多

一直想得到成都市的商品房交易数据来进行一些分析。但苦于没有数据来源。这个想法一直被搁浅在那儿。

偶然的机会知道成都市每日的成交量在发布当天的成效数据。



就突发奇想想做一个页面抓取工具,能将每天的成交数据统计分析。可以该网站并不提供历史数据的查询,很是郁闷。

不过偶然的机会又发现另一个网站已经提供了部分历史数据的统计:


虽然通过页面的按钮只能找到10个可用的页面,但通过改变url中的page参数,我们可以找到最多75面的有效数据。


找到数据的来源了,接下来的问题就是如何从页面中抓取到想要的数据了。

这是查看到的相关的页面结构:


想要的信息有两个:1.日期 2.成交套数


一开始我想到的是将页面用DOM解析出来,然后通过xpath来找到想要的数据。

放弃这种的原因有:

  • 并不是所有的网页都采用的是XHtml,很可能会解析出错。
  • 利用现有大多支持XPath,查找HTML的框架都需要先做额外的工作将网页保存起来,才能进行解析,过于麻烦。


在花了些时间后,google到了jsoup这个目前非常流行的parser。
虽然不支持xpath,但它支持类似于jquery的selector来选取内容。而且可以直接通过url来解析网页。

以下是得用jsoup的代码:

 

public class GetHouseStatistics {
    public static void main(String[] args) throws Exception {
        String url = "http://newhouse.cd.soufun.com/house/web/newhouse_news_more.php?type=12193&page=";
        FileWriter writer = new FileWriter(new File("house.data"));
        for (int i = 1; i < 75; i++) {
            Document doc = Jsoup.connect(url + i).timeout(9000).get();
            Elements me = doc.select("[title$=套]");
            System.out.println(me.html());
            writer.append(me.html()+"\n");
        }
        writer.close();
    }
}

 

 

以下是运行得到的结果保存成一个csv文件:

 

市区5月17日商品住宅成交158套
成都市区5月15日商品住宅成交41套
[成都房地产成交量]市区5月11日商品住宅成交182套
[成都房地产成交量]市区5月10日商品住宅成交183套
[成都房地产成交量]市区5月9日商品住宅成交163套
[成都房地产成交量]市区5月8日商品住宅成交53套
[成都房地产成交量]市区5月7日商品住宅成交44套
[成都房地产成交量]市区5月3日商品住宅成交171套
[成都房地产成交量]市区5月2日商品住宅成交31套
[成都房地产成交量]市区5月1日商品住宅成交31套
[成都房地产成交量]市区4月30日商品住宅成交85套
[成都房地产成交量]市区4月29日商品住宅成交219套
[成都房地产成交量]市区4月28日商品住宅成交230套
[成都房地产成交量]市区4月27日商品住宅成交170套
[成都房地产成交量]市区4月25日商品住宅成交92套
[成都房地产成交量]市区4月26日商品住宅成交104套
......

现在需要将日期和成交套数从文件中提取出来生成新的csv文件。

下面是代码:

 

public class Data2CVS {

    public static void main(String[] args) throws Exception {
        BufferedReader bufferedReader = new BufferedReader(new FileReader(new File("house.data")));
        BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(new File("house.cvs")));
        
        int year = 2011;
        String lineData;
        while ((lineData = bufferedReader.readLine()) != null) {
            Pattern p = Pattern.compile("\\d+月\\d+日");
            Matcher m = p.matcher(lineData);
            while (m.find()) {
                String date = m.group().trim();
                bufferedWriter.append(year+"年"+date);
                bufferedWriter.append("\t");
                if(date.equals("01月01日")||date.equals("1月1日")){
                    year--;   
                }
            }

            p = Pattern.compile("\\d+套");
            m = p.matcher(lineData);
            while (m.find()) {
                String date = m.group().replace("套", "");
                bufferedWriter.append(date);
                bufferedWriter.append("\n");
            }
        }
        bufferedReader.close();
        bufferedWriter.close();
    }
}

运行得到的新的CSV文件为:

2011年5月17日	158
2011年5月15日	41
2011年5月11日	182
2011年5月10日	183
2011年5月9日	163
2011年5月8日	53
2011年5月7日	44
2011年5月3日	171
2011年5月2日	31
2011年5月1日	31
2011年4月30日	85
2011年4月29日	219
2011年4月28日	230
2011年4月27日	170
2011年4月25日	92
2011年4月26日	104
2011年4月24日	41
2011年4月23日	62

 

 

得到CSV文件,就可以很方便的利用各种工具来生成图表了。以下是利用WPS报表生成的bar chart:

0
2
分享到:
评论
1 楼 livexu 2011-05-19  

相关推荐

    barChart.vue

    barChart.vue

    mendix.BarChart.mpk

    mendix.BarChart.mpk

    QML+Chart.js 实现图表显示

    `Chart.js`则是一个轻量级的JavaScript库,专门用于创建各种2D图表,如柱状图、饼图、环形图、折线图、极坐标图和雷达图。它以其简单易用的API和良好的性能而受到欢迎。`Chart.js`支持定制图表样式,可以快速地将...

    chart.js-zip

    **Chart.js** 是一款轻量级的JavaScript图表库,它以简单、易用且高效著称,适合快速创建各种类型的动态数据可视化图表。这个压缩包文件"chart.js-zip"包含了一个名为"Chart.js-master"的目录,这通常是Chart.js的...

    Chart.js-master.zip

    3. **丰富的图表类型**:包括线图(Line Chart)、柱状图(Bar Chart)、饼图(Pie Chart)、雷达图(Radar Chart)、极地面积图(Polar Area Chart)和散点图(Doughnut Chart)等,能满足多种数据展示需求。...

    Chart.js演示7种不同的统计图

    Chart.js是一款轻量级的JavaScript库,专门用于创建各种类型的统计图表。这个库以其简单易用、灵活性高和性能优秀而受到开发者的喜爱。在这个"Chart.js演示7种不同的统计图"的资源中,我们可以期待看到Chart.js如何...

    iOS 图表 BarChart.zip

    BarChart项目就是专为iOS平台设计的一个动态组件,它专注于实现条形图,这是一种常见的统计图表类型,常用于比较不同类别的数值。下面将详细探讨BarChart组件的关键知识点以及如何在Objective-C中进行应用。 1. **...

    Javascript图形库 Chart.js.zip

    Chart.js是一款轻量级的JavaScript图形库,它利用HTML5的Canvas元素来绘制各种统计图表,适合快速开发数据可视化的应用程序。这个库以其简单易用、性能高效和高度可定制的特点而受到广泛欢迎。Chart.js支持包括柱状...

    Chart.js-2.5

    Chart.js 是一个轻量级的JavaScript库,专注于创建简单、直观的2D图表。它非常适合初学者和专业人士,因为其API简洁,易于理解和使用。在Chart.js 2.5版本中,我们看到这个库的一些改进和新特性,使得它在前端数据...

    基于Chart.js的折线图例子

    Chart.js是一款轻量级的JavaScript库,它使得创建各种图表变得简单快捷,尤其适合在网页上展示数据。在这个例子中,我们将深入探讨如何利用Chart.js创建折线图,并了解一些关键的注意事项。同时,由于Chart.js的灵活...

    HTML5_Chart.js

    HTML5的Chart.js库是一个轻量级且易于使用的图表绘制工具,它允许开发者在网页上创建各种类型的图表,包括柱状图、折线图、饼图、雷达图等。这个库充分利用了HTML5的Canvas元素,提供了一种简单的方式来动态展示数据...

    基于html5的Chart.js图表js库

    Chart.js是一个轻量级且易于使用的JavaScript库,专为在Web页面上创建动态、美观的数据可视化而设计。它利用HTML5的Canvas元素来绘制各种图表,如条形图、饼图、线形图、雷达图等。这个库的亮点在于其简洁的API,...

    Chart.js-2.7.2 全部资料

    Chart.js 是一款轻量级的JavaScript图表库,专注于提供简单易用、高效的图表绘制功能。在2.7.2版本中,Chart.js带来了许多新特性、优化和改进,使得开发者能够更便捷地创建各种类型的图表,如条形图、饼图、线图等。...

    chart.js 最新版Version 2.7.1(较旧版全新升级)

    Chart.js 是一个轻量级的JavaScript库,专用于创建数据可视化图表。它的最新版本2.7.1相较于旧版有了显著的改进和增强,使得它成为开发者构建动态、交互式图表的理想选择。以下是对Chart.js Version 2.7.1及其主要...

    Chart.js案例

    - **Chart.js**:这个轻量级的库,使用简单的API提供丰富的图表类型,如柱状图、折线图、饼图、环形图和雷达图,适合快速构建数据可视化应用。 2. **主要特性** - **图表类型**:Chart.js支持多种图表类型,包括...

    chart.js 统计图

    Chart.js 是一个轻量级的JavaScript库,专为网页上的数据可视化设计。它允许开发者创建各种统计图表,如柱状图、环形图、曲线图、饼图、极地区域图、雷达图和蛛网图等,以直观地展示数据。由于其简单易用的API和高效...

    Delphi生成Chart柱状图表控件附效果演示.rar

    Delphi7.0源码生成一个柱状图表chart,使用了ntdll.dll,这个直方图表效果如图所示。使用了第三方控件实现的图表制作生成软件,功能比较强大。以下是图表测试源代码:  Chart := TChart.Create(nil);  try  Chart...

    BarChart_src.zip

    《BarChart控件源码解析与应用》 在IT领域,数据可视化是至关重要的,而条形图(Bar Chart)作为最常见且直观的数据展示方式之一,被广泛应用于各种应用程序中。本文将深入探讨名为"BarChart"的控件源码,通过分析`...

Global site tag (gtag.js) - Google Analytics