大數據分析的前瞻性使得很多公司以及企業都開始使用大數據分析對公司的決策做出幫助,而大數據分析是去分析海量的數據,所以就不得不藉助一些工具去分析大數據,。一般來說,數據分析工作中都是有很多層次的,這些層次分別是數據存儲層、數據報表層、數據分析層、數據展現層。對於不同的層次是有不同的工具進行工作的。下面小編就對大數據分析工具給大家好好介紹一下。
首先我們從數據存儲來講數據分析的工具。我們在分析數據的時候首先需要存儲數據,數據的存儲是一個非常重要的事情,如果懂得資料庫技術,並且能夠操作好資料庫技術,這就能夠提高數據分析的效率。而數據存儲的工具主要是以下的工具。
1、MySQL資料庫,這個對於部門級或者互聯網的資料庫應用是必要的,這個時候關鍵掌握資料庫的庫結構和SQL語言的數據查詢能力。
2、SQL Server的最新版本,對中小企業,一些大型企業也可以採用SQL Server資料庫,其實這個時候本身除了數據存儲,也包括了數據報表和數據分析了,甚至數據挖掘工具都在其中了。
3、DB2,Oracle資料庫都是大型資料庫了,主要是企業級,特別是大型企業或者對數據海量存儲需求的就是必須的了,一般大型資料庫公司都提供非常好的數據整合應用平台;
接著說數據報表層。一般來說,當企業存儲了數據後,首先要解決報表的問題。解決報表的問題才能夠正確的分析好資料庫。關於數據報表所用到的數據分析工具就是以下的工具。
1、Crystal Report水晶報表,Bill報表,這都是全球最流行的報表工具,非常規范的報表設計思想,早期商業智能其實大部分人的理解就是報表系統,不藉助IT技術人員就可以獲取企業各種信息——報表。
2、Tableau軟體,這個軟體是近年來非常棒的一個軟體,當然它已經不是單純的數據報表軟體了,而是更為可視化的數據分析軟體,因為很多人經常用它來從資料庫中進行報表和可視化分析。
第三說的是數據分析層。這個層其實有很多分析工具,當然我們最常用的就是Excel,我經常用的就是統計分析和數據挖掘工具;
1、Excel軟體,首先版本越高越好用這是肯定的;當然對Excel來講很多人只是掌握了5%Excel功能,Excel功能非常強大,甚至可以完成所有的統計分析工作!但是我也常說,有能力把Excel玩成統計工具不如專門學會統計軟體;
2、SPSS軟體:當前版本是18,名字也改成了PASW Statistics;我從3.0開始Dos環境下編程分析,到現在版本的變遷也可以看出SPSS社會科學統計軟體包的變化,從重視醫學、化學等開始越來越重視商業分析,現在已經成為了預測分析軟體。
最後說表現層的軟體。一般來說表現層的軟體都是很實用的工具。表現層的軟體就是下面提到的內容。
1、PowerPoint軟體:大部分人都是用PPT寫報告。
2、Visio、SmartDraw軟體:這些都是非常好用的流程圖、營銷圖表、地圖等,而且從這里可以得到很多零件;
3、Swiff Chart軟體:製作圖表的軟體,生成的是Flash
dom4j可以試試,不知道你的數據量有多大,如果太大的話,我沒試過
xml文件是有規律的,可以把要導出的數據構造一下,
我有個簡單的代碼,在這分享一下,希望對LZ有用
package com.test.xml;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
public class Dom4JXML {
public void createXML() {
//用工廠類創建一個document實例
Document doc = DocumentHelper.createDocument();
//創建根元素emps
Element rootEle = doc.addElement("emps");
//添加註釋
rootEle.addComment("這是一個dom4j生成的xml文件");
//emps根節點下創建一個emp節點
Element empEle = rootEle.addElement("emp");
//emp添加屬性id="1"
empEle.addAttribute("id", "1");
//emp節點下創建一個name節點
Element nameEle = empEle.addElement("name");
//name節點下創建一個文本節點zhangsan
nameEle.setText("zhangsan");
//再為name節點創建一個兄弟節點
Element sexEle = empEle.addElement("sex");
sexEle.setText("man");
//將document中的內容寫入文件中
try {
Writer out = new FileWriter("F:\\emps.xml");
//格式化輸出,類型IE瀏覽一樣
OutputFormat format = OutputFormat.createPrettyPrint();
//OutputFormat format = OutputFormat.createCompactFormat();
format.setEncoding("UTF-8");
//創建寫出對象
XMLWriter writer = new XMLWriter(out,format);
writer.write(doc);
writer.close();
System.out.println("生成emps.xml成功。");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("失敗了。");
}
}
public static void main(String[] args) {
new Dom4JXML().createXML();
}
}
③ 如何用ReadXml和WriteXml將xml的數據讀取到DataSet中請高手幫幫忙~~~
使用DataSet的ReadXml方法填充DataSet,從文件、流或XmlReader中進行讀取。根據所指定的XmlReadMode以及關系架構是否已存在,ReadXml方法讀取XML流或文檔的內容並將數據載入到DataSet中:
DataSet dataSet = new DataSet();
dataSet.ReadXml("input.xml", XmlReadMode.ReadSchema);
如果DataSet已經包含數據,會向已存在於DataSet中的數據添加XML中的新數據。ReadXml不會從XML向DataSet中並入任何具有匹配主鍵的行信息。若要使用XML中的新信息重寫現有行信息,使用ReadXml創建一個新的DataSet,然後使用Merge將新DataSet並入現有DataSet。注意,如果使用XmlReadMode為DiffGram的ReadXML來載入DiffGram,將合並具有相同唯一標識符的行。
使用DataReader中的XML列值,SQL Server2008支持新的xml數據類型,開發人員可以使用SqlCommand類的標准行為檢索類型的結果集。xml列可以像任意列一樣進行檢索,例如檢索到SqlDataReader中,但要以XML的形式使用列內容,必須使用XmlReader。
若要將DataSet寫入文件、流或XmlWriter,使用WriteXml方法。向WriteXml傳遞的第一個參數為XML輸出的目標。例如,傳遞包含文件名的字元串、System.IO.TextWriter對象等。可以傳遞XmlWriteMode的另一個可選參數來指定如何編寫XML輸出。
下面是兩行將DataSet的XML表示形式寫入文件的代碼。第一行代碼將生成的XML文件名當作字元串傳遞到WriteXml。第二行代碼傳遞一個StreamWriter對象。
custDS.WriteXml("Customers.xml", XmlWriteMode.WriteSchema);
System.IO.StreamWriter xmlSW = new System.IO.StreamWriter("Customers.xml");
custDS.WriteXml(xmlSW, XmlWriteMode.WriteSchema);
xmlSW.Close();
下表描述XmlReadMode參數的選項。這里無法插入表,具體是
Auto:這是默認設置。檢查XML並選擇最適合的選項。
ReadSchema: 讀取內聯架構並載入數據和架構。
IgnoreSchema: 忽略任何內聯架構並將數據載入到現有的DataSet架構中。
InferSchema: 忽略任何內聯架構並按照XML數據的結構推斷架構,然後載入數據。
DiffGram: 讀取DiffGram並將數據添加到當前架構中。DiffGram會將新行和唯一標識符值匹配的現有行合並。
Fragment: 持續讀取多個XML片斷,直至到達流的末尾。與DataSet架構匹配的片斷會追加到相應的表。與DataSet架構不匹配的片斷將被丟棄。
④ (在線等)c#讀取xml速度問題解決方案
你就是要找ProctCode為某值的所有Table?
把你的xpath改一下,一條查詢就出來了
XmlNodeList tableList = doc.SelectNodes(string.Format("//ProctCode[text()='{0}']/parent::Table",TxtProctCode.Text));
然後遍歷tableList取值就行了
如果數據量很大的話,用XPathDocument可以提高查詢速度
====================================
"//ProctCode[text()='{0}']/parent::Table"
這條查詢的意思查找任意(//)ProctCode節點,要求節點的text()返回值也就是innerText為{0},找到之後取他的父(parent)Table節點.
這樣查詢出來的node集合就是所有你需要的節點,不用再作判斷,直接取出放進你的DataTable就行了
⑤ 請教xml大數據量傳輸的問題
你可以使用epoll模型來代替線程進程,然後將需要傳輸的數據拆分成多個部分,同時處回理。數據發送前可以做答簡單的壓縮以加快傳輸速度,數據處理和數據發送的epoll子程一定要分開。epoll支持多CPU,能夠大大加快處理速度。
雙網卡是下層的問題,和你使用怎樣的編程方式無關,你也不用管,系統會自動為你的網路程序分配網卡資源。你起了多線程之後,用linux命令查看當前網路流量利用了多少就可以。如果沒有完全利用到,再增加網卡也於事無補。
至於交換機,與其用兩個,倒不如換用一個速度更快的。不過據我的經驗,網路程序,瓶頸往往在電腦而不在交換機。
控制數據如果很重要但是量又不大,最好用TCP傳輸,畢竟你區域網,說白了TCP效率能拖累你多少。單獨起TCP處理控制數據,一般的網路程序比較常用這種方式。
至於傳輸的數據,如果確實需要UDP傳輸,建議你到網上搜集一些冗餘傳輸演算法,這些演算法能滿足你在使用UDP的同時,不丟失數據,不過就我個人的經驗,在區域網里,UDP比TCP,在數據傳輸速度的提升很有限。
⑥ 打開excel出現災難性錯誤並提示內存溢出的解決方法
POI的誕生解決了Excel的解析難題(POI即「討厭的電子表格」),但如果用不好POI,也會導致程序出現一些BUG,例如內存溢出,假空行,公式等等問題。下面介紹一種解決POI讀取Excel內存溢出的問題。
POI讀取Excel有兩種模式,一種是用戶模式,一種是SAX模式,將xlsx格式的文檔轉換成CVS格式後再進行處理用戶模式相信大家都很清楚,也是POI常用的方式,用戶模式API介面豐富,我們可以很容易的使用POI的API讀取Excel,但用戶模式消耗的內存很大,當遇到很多sheet、大數據網格、假空行、公式等問題時,很容易導致內存溢出。POI官方推薦解決內存溢出的方式使用CVS格式解析,我們不可能手工將Excel文件轉換成CVS格式再上傳,這樣做太麻煩了,好再POI給出了xlsx轉換CVS的例子,基於這個例子進行了一下改造,即可解決用戶模式讀取Excel內存溢出的問題。下面附上代碼:
[java] view plain
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding right ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
==================================================================== */
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.openxml4j.exceptions.OpenXML4JException;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.openxml4j.opc.PackageAccess;
import org.apache.poi.ss.usermodel.BuiltinFormats;
import org.apache.poi.ss.usermodel.DataFormatter;
import org.apache.poi.xssf.eventusermodel.ReadOnlySharedStringsTable;
import org.apache.poi.xssf.eventusermodel.XSSFReader;
import org.apache.poi.xssf.model.StylesTable;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFRichTextString;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
/**
* 使用CVS模式解決XLSX文件,可以有效解決用戶模式內存溢出的問題
* 該模式是POI官方推薦的讀取大數據的模式,在用戶模式下,數據量較大、Sheet較多、或者是有很多無用的空行的情況
* ,容易出現內存溢出,用戶模式讀取Excel的典型代碼如下: FileInputStream file=new
* FileInputStream("c:\\test.xlsx"); Workbook wb=new XSSFWorkbook(file);
*
*
* @author 山人
*/
public class XLSXCovertCSVReader {
/**
* The type of the data value is indicated by an attribute on the cell. The
* value is usually in a "v" element within the cell.
*/
enum xssfDataType {
BOOL, ERROR, FORMULA, INLINESTR, SSTINDEX, NUMBER,
}
/**
* 使用xssf_sax_API處理Excel,請參考: http://poi.apache.org/spreadsheet/how-to.html#xssf_sax_api
* <p/>
* Also see Standard ECMA-376, 1st edition, part 4, pages 1928ff, at
* http://www.ecma-international.org/publications/standards/Ecma-376.htm
* <p/>
* A web-friendly version is http://openiso.org/Ecma/376/Part4
*/
class MyXSSFSheetHandler extends DefaultHandler {
/**
* Table with styles
*/
private StylesTable stylesTable;
/**
* Table with unique strings
*/
private ReadOnlySharedStringsTable sharedStringsTable;
/**
* Destination for data
*/
private final PrintStream output;
/**
* Number of columns to read starting with leftmost
*/
private final int minColumnCount;
// Set when V start element is seen
private boolean vIsOpen;
// Set when cell start element is seen;
// used when cell close element is seen.
private xssfDataType nextDataType;
// Used to format numeric cell values.
private short formatIndex;
private String formatString;
private final DataFormatter formatter;
private int thisColumn = -1;
// The last column printed to the output stream
private int lastColumnNumber = -1;
// Gathers characters as they are seen.
private StringBuffer value;
private String[] record;
private List<String[]> rows = new ArrayList<String[]>();
private boolean isCellNull = false;
/**
* Accepts objects needed while parsing.
*
* @param styles
* Table of styles
* @param strings
* Table of shared strings
* @param cols
* Minimum number of columns to show
* @param target
* Sink for output
*/
public MyXSSFSheetHandler(StylesTable styles,
ReadOnlySharedStringsTable strings, int cols, PrintStream target) {
this.stylesTable = styles;
this.sharedStringsTable = strings;
this.minColumnCount = cols;
this.output = target;
this.value = new StringBuffer();
this.nextDataType = xssfDataType.NUMBER;
this.formatter = new DataFormatter();
record = new String[this.minColumnCount];
rows.clear();// 每次讀取都清空行集合
}
/*
* (non-Javadoc)
*
* @see
* org.xml.sax.helpers.DefaultHandler#startElement(java.lang.String,
* java.lang.String, java.lang.String, org.xml.sax.Attributes)
*/
public void startElement(String uri, String localName, String name,
Attributes attributes) throws SAXException {
if ("inlineStr".equals(name) || "v".equals(name)) {
vIsOpen = true;
// Clear contents cache
value.setLength(0);
}
// c => cell
else if ("c".equals(name)) {
// Get the cell reference
String r = attributes.getValue("r");
int firstDigit = -1;
for (int c = 0; c < r.length(); ++c) {
if (Character.isDigit(r.charAt(c))) {
firstDigit = c;
break;
}
}
thisColumn = nameToColumn(r.substring(0, firstDigit));
// Set up defaults.
this.nextDataType = xssfDataType.NUMBER;
this.formatIndex = -1;
this.formatString = null;
String cellType = attributes.getValue("t");
String cellStyleStr = attributes.getValue("s");
if ("b".equals(cellType))
nextDataType = xssfDataType.BOOL;
else if ("e".equals(cellType))
nextDataType = xssfDataType.ERROR;
else if ("inlineStr".equals(cellType))
nextDataType = xssfDataType.INLINESTR;
else if ("s".equals(cellType))
nextDataType = xssfDataType.SSTINDEX;
else if ("str".equals(cellType))
nextDataType = xssfDataType.FORMULA;
else if (cellStyleStr != null) {
// It's a number, but almost certainly one
// with a special style or format
int styleIndex = Integer.parseInt(cellStyleStr);
XSSFCellStyle style = stylesTable.getStyleAt(styleIndex);
this.formatIndex = style.getDataFormat();
this.formatString = style.getDataFormatString();
if (this.formatString == null)
this.formatString = BuiltinFormats
.getBuiltinFormat(this.formatIndex);
}
}
}
/*
* (non-Javadoc)
*
* @see org.xml.sax.helpers.DefaultHandler#endElement(java.lang.String,
* java.lang.String, java.lang.String)
*/
public void endElement(String uri, String localName, String name)
throws SAXException {
String thisStr = null;
// v => contents of a cell
if ("v".equals(name)) {
// Process the value contents as required.
// Do now, as characters() may be called more than once
switch (nextDataType) {
case BOOL:
char first = value.charAt(0);
thisStr = first == '0' ? "FALSE" : "TRUE";
break;
case ERROR:
thisStr = "\"ERROR:" + value.toString() + '"';
break;
case FORMULA:
// A formula could result in a string value,
// so always add double-quote characters.
thisStr = '"' + value.toString() + '"';
break;
case INLINESTR:
// TODO: have seen an example of this, so it's untested.
XSSFRichTextString rtsi = new XSSFRichTextString(
value.toString());
thisStr = '"' + rtsi.toString() + '"';
break;