《Python数据分析与数据化运营》学习笔记§2

2.1 数据来源类型

2.2.1 数据文件

图2-1 MySQL 5.7.21版本支持导出的数据格式类型

图2-1 MySQL 5.7.21版本支持导出的数据格式类型

2.1.2 数据库

1. OLTP和OLAP

1) 定义

        OLTP(Online transaction processing),指在线/联机事务处理,操作对象为数据库(database),是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理。通俗的讲,就是对数据的增删改查等操作。
    OLAP(Online analytical processing),指联机分析处理,操作对象为数据仓库(data warehouse),是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。通俗的讲,就是对数据按不同维度的聚合,维度的上卷,下钻等。数仓中的数据,往往来源于多个数据库,以及相应的业务日志。
在这里插入图片描述

2) 特点

        OLAP的主要特点,是直接仿照用户的多角度思考模式,预先为用户组建多维的数据模型,在这里,维指的是用户的分析角度。一旦多维数据模型建立完成,用户可以快速地从各个分析角度获取数据,也能动态的在各个角度之间切换或者进行多角度综合分析,具有极大的分析灵活性。它从设计理念和真正实现上都与旧有的管理信息系统有着本质的区别。

        下图所示即为一个采用简单星型模型组织起来的多维数据模型,用来存储商品销售情况。在这张图中的6个表又可分为2种类型,分别是最中间的事实表,和围绕其展开的维度表。
在这里插入图片描述

        事实上,随着数据仓库理论的发展,数据仓库系统已逐步成为新型的决策管理信息系统的解决方案。数据仓库系统的核心是OLAP,但数据仓库包括更为广泛的内容。

        概括来说,数仓包括三部分内容:
        1、数据层:实现对企业操作数据的抽取、转换、清洗和汇总,形成信息数据,并存储在企业级的中心信息数据库中。
        2、应用层:通过联机分析处理,甚至是数据挖掘等应用处理,实现对信息数据的分析。
        3、表现层:通过前台分析工具,将查询报表、统计分析、多维联机分析和数据发掘的结论展现在用户面前。
在这里插入图片描述

3) 组成

        OLAP包含两部分:事实表与功能。

a. 什么是事实表?

        事实表(Fact Table)用来记录具体事件,包含了每个事件的具体要素,以及具体发生的事情。事实表是主干,简明扼要得介绍一个事实。例子中就通过一条事实表记录说明了某个地方(地域ID)的某人(用户ID)在某个时间(时间ID)通过某种方式(支付ID)买了某产品(产品ID)。

b. 什么是维度表?

        维度表(Dimension Table )是依赖事实表而存在的。每个维度表都是对事实表中的每个列/字段进行展开描述。比如,事实表中的用户ID,就可以进一步展开成一张维度表,记录该用户ID实体的用户名、联系信息、地址信息、年龄、性别和注册方式等等;

        一般来说,对于数仓,事实表的增删改操作相比维度表更为频繁,模型建立后,维度表中的数据保持相对稳定。

        通过事实表和维度表组织起来的数仓多维数据模型,相比原本分散在数据库等各处的数据,能够有更有目的更高效的查询效率,比如可以查询汇总地域维度中某个省的商品销售情况,也可以通过时间维度分析每个季度的某类商品销售趋势。将多个维度表跟事实表进行不同程度的连接,可以展开得到各种各样的分析结果,满足商品运营等数据使用者的不同需求。

        基于数据模型及操作又可以引入数据立方体概念及对其的常见操作。

c. 什么是数据立方体(数据魔方)?

        即Data Cube。下图就是一个商品销售模型的数据立方体。虽然受图形化展示限制,一般仅展示其三个维度,但实际多维数据模型不止三维。
在这里插入图片描述

d. 哪些功能?

        OLAP的基本多维分析操作有钻取(Drill-up和Drill-down)、切片(Slice)和切块(Dice)、以及旋转(Pivot)等。

  • 下钻(Drill-down):从汇总数据深入到细节数据,从上一个层次到下一层进行观察,即深入该层内部,或增加新维。

  • 向上钻取/上卷(Drill-up/Roll-up):在某一维上将低层次的细节数据概括到高层次的汇总数据,即从细粒度数据向上层聚合,或者减少维数。

  • 旋转(Pivot):即维的位置的互换,就像是二维表的行列转换。与上面几种操作不同,旋转并未减少或增加要分析的样本。而是根据不同的目的,改变了分析的角度。

  • 切片(Slice):如左图所示,切片就是选择维中特定的值进行分析,比如只选择电子产品的销售数据,或2010年第二季度的数据,或浙江一个省粒度进行分析。

  • 切块(Dice):如右图所示,切块是选择维中特定区间的数据或者某批特定值进行分析。与切片不同的是,切块的粒度更大,会选择一个维度中某个区间或范围的值,而不仅仅是某个值。

在这里插入图片描述

相关概念

  • 维(Dimension):是人们观察数据的特定角度,是考虑问题时的一类属性,属性集合构成一个维(时间维、地理维等)。
  • 维的层次(Level):人们观察数据的某个特定角度(即某个维)还可以存在细节程度不同的各个描述方面(时间维:日期、月份、季度、年)。
  • 维的成员(Member):维的一个取值,是数据项在某维中位置的描述。(“某年某月某日”是在时间维上位置的描述)。
  • 度量(Measure):多维数组的取值。(2000年1月,上海,笔记本电脑,0000)。
  • 钻取:是改变维的层次,变换分析的粒度。它包括向下钻取(Drill-down)和向上钻取(Drill-up)/上卷(Roll-up)。
    Drill-up是在某一维上将低层次的细节数据概括到高层次的汇总数据,或者减少维数;而Drill-down则相反,它从汇总数据深入到细节数据进行观察或增加新维

2. 关系型数据库与非关系型数据库

在这里插入图片描述

2.1.3 API

        API(Application Programming Interface)是应用程序编程接口,在数据化运营中的API通常分为服务型API和数据型API。

        服务型API可以基于预定义的规则,通过调用API实现特定功能。例如,通过调用百度地图JavaScript API可以在网站中构建功能丰富、交互性强的地图应用,这种API下输入的是地理位置数据,从API获得的输出是可视化地图(服务/功能)。

        数据型API则通过特定的语法,通过向服务器发送数据请求,返回特定格式的数据(或数据文件)。例如,通过向Google Analytics的Analytics Reporting API V4发送请求来获得符合特定条件的数据记录。

        API广泛应用于企业内部和外部多系统和平台交互。API返回的数据格式,大多数情况下是JSON、XML格式。

        JSON是一种轻量级的数据交换格式,由流行的JavaScript编程语言创建,广泛应用于Web数据交互。JSON格式简洁、结构清晰,使用键值对(Key:Value)的格式存储数据对象。Key是数据对象的属性,Value是数据对象属性的对应值。例如,“性别”:“男”就是一个键值对结构的数据。JSON格式数据示例如下:

{
    "category": { 
      "name": "电脑", 
      "brands": {
            "brand": [ 
                "DELL", "THINKPAD" 
                ] 
            } 
    } 
}

        XML是可扩展标记语言,提供了统一的方法来描述和交换独立于应用程序或供应商的结构化数据,这是一种非常成熟且强大的数据格式。像JSON一样,XML提供了非常好的扩展性,API的创建者可以使用它们创建自己的数据结构。XML格式数据示例如下:

<?xmlversion="1.0"encoding="utf-8"?>
<category>
    <name>电脑</name><brands>
        <brand>DELL</brand>
        <brand>THINKPAD</brand>
    </brands>
</category>

2.1.4 流式数据

        流式数据指的是实时或接近实时的时效性处理的大数据流。常见的流式数据处理使用Spark、Storm和Samza等框架,能在毫秒到秒之间完成作业,用于处理应用时效性较强的场景,例如在线个性化推荐系统、网站用户实时行为采集和分析、物联网机器日志实时分析、金融实时消费反欺诈、实时异常人员识别等,应用领域集中在实时性较强的互联网和移动互联网、物联网等。

        按照数据对象来区别,流式数据可分为两类:

        第1类是用户行为数据流。用户行为数据流是围绕“人”产生的数据流,包括用户在网站和App内部因浏览、搜索、评论、分享、交易以及在外部的微博、微信中操作而产生的数据流。用户行为数据流采集平台可分为Web站、移动站和App(包含iOS、Android、Windows等)应用。Web站及基于HTML5开发的移动应用都支持JS脚本采集,较早开发的不支持JS的Wap站(现在基本上很少)则采用NoScript方法,即一个像素的硬图片实现数据跟踪。SDK是针对App提供数据采集的特定方法和框架。这3种方法可以实现目前所有线上用户行为数据采集的需求。

        第2类是机器数据流。机器数据流是围绕“物”产生的数据流,包括从机器的生产、制造、应用、监控和管理等过程中产生的所有数据,例如机器运行日志、传感器监控数据、音频采集器数据、监控图像和视频、GPS地理数据等。

        机器数据流通常集中在工业4.0、智能工厂等工业的智能运营管理过程中,也出现在物联网、人工智能等人和物的监控、识别、联通、互动等智能化应用中。机器数据流扮演着实时采集目标对象属性、状态、行为、信号等数据的角色。

2.2 使用python获取运营数据

2.2.1 从文本文件读取数据

1. read()、readline()、readlines()

        open () 函数是基于数据文件产生对象,后续read()、readline()、readlines()等函数关于该数据文件的操作都基于该对象的产生。
语法:open(name [, mode] [, buffering])
返回:通过open函数会创建一个文件对象(file object)
参数
name:要读取的文件名称,即上一个环节定义的file_name,必填。
mode:打开文件的模式,选填。在实际应用中,r、r+、w、w+、a、a+是使用最多的模式。完整文件打开模式如表2-1所示。
buffering:文件所需的缓冲区大小,选填;0表示无缓冲,1表示线路缓冲

表2-1 Python文件打开模式
模式
描述
    r    以只读的方式打开文件;文件的指针将会放在文件的开头;这个是默认模式。
rb以二进制格式打开一个文件用于只读,文件指针将会放在文件的开头。这是默认模式。
rb+以二进制格式打开一个文件用于读写;文件指针将会放在文件的开头。
r+打开一个文件用于读写;文件指针将会放在文件的开头。
w打开一个文件只用于写入;如果该文件已经存在则将其覆盖;如果该文件不存在,则创建一个新的文件。
wb以二进制格式打开一个文件用于写入,如果该文件已存在则将其进行覆盖。如果该文件不存在则创建新文件。
w+打开一个文件用于读写;如果噶文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb+以二进制格式打开一个文件用于读写;如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a打开一个文件用于追加;如果该文件已存在,文件指针将会放在文件的结尾;也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后;如果该文件不存在,创建新文件进行写入。
a+打开一个文件用于读写;如果该文件存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+以二进制格式打开一个文件用于追加;如果该文件已存在,文件指针将会放在文件的结尾;如果文件不存在,创建新文件用于读写

        Python基于文件对象的读取分为3种方法,如表2-2所示

表2-2 python读取文件内容的方法
方法
描述
返回
read读取文件中的全部数据,直到到达定义的size字节数上限内容字符串,所有行合并为一个字符串
readline读取文件中的一行数据,直到到达定义的size字节数上限内容字符串
readlines读取文件中的全部数据,直到到达定义的size字节数上限内容列表,每行数据作为列表中的一个对象

read_table() 参数sep与delimiter的区别
sep :
字符串,分割符,默认值为‘,’。如果sep为None,则C引擎无法自动检测分隔符,但Python解析引擎可以检测,这意味着将使用后者,并通过Python的内置嗅探器csves.niffer自动检测分隔符。此外,长度大于1个字符的分隔符将被解释为正则表达式,并强制使用Python解析引擎。正则表达式示例:’\r\t’
delimiter :
字符串,分割符,默认值为 none。其是相当于sep的替代品,指定delimiter,那么sep便失效。

2. Numpy的loadtxt()、load()、fromfile()

3. Pandas的read_csv()、read_fwf()、read_table()

2.2.2 从Excel获取数据

第三方库:xlrd、xlwt、pyexcel-xls、xluntils、pyExcelerator
Pandas:read_excel()

2.2.3 从MySQL读取数据

2.2.4 从MongoDB读取数据

2.3 内容延伸

get请求和post请求的区别:

  1. GET请求一般用去请求获取数据,

     POST一般作为发送数据到后台时使用
    
  2. GET请求也可传参到后台,但是其参数在浏览器的地址栏的url中可见,所以隐私性安全性较差,且参数长度也是有限制的

     POST请求传递参数放在Request body中,不会在url中显示,比GET要安全,且参数长度无限制
    
  3. GET请求刷新浏览器或回退时没有影响

     POST回退时会重新提交数据请求
    
  4. GET 请求可被缓存

     POST 请求不会被缓存
    
  5. GET 请求保留在浏览器历史记录中

    POST 请求不会保留在浏览器历史记录中
    
  6. GET 请求可被收藏为书签

     POST 不能被收藏为书签
    
  7. GET请求只能进行url编码(application/x-www-form-urlencoded)

     POST支持多种编码方式(application/x-www-form-urlencoded 或 multipart/form-data。为二进制数据使用多重编码。)
    
  8. GET请求比较常见的方式是通过url地址栏请求

     POST最常见是通过form表单发送数据请求
    

进一步理解

post请求和get请求都是HTTP的请求方式,本质上来说并无区别,底层实现都是基于TCP/IP协议。

但是请求有各种各样的方式,于是HTTP对请求方式进行了划分和规定,于是产生了get、post处理请求的分工和区别。

此外还有搜索到另外一个区别:GET产生一个TCP数据包;POST产生两个TCP数据包。

对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);

而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

  1. GET与POST都有自己的语义,不能随便混用。

  2. 据研究,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。

  3. 并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值