
C#讀取Excel的三種方式以及比較
(1)OleDB方式
優(yōu)點(diǎn):將Excel直接當(dāng)做數(shù)據(jù)源處理,通過(guò)SQL直接讀取內(nèi)容,讀取速度較快。
缺點(diǎn):讀取數(shù)據(jù)方式不夠靈活,無(wú)法直接讀取某一個(gè)單元格,只有將整個(gè)Sheet頁(yè)讀取出來(lái)后(結(jié)果為Datatable)再在Datatable中根據(jù)行列數(shù)來(lái)獲取指定的值。
當(dāng)Excel數(shù)據(jù)量很大時(shí)。會(huì)非常占用內(nèi)存,當(dāng)內(nèi)存不夠時(shí)會(huì)拋出內(nèi)存溢出的異常。
讀取代碼如下:
1: public DataTable GetExcelTableByOleDB(string strExcelPath, string tableName)
2: {
3: try
4: {
5: DataTable dtExcel = new DataTable();
6: //數(shù)據(jù)表
7: DataSet ds = new DataSet();
8: //獲取文件擴(kuò)展名
9: string strExtension = System.IO.Path.GetExtension(strExcelPath);
10: string strFileName = System.IO.Path.GetFileName(strExcelPath);
11: //Excel的連接
12: OleDbConnection objConn = null;
13: switch (strExtension)
14: {
15: case ".xls":
16: objConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strExcelPath + ";" + "Extended Properties=\"Excel 8.0;HDR=NO;IMEX=1;\"");
17: break;
18: case ".xlsx":
19: objConn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + strExcelPath + ";" + "Extended Properties=\"Excel 12.0;HDR=NO;IMEX=1;\"");
20: break;
21: default:
22: objConn = null;
23: break;
24: }
25: if (objConn == null)
26: {
27: return null;
28: }
29: objConn.Open();
30: //獲取Excel中所有Sheet表的信息
31: //System.Data.DataTable schemaTable = objConn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null);
32: //獲取Excel的第一個(gè)Sheet表名
33: //string tableName = schemaTable.Rows[0][2].ToString().Trim();
34: string strSql = "select * from [" + tableName + "]";
35: //獲取Excel指定Sheet表中的信息
36: OleDbCommand objCmd = new OleDbCommand(strSql, objConn);
37: OleDbDataAdapter myData = new OleDbDataAdapter(strSql, objConn);
38: myData.Fill(ds, tableName);//填充數(shù)據(jù)
39: objConn.Close();
40: //dtExcel即為excel文件中指定表中存儲(chǔ)的信息
41: dtExcel = ds.Tables[tableName];
42: return dtExcel;
43: }
44: catch
45: {
46: return null;
47: }
48: }
下面說(shuō)明一下連接字符串
HDR=Yes,這代表第一行是標(biāo)題,不做為數(shù)據(jù)使用(但是我在實(shí)際使用中,如果第一行存在復(fù)雜數(shù)值,那么讀取得到的Datatable列標(biāo)題會(huì)自動(dòng)設(shè)置為F1、F2等方式命名,與實(shí)際應(yīng)用不符,所以當(dāng)時(shí)是通過(guò)HDR=No方式將所有內(nèi)容讀取到Datatable中,然后手動(dòng)將第一行設(shè)置成標(biāo)題的);IMEX ( IMport EXport mode )設(shè)置
IMEX 有三種模式:
0 is Export mode
1 is Import mode
2 is Linked mode (full update capabilities)
我這里特別要說(shuō)明的就是 IMEX 參數(shù)了,因?yàn)椴煌哪J酱碇煌淖x寫(xiě)行為:
當(dāng) IMEX=0 時(shí)為“匯出模式”,這個(gè)模式開(kāi)啟的 Excel 檔案只能用來(lái)做“寫(xiě)入”用途。
當(dāng) IMEX=1 時(shí)為“匯入模式”,這個(gè)模式開(kāi)啟的 Excel 檔案只能用來(lái)做“讀取”用途。
當(dāng) IMEX=2 時(shí)為“鏈接模式”,這個(gè)模式開(kāi)啟的 Excel 檔案可同時(shí)支援“讀取”與“寫(xiě)入”用途。
---------------------------------
另外,讀取Excel2007版本的文件時(shí),版本應(yīng)該從8.0改為12.0,同時(shí)驅(qū)動(dòng)不能再用Jet,而應(yīng)該用ACE。負(fù)責(zé)會(huì)造成“找不到可安裝的 ISAM”的錯(cuò)誤。
---------------------------------
在網(wǎng)上還發(fā)現(xiàn)采用這種方式存在取出的Sheet表的個(gè)數(shù)多于實(shí)際Excel表中的Sheet表個(gè)數(shù)的情況,其原因有二:
1. 取出的名稱中,包括了XL命名管理器中的名稱(參見(jiàn)XL2007的公式--命名管理器, 快捷鍵Crtl+F3);
2. 取出的名稱中,包括了FilterDatabase后綴的, 這是XL用來(lái)記錄Filter范圍的。
對(duì)于第一點(diǎn)比較簡(jiǎn)單, 刪除已有命名管理器中的內(nèi)容即可;第二點(diǎn)處理起來(lái)比較麻煩, Filter刪除后這些名稱依然保留著,簡(jiǎn)單的做法是新增Sheet然后將原Sheet Copy進(jìn)去。但實(shí)際情況并不能為每個(gè)Excel做以上檢查。下面給出了過(guò)濾的方案。(此問(wèn)題我們有驗(yàn)證過(guò),大家自己驗(yàn)證一下吧)
1: //objConn為讀取Excel的鏈接,下面通過(guò)過(guò)濾來(lái)獲取有效的Sheet頁(yè)名稱集合
2: System.Data.DataTable schemaTable = objConn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null);
3: List<string> lstSheetNames = new List<string>();
4: for (int i = 0; i < schemaTable.Rows.Count; i++)
5: {
6: string strSheetName = (string)dtSheetName.Rows[i]["TABLE_NAME"];
7: if (strSheetName.Contains("$") && !strSheetName.Replace("'", "").EndsWith("$"))
8: {
9: //過(guò)濾無(wú)效SheetName完畢....
10: continue;
11: }
12: if (lstSheetNames != null && !lstSheetNames.Contains(strSheetName))
13: lstSheetNames.Add(strSheetName);
14: }
因?yàn)樽x取出來(lái)無(wú)效SheetName一般情況最后一個(gè)字符都不會(huì)是$。如果SheetName有一些特殊符號(hào),讀取出來(lái)的SheetName會(huì)自動(dòng)加上單引號(hào)。比如在Excel中將SheetName編輯成MySheet(1),此時(shí)讀取出來(lái)的SheetName就為:'MySheet(1)$',所以判斷最后一個(gè)字符是不是$之前最好過(guò)濾一下單引號(hào)。
---------------------------------
(2)Com組件的方式(通過(guò)添加 Microsoft.Office.Interop.Excel引用實(shí)現(xiàn))
優(yōu)點(diǎn):能夠非常靈活的讀取Excel中的數(shù)據(jù),用戶可以靈活的調(diào)用各種函數(shù)進(jìn)行處理。
缺點(diǎn):基于單元格的處理,讀取速度較慢,對(duì)于數(shù)據(jù)量較大的文件最好不要使用此種方式讀取。
需要添加相應(yīng)的DLL引用,必須存在此引用才可使用,如果是Web站點(diǎn)部署在IIS上時(shí),還需要服務(wù)器機(jī)子已安裝了Excel,有時(shí)候還需要為配置IIS權(quán)限。
讀取代碼如下:
1: private Stopwatch wath = new Stopwatch();
2: /// <summary>
3: /// 使用COM讀取Excel
4: /// </summary>
5: /// <param name="excelFilePath">路徑</param>
6: /// <returns>DataTabel</returns>
7: public System.Data.DataTable GetExcelData(string excelFilePath)
8: {
9: Excel.Application app = new Excel.Application();
10: Excel.Sheets sheets;
11: Excel.Workbook workbook = null;
12: object oMissiong = System.Reflection.Missing.Value;
13: System.Data.DataTable dt = new System.Data.DataTable();
14: wath.Start();
15: try
16: {
17: if (app == null)
18: {
19: return null;
20: }
21: workbook = app.Workbooks.Open(excelFilePath, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong,
22: oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong);
23: //將數(shù)據(jù)讀入到DataTable中——Start
24: sheets = workbook.Worksheets;
25: Excel.Worksheet worksheet = (Excel.Worksheet)sheets.get_Item(1);//讀取第一張表
26: if (worksheet == null)
27: return null;
28: string cellContent;
29: int iRowCount = worksheet.UsedRange.Rows.Count;
30: int iColCount = worksheet.UsedRange.Columns.Count;
31: Excel.Range range;
32: //負(fù)責(zé)列頭Start
33: DataColumn dc;
34: int ColumnID = 1;
35: range = (Excel.Range)worksheet.Cells[1, 1];
36: while (range.Text.ToString().Trim() != "")
37: {
38: dc = new DataColumn();
39: dc.DataType = System.Type.GetType("System.String");
40: dc.ColumnName = range.Text.ToString().Trim();
41: dt.Columns.Add(dc);
42:
43: range = (Excel.Range)worksheet.Cells[1, ++ColumnID];
44: }
45: //End
46: for (int iRow = 2; iRow <= iRowCount; iRow++)
47: {
48: DataRow dr = dt.NewRow();
49: for (int iCol = 1; iCol <= iColCount; iCol++)
50: {
51: range = (Excel.Range)worksheet.Cells[iRow, iCol];
52: cellContent = (range.Value2 == null) ? "" : range.Text.ToString();
53: dr[iCol - 1] = cellContent;
54: }
55: dt.Rows.Add(dr);
56: }
57: wath.Stop();
58: TimeSpan ts = wath.Elapsed;
59: //將數(shù)據(jù)讀入到DataTable中——End
60: return dt;
61: }
62: catch
63: {
64: return null;
65: }
66: finally
67: {
68: workbook.Close(false, oMissiong, oMissiong);
69: System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook);
70: workbook = null;
71: app.Workbooks.Close();
72: app.Quit();
73: System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
74: app = null;
75: GC.Collect();
76: GC.WaitForPendingFinalizers();
77: }
78: }
79: /// <summary>
80: /// 使用COM,多線程讀取Excel(1 主線程、4 副線程)
81: /// </summary>
82: /// <param name="excelFilePath">路徑</param>
83: /// <returns>DataTabel</returns>
84: public System.Data.DataTable ThreadReadExcel(string excelFilePath)
85: {
86: Excel.Application app = new Excel.Application();
87: Excel.Sheets sheets = null;
88: Excel.Workbook workbook = null;
89: object oMissiong = System.Reflection.Missing.Value;
90: System.Data.DataTable dt = new System.Data.DataTable();
91: wath.Start();
92: try
93: {
94: if (app == null)
95: {
96: return null;
97: }
98: workbook = app.Workbooks.Open(excelFilePath, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong,
99: oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong);
100: //將數(shù)據(jù)讀入到DataTable中——Start
101: sheets = workbook.Worksheets;
102: Excel.Worksheet worksheet = (Excel.Worksheet)sheets.get_Item(1);//讀取第一張表
103: if (worksheet == null)
104: return null;
105: string cellContent;
106: int iRowCount = worksheet.UsedRange.Rows.Count;
107: int iColCount = worksheet.UsedRange.Columns.Count;
108: Excel.Range range;
109: //負(fù)責(zé)列頭Start
110: DataColumn dc;
111: int ColumnID = 1;
112: range = (Excel.Range)worksheet.Cells[1, 1];
113: while (iColCount >= ColumnID)
114: {
115: dc = new DataColumn();
116: dc.DataType = System.Type.GetType("System.String");
117: string strNewColumnName = range.Text.ToString().Trim();
118: if (strNewColumnName.Length == 0) strNewColumnName = "_1";
119: //判斷列名是否重復(fù)
120: for (int i = 1; i < ColumnID; i++)
121: {
122: if (dt.Columns[i - 1].ColumnName == strNewColumnName)
123: strNewColumnName = strNewColumnName + "_1";
124: }
125: dc.ColumnName = strNewColumnName;
126: dt.Columns.Add(dc);
127: range = (Excel.Range)worksheet.Cells[1, ++ColumnID];
128: }
129: //End
130: //數(shù)據(jù)大于500條,使用多進(jìn)程進(jìn)行讀取數(shù)據(jù)
131: if (iRowCount - 1 > 500)
132: {
133: //開(kāi)始多線程讀取數(shù)據(jù)
134: //新建線程
135: int b2 = (iRowCount - 1) / 10;
136: DataTable dt1 = new DataTable("dt1");
137: dt1 = dt.Clone();
138: SheetOptions sheet1thread = new SheetOptions(worksheet, iColCount, 2, b2 + 1, dt1);
139: Thread othread1 = new Thread(new ThreadStart(sheet1thread.SheetToDataTable));
140: othread1.Start();
141: //阻塞 1 毫秒,保證第一個(gè)讀取 dt1
142: Thread.Sleep(1);
143: DataTable dt2 = new DataTable("dt2");
144: dt2 = dt.Clone();
145: SheetOptions sheet2thread = new SheetOptions(worksheet, iColCount, b2 + 2, b2 * 2 + 1, dt2);
146: Thread othread2 = new Thread(new ThreadStart(sheet2thread.SheetToDataTable));
147: othread2.Start();
148: DataTable dt3 = new DataTable("dt3");
149: dt3 = dt.Clone();
150: SheetOptions sheet3thread = new SheetOptions(worksheet, iColCount, b2 * 2 + 2, b2 * 3 + 1, dt3);
151: Thread othread3 = new Thread(new ThreadStart(sheet3thread.SheetToDataTable));
152: othread3.Start();
153: DataTable dt4 = new DataTable("dt4");
154: dt4 = dt.Clone();
155: SheetOptions sheet4thread = new SheetOptions(worksheet, iColCount, b2 * 3 + 2, b2 * 4 + 1, dt4);
156: Thread othread4 = new Thread(new ThreadStart(sheet4thread.SheetToDataTable));
157: othread4.Start();
158: //主線程讀取剩余數(shù)據(jù)
159: for (int iRow = b2 * 4 + 2; iRow <= iRowCount; iRow++)
160: {
161: DataRow dr = dt.NewRow();
162: for (int iCol = 1; iCol <= iColCount; iCol++)
163: {
164: range = (Excel.Range)worksheet.Cells[iRow, iCol];
165: cellContent = (range.Value2 == null) ? "" : range.Text.ToString();
166: dr[iCol - 1] = cellContent;
167: }
168: dt.Rows.Add(dr);
169: }
170: othread1.Join();
171: othread2.Join();
172: othread3.Join();
173: othread4.Join();
174: //將多個(gè)線程讀取出來(lái)的數(shù)據(jù)追加至 dt1 后面
175: foreach (DataRow dr in dt.Rows)
176: dt1.Rows.Add(dr.ItemArray);
177: dt.Clear();
178: dt.Dispose();
179: foreach (DataRow dr in dt2.Rows)
180: dt1.Rows.Add(dr.ItemArray);
181: dt2.Clear();
182: dt2.Dispose();
183: foreach (DataRow dr in dt3.Rows)
184: dt1.Rows.Add(dr.ItemArray);
185: dt3.Clear();
186: dt3.Dispose();
187: foreach (DataRow dr in dt4.Rows)
188: dt1.Rows.Add(dr.ItemArray);
189: dt4.Clear();
190: dt4.Dispose();
191: return dt1;
192: }
193: else
194: {
195: for (int iRow = 2; iRow <= iRowCount; iRow++)
196: {
197: DataRow dr = dt.NewRow();
198: for (int iCol = 1; iCol <= iColCount; iCol++)
199: {
200: range = (Excel.Range)worksheet.Cells[iRow, iCol];
201: cellContent = (range.Value2 == null) ? "" : range.Text.ToString();
202: dr[iCol - 1] = cellContent;
203: }
204: dt.Rows.Add(dr);
205: }
206: }
207: wath.Stop();
208: TimeSpan ts = wath.Elapsed;
209: //將數(shù)據(jù)讀入到DataTable中——End
210: return dt;
211: }
212: catch
213: {
214: return null;
215: }
216: finally
217: {
218: workbook.Close(false, oMissiong, oMissiong);
219: System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook);
220: System.Runtime.InteropServices.Marshal.ReleaseComObject(sheets);
221: workbook = null;
222: app.Workbooks.Close();
223: app.Quit();
224: System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
225: app = null;
226: GC.Collect();
227: GC.WaitForPendingFinalizers();
228: }
229: }
---------------------------------
(3)NPOI方式讀取Excel(此方法未經(jīng)過(guò)測(cè)試)
NPOI 是 POI 項(xiàng)目的 .NET 版本。POI是一個(gè)開(kāi)源的Java讀寫(xiě)Excel、WORD等微軟OLE2組件文檔的項(xiàng)目。使用 NPOI 你就可以在沒(méi)有安裝 Office 或者相應(yīng)環(huán)境的機(jī)器上對(duì) WORD/EXCEL 文檔進(jìn)行讀寫(xiě)。
優(yōu)點(diǎn):讀取Excel速度較快,讀取方式操作靈活性
缺點(diǎn):需要下載相應(yīng)的插件并添加到系統(tǒng)引用當(dāng)中。
1: /// <summary>
2: /// 將excel中的數(shù)據(jù)導(dǎo)入到DataTable中
3: /// </summary>
4: /// <param name="sheetName">excel工作薄sheet的名稱</param>
5: /// <param name="isFirstRowColumn">第一行是否是DataTable的列名</param>
6: /// <returns>返回的DataTable</returns>
7: public DataTable ExcelToDataTable(string sheetName, bool isFirstRowColumn)
8: {
9: ISheet sheet = null;
10: DataTable data = new DataTable();
11: int startRow = 0;
12: try
13: {
14: fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
15: if (fileName.IndexOf(".xlsx") > 0) // 2007版本
16: workbook = new XSSFWorkbook(fs);
17: else if (fileName.IndexOf(".xls") > 0) // 2003版本
18: workbook = new HSSFWorkbook(fs);
19: if (sheetName != null)
20: {
21: sheet = workbook.GetSheet(sheetName);
22: }
23: else
24: {
25: sheet = workbook.GetSheetAt(0);
26: }
27: if (sheet != null)
28: {
29: IRow firstRow = sheet.GetRow(0);
30: int cellCount = firstRow.LastCellNum; //一行最后一個(gè)cell的編號(hào) 即總的列數(shù)
31: if (isFirstRowColumn)
32: {
33: for (int i = firstRow.FirstCellNum; i < cellCount; ++i)
34: {
35: DataColumn column = new DataColumn(firstRow.GetCell(i).StringCellValue);
36: data.Columns.Add(column);
37: }
38: startRow = sheet.FirstRowNum + 1;
39: }
40: else
41: {
42: startRow = sheet.FirstRowNum;
43: }
44: //最后一列的標(biāo)號(hào)
45: int rowCount = sheet.LastRowNum;
46: for (int i = startRow; i <= rowCount; ++i)
47: {
48: IRow row = sheet.GetRow(i);
49: if (row == null) continue; //沒(méi)有數(shù)據(jù)的行默認(rèn)是null
50:
51: DataRow dataRow = data.NewRow();
52: for (int j = row.FirstCellNum; j < cellCount; ++j)
53: {
54: if (row.GetCell(j) != null) //同理,沒(méi)有數(shù)據(jù)的單元格都默認(rèn)是null
55: dataRow[j] = row.GetCell(j).ToString();
56: }
57: data.Rows.Add(dataRow);
58: }
59: }
60: return data;
61: }
62: catch (Exception ex)
63: {
64: Console.WriteLine("Exception: " + ex.Message);
65: return null;
66: }
67: }
數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼
若不方便掃碼,搜微信號(hào):CDAshujufenxi
LSTM 模型輸入長(zhǎng)度選擇技巧:提升序列建模效能的關(guān)鍵? 在循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)家族中,長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)憑借其解決長(zhǎng)序列 ...
2025-07-11CDA 數(shù)據(jù)分析師報(bào)考條件詳解與準(zhǔn)備指南? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代浪潮下,CDA 數(shù)據(jù)分析師認(rèn)證愈發(fā)受到矚目,成為眾多有志投身數(shù) ...
2025-07-11數(shù)據(jù)透視表中兩列相乘合計(jì)的實(shí)用指南? 在數(shù)據(jù)分析的日常工作中,數(shù)據(jù)透視表憑借其強(qiáng)大的數(shù)據(jù)匯總和分析功能,成為了 Excel 用戶 ...
2025-07-11尊敬的考生: 您好! 我們誠(chéng)摯通知您,CDA Level I和 Level II考試大綱將于 2025年7月25日 實(shí)施重大更新。 此次更新旨在確保認(rèn) ...
2025-07-10BI 大數(shù)據(jù)分析師:連接數(shù)據(jù)與業(yè)務(wù)的價(jià)值轉(zhuǎn)化者? ? 在大數(shù)據(jù)與商業(yè)智能(Business Intelligence,簡(jiǎn)稱 BI)深度融合的時(shí)代,BI ...
2025-07-10SQL 在預(yù)測(cè)分析中的應(yīng)用:從數(shù)據(jù)查詢到趨勢(shì)預(yù)判? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代,預(yù)測(cè)分析作為挖掘數(shù)據(jù)潛在價(jià)值的核心手段,正被廣泛 ...
2025-07-10數(shù)據(jù)查詢結(jié)束后:分析師的收尾工作與價(jià)值深化? ? 在數(shù)據(jù)分析的全流程中,“query end”(查詢結(jié)束)并非工作的終點(diǎn),而是將數(shù) ...
2025-07-10CDA 數(shù)據(jù)分析師考試:從報(bào)考到取證的全攻略? 在數(shù)字經(jīng)濟(jì)蓬勃發(fā)展的今天,數(shù)據(jù)分析師已成為各行業(yè)爭(zhēng)搶的核心人才,而 CDA(Certi ...
2025-07-09【CDA干貨】單樣本趨勢(shì)性檢驗(yàn):捕捉數(shù)據(jù)背后的時(shí)間軌跡? 在數(shù)據(jù)分析的版圖中,單樣本趨勢(shì)性檢驗(yàn)如同一位耐心的偵探,專注于從單 ...
2025-07-09year_month數(shù)據(jù)類型:時(shí)間維度的精準(zhǔn)切片? ? 在數(shù)據(jù)的世界里,時(shí)間是最不可或缺的維度之一,而year_month數(shù)據(jù)類型就像一把精準(zhǔn) ...
2025-07-09CDA 備考干貨:Python 在數(shù)據(jù)分析中的核心應(yīng)用與實(shí)戰(zhàn)技巧? ? 在 CDA 數(shù)據(jù)分析師認(rèn)證考試中,Python 作為數(shù)據(jù)處理與分析的核心 ...
2025-07-08SPSS 中的 Mann-Kendall 檢驗(yàn):數(shù)據(jù)趨勢(shì)與突變分析的有力工具? ? ? 在數(shù)據(jù)分析的廣袤領(lǐng)域中,準(zhǔn)確捕捉數(shù)據(jù)的趨勢(shì)變化以及識(shí)別 ...
2025-07-08備戰(zhàn) CDA 數(shù)據(jù)分析師考試:需要多久?如何規(guī)劃? CDA(Certified Data Analyst)數(shù)據(jù)分析師認(rèn)證作為國(guó)內(nèi)權(quán)威的數(shù)據(jù)分析能力認(rèn)證 ...
2025-07-08LSTM 輸出不確定的成因、影響與應(yīng)對(duì)策略? 長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)作為循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的一種變體,憑借獨(dú)特的門(mén)控機(jī)制,在 ...
2025-07-07統(tǒng)計(jì)學(xué)方法在市場(chǎng)調(diào)研數(shù)據(jù)中的深度應(yīng)用? 市場(chǎng)調(diào)研是企業(yè)洞察市場(chǎng)動(dòng)態(tài)、了解消費(fèi)者需求的重要途徑,而統(tǒng)計(jì)學(xué)方法則是市場(chǎng)調(diào)研數(shù) ...
2025-07-07CDA數(shù)據(jù)分析師證書(shū)考試全攻略? 在數(shù)字化浪潮席卷全球的當(dāng)下,數(shù)據(jù)已成為企業(yè)決策、行業(yè)發(fā)展的核心驅(qū)動(dòng)力,數(shù)據(jù)分析師也因此成為 ...
2025-07-07剖析 CDA 數(shù)據(jù)分析師考試題型:解鎖高效備考與答題策略? CDA(Certified Data Analyst)數(shù)據(jù)分析師考試作為衡量數(shù)據(jù)專業(yè)能力的 ...
2025-07-04SQL Server 字符串截取轉(zhuǎn)日期:解鎖數(shù)據(jù)處理的關(guān)鍵技能? 在數(shù)據(jù)處理與分析工作中,數(shù)據(jù)格式的規(guī)范性是保證后續(xù)分析準(zhǔn)確性的基礎(chǔ) ...
2025-07-04CDA 數(shù)據(jù)分析師視角:從數(shù)據(jù)迷霧中探尋商業(yè)真相? 在數(shù)字化浪潮席卷全球的今天,數(shù)據(jù)已成為企業(yè)決策的核心驅(qū)動(dòng)力,CDA(Certifie ...
2025-07-04CDA 數(shù)據(jù)分析師:開(kāi)啟數(shù)據(jù)職業(yè)發(fā)展新征程? ? 在數(shù)據(jù)成為核心生產(chǎn)要素的今天,數(shù)據(jù)分析師的職業(yè)價(jià)值愈發(fā)凸顯。CDA(Certified D ...
2025-07-03