【Day04-档案】你知道Excel最大可以开多少笔资料吗?

前一天我们介绍了用来资料处理最基本的pandas套件
那今天我们则是来谈一下不同的档案类型

我们都知道不同的档案後缀表示不同的类型
但是面对那些txt, csv, tsv, xlsx, json, h5,....
分别是有些什麽样子的差别呢?

txt:文字档案(text file)

最最基本的档案格式,除了文字以外就不包含其他东西了
而在python里面的读取方式则是直接用open()开启

# 读取纯文字档案
text=""
with open("input.txt","r") as f:
   text = f.read()

然後这边用到了python的with语法
这样就在离开这个范围的之後自动帮我们把档案给close掉
会是更安全、简便的一种读取方式

当然,如果说我们要对资料在读取的时候就依每列进行处理
可以在读取的时候增加一个for回圈就好,像是

# 逐行读取
data = []
with open("input.txt","r") as f:
    for line in f:
        line = line.strip()
        data.append(line.split(","))

csv:逗号分割值(comma-separated values)

如果有实际做过一些资料分析的话,那麽对这个格式应该不会很陌生
不过实际上为什麽要叫csv呢?其实这边的c是指逗号(comma)的意思,而整个csv就是指透过逗号来分隔不同值的一种资料
因此其实csv仍然可以视为一种纯文字档案,而用纯文字储存的逗号分割资料也同样可以转换成csv来打开
以上面那个input.txt为例子,我们将档案名称改成input.csv之後
便发现可以用Excel等试算表软件将其打开

但也因为是纯文字储存的资料
在储存过程中不会包含每个格子的资料型态
因此处理csv档案的时候要记得将读取进来的str格式根据需求转换成不同的其他格式

笔者一年前参加一个资料分析比赛的时候
主办方提供了一个6.3G大小几千万笔资料的csv档案
很多人甚至都没办法直接将这个档案打开
那个时候我才知道原来Excel打开这些档案的时候是有上限的
因此後来就直接用python来处理了(所以说python很棒的嘛)

而看似这100多万笔资料的范围很大,但其实如果真的这样储存有时候还真的会超过
像是去年疫情的时候,就发生了英国少算逾1.5万名武汉肺炎确诊患者,疑因超过Excel限制 | iThome

tsv:tab分割值(tab-separated values)

与csv类似的,tsv其实就是换成了Tab而已
其实更广义来说,任何一种分割符号都可以称作是tsv的档案(空格、分号、...)
但读取和储存这些档案的时候,要确保本来的资料是不会包含到这些分割符号的
不然很可能在读取成表格的时候出现错位的情形(事实上,有些资料的前处理还真的要处理这个部分,像是这个)

xlsx:XML Spreadsheet

这应该是现代Excel最常储存的格式了
要说明它是什麽,就必须要提到XML——延伸标记式语言(Extensible Markup Language)
这种结构可以在储存资讯的同时,定义整个资料的结构
因此如果储存的时候希望包含了表格之间的字体、颜色、合并情况等格式的话,记得要用这种方式储存

这边以台湾政府开放资料平台的110年9月分析陈情焦点议题前10大-依机关类别为例子
实际上xml里面长这个样子

<?xml version="1.0"?>

-<GISROOT>


-<RECORD>

<序号>1</序号>

<机关>卫生局</机关>

<陈情最多业务项目>急性传染病防治</陈情最多业务项目>

<件数>907</件数>

<该业务占排名前十大百分比>19.21%</该业务占排名前十大百分比>

</RECORD>


-<RECORD>

<序号>2</序号>

<机关>卫生局</机关>

<陈情最多业务项目>食品业务</陈情最多业务项目>

<件数>395</件数>

<该业务占排名前十大百分比>8.37%</该业务占排名前十大百分比>

</RECORD>


... 中间省略 ...

</GISROOT>

json:JavaScript Object Notation

json是一种透过纯文字储存的一种格式,而因为储存的时候透过类似於一层一层字典的关系来将资料包起来,因此也很适合拿来储存结构化的资料(事实上,在许多的网路行为中都是都过传递json格式来交换资料的)

以上面同一个例子,它在json的样子长得则会像是

[
    {
        "序号": "1",
        "机关": "卫生局",
        "陈情最多业务项目": "急性传染病防治",
        "件数": "907",
        "该业务占排名前十大百分比": "19.21%"
    },
    {
        "序号": "2",
        "机关": "卫生局",
        "陈情最多业务项目": "食品业务",
        "件数": "395",
        "该业务占排名前十大百分比": "8.37%"
    },

	... 中间省略 ...
]

h5:层级资料格式(Hierarchical Data Format:HDF)

因为这个格式很常会被拿来储存训练好的模型,如果或多或少写过一些深度学习模型的朋友,那应该有见过这个格式,不过有没有疑惑过为什麽要储存成这个格式呢?
h5其实是HDF5的意思,而HDF则是指层级资料格式(Hierarchical Data Format)

而HDF的推出其实是因为在不同的系统和机器中
对资料的一些处理经常会产生了许多用来辅助说明的信息
而这些信息又因为不同的格式而经常在需要打包传递的时候造成许多的困扰
因此HDF就将这些东西直接包含在档案里面,让不同机器的程序可以透过统一的机制来调用里面的资料
而也正因为这样的特性,让HDF在巨量资料的储存上也非常合适哦

今天介绍了一些常见的档案格式和它们背後的逻辑
这样,以後在拿到资料看到档案名称的时候应该就会先对它大概的轮廓和处理流程有了一个概念了吧?


<<:  第十四天:初探 Build Scan

>>:  RISC-V: 介绍

Day 27 LeetCode 212. Word Search II

Given an m x n board of characters and a list of s...

Day26 参加职训(机器学习与资料分析工程师培训班),Tensorflow.keras & Pytorch

上午: Python机器学习套件与资料分析 挑几个不错的片段分享 # 储存每个epoch的weigh...

【第二三天 - Flutter iBeacon 官方范例讲解(上)】

前言 因为小弟有一些专案需求需要使用到 iBeacon,因此就有深入去了解 iBeacon 套件用法...

Day28-保护鲸鱼人人有责(三)

小结 前两天讲了几个比较重要的 Dockerfile best practice 之後,今天要来说一...

#21-用Canvas做科技感的动态球!(+什麽时候该用CSS/SVG/Canvas?)

今天正式进入Canvas的世界了! 老样子先看成品: 今天来做点科技感的画面,橘色是滑鼠的游标,这个...