Python数据科学(四)- 数据收集系列1.数据型态2.结构化vs半结构化vs非结构化数据3.Python IO与档案处理

收集正确的数据是我们完成数据分析的前提.

1.数据型态

  • 定性数据(Qualitative or Categorical Data):是一组表示事物性质、规定事物类别的文字表述型数据,不能将其量化,只能将其定性。
    • 叙述特性或种类
  • 定量数据(Quantitative or Numerical Data):可以被计数或测量。

  • 定性分析与定量分析应该是统一的,相互补充的;定性分析是定量分析的基本前提,没有定性的定量是一种盲目的、毫无价值的定量;定量分析使定性分析更加科学、准确,它可以促使定性分析得出广泛而深入的结论。
  • 定量分析是依据统计数据,建立数学模型,并用数学模型计算出分析对象的各项指标及其数值的一种方法。定性分析则是主要凭分析者的直觉、经验,凭分析对象过去和现在的延续状况及最新的信息资料,对分析对象的性质、特点、发展变化规律作出判断的一种方法。
  • 相比而言,前一种方法更加科学,但需要较高深的数学知识,而后一种方法虽然较为粗糙,但在数据资料不够充分或分析者数学基础较为薄弱时比较适用,更适合于一般的投资者与经济工作者。但是必须指出,两种分析方法对数学知识的要求虽然有高有低,但并不能就此把定性分析与定量分析截然划分开来。事实上,现代定性分析方法同样要采用数学工具进行计算,而定量分析则必须建立在定性预测基础上,二者相辅相成,定性是定量的依据,定量是定性的具体化,二者结合起来灵活运用才能取得最佳效果。
  • 不同的分析方法各有其不同的特点与性能,但是都具有一个共同之处,即它们一般都是通过比较对照来分析问题和说明问题的。正是通过对各种指标的比较或不同时期同一指标的对照才反映出数量的多少、质量的优劣、效率的高低、消耗的大小、发展速度的快慢等等,才能作为鉴别、下判断提供确凿有据的信息。

举个例子:

◆ 定性分析: 分析: _ 知几写了很多篇文章 ◆ 定量分析: 分析:_ 知几写了107篇文章。

我的理解是定量分析主要关注的是频率;定性分析关注的是意义。

定量数据又可分为:

  • 离散数据(Discrete Data):指其数值只能用自然数或整数单位计算,例如企业的人数
    • 只能用自然数或整数单位计算
    • 只能按计量单位数计数,可由一般计数方法取得
  • 连续数据(Continuous Data):在一定区间内可以任意取值的数据,其数值是连续不断的,例如人的身高
    • 一定区间内可以任意取值的数据,其数值是连续不断的,相邻两个数值可取无限个数值
    • 其数值只能用测量或计量的方法获得

2.结构化vs半结构化vs非结构化数据

  • 结构化数据
    • 每笔数据都有固定的字段、固定的格式,方便程序进行后续取用与分析
    • 例如数据库
  • 半结构化数据
    • 数据介于数据化结构与非结构化数据之间
    • 数据具有字段,也可以依据字段来进行查找,使用方便,但每笔数据的字段可能不一致
    • 例如:XML,JSON
  • 非结构化数据
    • 没有固定的格式,必须整理以后才能存取
    • 没有格式的文字、网页数据

1.结构化数据

  • 结构化数据也称作行数据,是由二维表结构来逻辑表达和实现的数据,严格地遵循数据格式与长度规范,主要通过关系型数据库进行存储和管理。
  • 对数据的处理和捞取可以通过SQL语句

2.半结构化数据 - XML

<users>
    <user>
        <name>xsl</name>
        <gender>boy</gender>
        <age>23</age>
    </user>
    <user>
      <name>xlm</name>
      <gender>girl</gender>
    </user>
</users>
  • 可以使用字段存储数据内容
  • 字段不固定,例如xlm就少了age字段
  • 可以弹性的存放各种字段格式的数据

3.半结构化数据 - JSON

[
  user:{
    name:xsl,
    gender:boy,
    age:12,
},
  user:{
    name:xsl,
    gender:girl,
}
]
  • 如同XML可以使用字段存储数据内容
  • 使用Key:Value存放数据
  • 不用宣告字段的结尾,可以比XML更快更有效传输数据

4.非结构化数据

  • 没有固定的数据格式
    • 例如网站数据
  • 必须透过ETL(Extract,Transformation,Loading)工具将数据转换为结构化数据才能取用

由于我们常见的数据是非结构化数据,为了进行数据分析,我们就需要从非结构化数据中挖掘数据,我们就需要先把非结构化数据转换成结构化数据,此时我们就可以使用ETL工具。

数据抽取、转换、存储过程

3.Python IO与档案处理

Python提供了默认操作文件所必需的基本功能和方法。可以使用文件对象执行大部分文件操作。

打开文件

在读取或写入文件之前,需要使用Python的内置open()函数打开文件。此函数创建一个文件对象,该对象将用于调用与其相关联的其他支持方法。

语法:

f = open(file_name [, access_mode][, buffering])
  • file_name参数是一个字符串值,指定要访问的文件的名称。
  • access_mode确定文件打开的模式,即读取,写入,追加等。可能的值的完整列表如下表所示。 这是一个可选参数,默认文件访问模式为(r - 也就是只读)。
  • bufferin如果buffering值设置为0,则不会发生缓冲。 如果缓冲值buffering为1,则在访问文件时执行行缓冲。如果将缓冲值buffering指定为大于1的整数,则使用指定的缓冲区大小执行缓冲操作。如果为负,则缓冲区大小为系统默认值(默认行为)。

编号

模式

描述

1

r

打开的文件为只读模式。文件指针位于文件的开头,这是默认模式。

2

rb

打开仅用二进制格式读取的文件。文件指针位于文件的开头,这是默认模式。

3

r+

打开读写文件。文件指针放在文件的开头。

4

rb+

以二进制格式打开一个用于读写文件。文件指针放在文件的开头。

5

w

打开仅供写入的文件。 如果文件存在,则覆盖该文件。 如果文件不存在,则创建一个新文件进行写入。

6

wb

打开仅用二进制格式写入的文件。如果文件存在,则覆盖该文件。 如果文件不存在,则创建一个新文件进行写入。

7

w+

打开写入和取读的文件。如果文件存在,则覆盖现有文件。 如果文件不存在,创建一个新文件进行阅读和写入。

8

wb+

打开一个二进制格式的写入和读取文件。 如果文件存在,则覆盖现有文件。 如果文件不存在,创建一个新文件进行阅读和写入。

9

a

打开一个文件进行追加。 如果文件存在,则文件指针位于文件末尾。也就是说,文件处于追加模式。如果文件不存在,它将创建一个新文件进行写入。

10

ab

打开一个二进制格式的文件。如果文件存在,则文件指针位于文件末尾。 也就是说,文件处于追加模式。如果文件不存在,它将创建一个新文件进行写入。

11

a+

打开一个文件,用于追加和阅读。 如果文件存在,则文件指针位于文件末尾。 文件以附加模式打开。 如果文件不存在,它将创建一个新文件进行阅读和写入。

12

ab+

打开一个二进制格式的附加和读取文件。 如果文件存在,则文件指针位于文件末尾。文件以附加模式打开。如果文件不存在,它将创建一个新文件进行读取和写入。

  • write()方法:将任何字符串写入打开的文件。 重要的是要注意,Python字符串可以是二进制数据,而不仅仅是文本。
  • close()方法:刷新任何未写入的信息并关闭文件对象,之后不能再进行写入操作。
f =open('zj.txt', 'w')  #读写模式
f.write('hello xlm') #写入 hello xlm
f.close() 关闭文件

#用with写
with open('zj.txt', 'r') as f:
    print(f.read()) #全部读取

with open('zj.txt', 'r') as f:
    for line in f.readlines():
        print(line)   #分行打印出来
        print(line.strip())  #去除多余的换行

打开本地文件,可以看到`hello xlm` 已经写入文件

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏QQ会员技术团队的专栏

从0实现一个延迟代理服务

需求背景: 后台业务逻辑类服务,其实现通常都会依赖其他外部服务,比如存储,或者其他的逻辑server。 有一类比较典型的问题: 假设主调方A是同步处理模型,有一...

2608
来自专栏极客猴

Django学习之旅(六)

本文是 Django 学习之旅的完结篇,主要是讲述 model 层。model 层是与数据库打交道的,其中包括 怎么连接数据库、怎么对数据库进行增删改查等。主要...

813
来自专栏生信宝典

Python文学化编程 - Jupyter notebook使用和插件拓展

Jupyter notebook (Ipython notebook)是集代码、结果、文档三位一体的文学化可重复程序文档。支持40多种程序语言,Python为原...

49710
来自专栏编程坑太多

python进程和线程概述

1365
来自专栏牛肉圆粉不加葱

Spark 内存管理的前世今生(上)

作为打着 “内存计算” 旗号出道的 Spark,内存管理是其非常重要的模块。作为使用者,搞清楚 Spark 是如何管理内存的,对我们编码、调试及优化过程会有很大...

1362
来自专栏SDNLAB

深度数据包检测DPI开发解析

深度数据包检测(DPI) 深度数据包检测(Deep packet inspection,缩写为 DPI)是一种特殊的网络技术,一般网络设备只会查看以太网头部、I...

5037
来自专栏豆包的专栏

共享内存无锁队列的实现

共享内存无锁队列是老调重弹了,相关的实现网上都能找到很多。但看了公司内外的很多实现,都有不少的问题,于是自己做了重新实现。主要是考虑了一些异常情况加强健壮性,并...

3.5K2
来自专栏谈补锅

汇编语言学习

   7、1Byte = 8bit ;    1KB = 1024B ;  1MB = 1024KB ;   1GB = 1024MB

3633
来自专栏FreeBuf

WIN10下ROP初体验

* 本文原创作者:与非门salome,本文属FreeBuf原创奖励计划,未经许可禁止转载 首先,在windows10下编写一个具有一定安全机制但又存在漏...

2839
来自专栏Albert陈凯

【Hadoop】三句话告诉你 mapreduce 中MAP进程的数量怎么控制?

原文地址: MapReduce Input Split(输入分/切片)详解 结论: 经过以上的分析,在设置map个数的时候,可以简单的总结为以下几点: (...

4838

扫码关注云+社区

领取腾讯云代金券