
[從產品角度學EXCEL 02]-EXCEL里的樹形結構
前言請看:
0 為什么要關注Excel的本質
1 excel是怎樣運作的
本文僅由尾巴本人發布于特定網站。不接受任何無授權轉載,如需轉載,請先聯系我,非常感謝。
2 Excel里的樹形結構
這段時間,上海街邊的樹上陸陸續續長出了嫩芽,放眼望去有各種層次的綠色,格外好看。我們今天的話題,恰好也與樹有關。只不過,樹都是往天空伸展枝葉的,而我們這里討論的‘樹’,卻是由根部出發,逐行逐行往下延展、伸展。
還記得上一個章節里,我們對一個excel文件解壓縮后,發現了若干個xml文件嗎?
xml本質上是一種使用樹形結構存儲信息的文檔。它由一個根節點root開始,逐層逐層長枝節,并給每一層都打了個標簽,讓xml解析器可以快速定位信息的內容。而每一層以及每一個底部的節點,都是這些信息的一個分類屬性。我們了解了它們的屬性和層級,也就了解這顆結構樹長成什么樣子。
正因為xml的結構與層級是如此重要,在進一步講單元格之前,我們很有必要先剖析看看excel xml樹的結構,從大體上再來理解一下excel儲存文件的方式。
需要注意的是,這一章節大概是整個系列里涉及最多編程的章節了。如果各位對編程不是特別感興趣,可以先跳過這一節,去看后面的內容。不過按照我個人的經驗來說,不管你是用excel做一些簡單的數據處理,還是想要在數據分析行業里走得穩妥一些,了解了解編程,只會有好處而沒有壞處。尤其是編程的一些思想,如妥善地設計接口,分隔各個功能塊等,即使你用excel處理數據,這些也對你十分有好處。
言歸正傳吧。我們回過頭來再看看excel解壓縮以后的xml文件。
讓我們隨意打開一個xml文件,一串串密密麻麻的字符就這樣跳了出來。
對于不熟悉xml架構的人來說,我們只會看到眼花繚亂的括號,等號,引號。但是如果你對xml有點理解,你就會知道,這一系列的標點符號框起了一個個xml的數據結構。
對于xml來說,每一個層級都是由<標簽 屬性=ABC>內容信息</標簽>構成的。有的內容信息里又會再次嵌套一層標簽層級,重重相疊,從根部開始向下延展出了無數枝葉,構成了一棵看似錯綜復雜,卻是層次分明的xml樹。人們只要定位到某一個枝葉,就可以迅速把這個枝葉下的特定信息取出來。而要搞懂這棵xml樹長什么樣子,首先就要搞懂說這棵樹是有哪些層級,各個層級叫什么,有什么內容。
但是各位再回顧看看上面的截圖,一長串一長串的代碼,你當然可以一個個去判斷說,啊,根標簽從worksheet開始,下面有selection層級,有f層級等等,但是這樣子做,不僅低效,而且會有遺漏。
請各位在學習excel時,隨時記住一個原則,那就是可以不要手工去做的事情,就不要手工去做。寧愿自己腦子廢點腦力構思最優方法,也不要直接就開始機械的作業。
那么,在這里,面臨這個要人工一個個看標簽的艱巨任務時,我們該如何是好呢?
在這里跟大家再普及一個概念的是,xml嘛,除了微軟在用于office系列文檔儲存格式以外,它還廣泛應用于各種網頁設計領域。而在網頁獲取信息這一塊,我們天然有很多工具可以通過讀取html或者xml源代碼,解析它們的結構,進行數據提取工作(高級點叫法即網絡爬蟲)
所以對于這里的excel xml源文件,我們自然可以應用各種爬蟲工具,把xml的框架給找出來。
我 用的比較熟的應該是R語言的rvest包爬蟲了,查了一下它的文檔,有一個叫xml_structure的,可以直接把xml文件的標簽層次給讀出來,而 xml_nodes/xml_attr等,又可以把里面特定的標簽內容給分層讀出來。那么寫一段代碼,幫我把excel的xml源文件里的層級與內容弄出 來,那就省了我很大的心力啦^^
因為R語言代碼并不是我們的重點,所以我把源代碼放在文章末尾的擴展閱讀里了,有需要的可以去看看,也可以用其他語言寫寫。有的時候只要學會一點點的編程,就能大大的改善各位的工作效率。要用好工具而不是被工具玩,是我希望在這系列excel教程里告訴大家的一個點。
那么言歸正傳。請各位看看下面這個用R語言跑出來的csv文件截圖。
左列是我們的標簽名,右列是我們標簽里面包含的文本。通過這個文件,我們就可以很容易知道各個標簽里存放了什么文本信息。我們會發現row下面是一串串的c/v/f。而c與v的信息幾乎完全一樣。
另外,在r里,我們可以通過xml_structure輸出xml文件的結構。這兩個結合起來,我為各位繪制了一張sheet1.xml的樹形結構圖:
各位可以看到,在worksheet文件夾里的sheet1.xml,是在sheetdata里按照row為標簽層級,存放了若干行的數據。而行又以 c(cell)為導向,存放了單元格的v (value)和f(函數)。有多少行,在sheet1.xml里就有多少row,一個row有若干個有效單元格,就會有若干個c。
從這個角度看excel,會不會對excel的產品設計層次有了進一步的理解呢?
另外,上面的截圖沒有出示的一點是,在worksheet這個文件夾里,數字是直接存在各個sheetxxx.xml里的,而字符類文本,卻是單獨存放在外面的SharedString.xml里。
嘿嘿,數字和文本的存放格式不一樣,各位想到了什么?有沒有虎軀一震,想到了excel里因為數字和文本的不同,帶來的各種不便?
在前面啰嗦完為什么要寫這個系列,以及excel是怎么工作以后,我們終于把拼圖最重要的一塊——解讀xml補上了。
R語言解析XML源代碼:
setwd("~/excel/")
library(rvest)
#代碼用于《從產品角度學EXCEL》系列文章,XML解析
# read xml in zip files
get_xmllist<-function(access){
list<-list.files(access,full.names=TRUE,pattern = "xml$",recursive = TRUE)
list_name<-gsub(as.character(access),"",list)
list_name<-gsub("\\/|\\.|\\[|\\]","-",list_name)
list_name<-gsub("\\-\\-","-",list_name)
list<-data.frame(list,list_name,stringsAsFactors = FALSE)
list
}
# read xml structure
get_structure<-function(xmlfile){
data<-xml(xmlfile,encoding="UTF-8")
data<-data %>% html_nodes("*")
output<-cbind(node_names=data %>% html_tag(),
node_text=data %>% html_text())
output<-data.frame(output)
output
}
write_result<-function(dataframe,name){
write.csv(dataframe,paste0("./Output/",name,".csv"),row.names=FALSE)
}
#use these three function
xml_list<-get_xmllist("./sample u.xlsx/")
for (i in 1:nrow(xml_list)){
data<-get_structure(xml_list$list[i])
write_result(data,xml_list$list_name[i])
}
#write the structure
xml_structure(html(xml_list$list[8]))
數據分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
CDA數據分析師證書考試體系(更新于2025年05月22日)
2025-05-26解碼數據基因:從數字敏感度到邏輯思維 每當看到超市貨架上商品的排列變化,你是否會聯想到背后的銷售數據波動?三年前在零售行 ...
2025-05-23在本文中,我們將探討 AI 為何能夠加速數據分析、如何在每個步驟中實現數據分析自動化以及使用哪些工具。 數據分析中的AI是什么 ...
2025-05-20當數據遇見人生:我的第一個分析項目 記得三年前接手第一個數據分析項目時,我面對Excel里密密麻麻的銷售數據手足無措。那些跳動 ...
2025-05-20在數字化運營的時代,企業每天都在產生海量數據:用戶點擊行為、商品銷售記錄、廣告投放反饋…… 這些數據就像散落的拼圖,而相 ...
2025-05-19在當今數字化營銷時代,小紅書作為國內領先的社交電商平臺,其銷售數據蘊含著巨大的商業價值。通過對小紅書銷售數據的深入分析, ...
2025-05-16Excel作為最常用的數據分析工具,有沒有什么工具可以幫助我們快速地使用excel表格,只要輕松幾步甚至輸入幾項指令就能搞定呢? ...
2025-05-15數據,如同無形的燃料,驅動著現代社會的運轉。從全球互聯網用戶每天產生的2.5億TB數據,到制造業的傳感器、金融交易 ...
2025-05-15大數據是什么_數據分析師培訓 其實,現在的大數據指的并不僅僅是海量數據,更準確而言是對大數據分析的方法。傳統的數 ...
2025-05-14CDA持證人簡介: 萬木,CDA L1持證人,某電商中廠BI工程師 ,5年數據經驗1年BI內訓師,高級數據分析師,擁有豐富的行業經驗。 ...
2025-05-13CDA持證人簡介: 王明月 ,CDA 數據分析師二級持證人,2年數據產品工作經驗,管理學博士在讀。 學習入口:https://edu.cda.cn/g ...
2025-05-12CDA持證人簡介: 楊貞璽 ,CDA一級持證人,鄭州大學情報學碩士研究生,某上市公司數據分析師。 學習入口:https://edu.cda.cn/g ...
2025-05-09CDA持證人簡介 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度、美團、阿里等 ...
2025-05-07相信很多做數據分析的小伙伴,都接到過一些高階的數據分析需求,實現的過程需要用到一些數據獲取,數據清洗轉換,建模方法等,這 ...
2025-05-06以下的文章內容來源于劉靜老師的專欄,如果您想閱讀專欄《10大業務分析模型突破業務瓶頸》,點擊下方鏈接 https://edu.cda.cn/g ...
2025-04-30CDA持證人簡介: 邱立峰 CDA 數據分析師二級持證人,數字化轉型專家,數據治理專家,高級數據分析師,擁有豐富的行業經驗。 ...
2025-04-29CDA持證人簡介: 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度,美團,阿里等 ...
2025-04-28CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-27數據分析在當今信息時代發揮著重要作用。單因素方差分析(One-Way ANOVA)是一種關鍵的統計方法,用于比較三個或更多獨立樣本組 ...
2025-04-25CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-25