半结构化数据处理,有兴趣了解一下?

2024-04-17 08:18

本文主要是介绍半结构化数据处理,有兴趣了解一下?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

640?wx_fmt=gif

上回书说道我们对于常见的结构化数据采用pandas模块可以对其进行处理,那今天我们再来谈谈对于半结构化的数据,对于它,我们应该怎么办?

 

首先我们需要了解一下,什么是半结构化的数据?

和普通纯文本相比,半结构化数据具有一定的结构性,但和具有严格理论模型的关系数据库的数据相比。OEM(Objectexchange Model)是一种典型的半结构化数据模型。

半结构化数据(semi-structured data)。在做一个信息系统设计时肯定会涉及到数据的存储,一般我们都会将系统信息保存在某个指定的关系数据库中。我们会将数据按业务分类,并设计相应的表,然后将对应的信息保存到相应的表中。比如我们做一个业务系统,要保存员工基本信息:工号、姓名、性别、出生日期等等;我们就会建立一个对应的staff表。

但不是系统中所有信息都可以这样简单的用一个表中的字段就能对应的。

它和结构化的数据相比,结构变化很大。因为我们要了解数据的细节所以不能将数据简单的组织成一个文件按照非结构化数据处理,由于结构变化很大也不能够简单的建立一个表和他对应。

先举一个半结构化的数据的例子,比如存储员工的简历。不像员工基本信息那样一致每个员工的简历大不相同。有的员工的简历很简单,比如只包括教育情况;有的员工的简历却很复杂,比如包括工作情况、婚姻情况、出入境情况、户口迁移情况、党籍情况、技术技能等等。还有可能有一些我们没有预料的信息。通常我们要完整的保存这些信息并不是很容易的,因为我们不会希望系统中的表的结构在系统的运行期间进行变更。

 

首先我们从数据表中取出这样的一串字符串:

num":"170****3656",

                                "net_flow":"0.0",

                                "total_amount":"310.0",

                                "call_out_time":"40.96666666666667",

                                "cell_mth":"2017-05",

                                "cell_loc":"宁夏",

                                "call_cnt":"105",

                                "cell_operator_zh":"中国联通",

                                "call_out_cnt":"44",

                                "cell_operator":"chinaunicom",

                                "call_in_time":"199.75",

                                "call_in_cnt":"61"

                }, {

                                "sms_cnt":"5",

                                "cell_phone_num":"170****3656",

                                "net_flow":"0.0",

                                "total_amount":"216.1",

                                "call_out_time":"69.9",

                                "cell_mth":"2017-04",

                                "cell_loc":"宁夏",

                                "call_cnt":"125",

                                "cell_operato[{

                "phone_num":"170****3656",

                "behavior":[{

                                "sms_cnt":"1",

                                "cell_phone_num":"170****3656",

                                "net_flow":"0.0",

                                "total_amount":"-1.0",

                                "call_out_time":"0.0",

                                "cell_mth":"2017-08",

                                "cell_loc":"宁夏",

                                "call_cnt":"29",

                                "cell_operator_zh":"中国联通",

                                "call_out_cnt":"0",

                                "cell_operator":"chinaunicom",

                                "call_in_time":"28.366666666666667",

                                "call_in_cnt":"29"

                }, {

                                "sms_cnt":"13",

                                "cell_phone_num":"170****3656",

                                "net_flow":"0.0",

                                "total_amount":"228.28",

                                "call_out_time":"13.55",

                                "cell_mth":"2017-07",

                                "cell_loc":"宁夏",

                                "call_cnt":"74",

                                "cell_operator_zh":"中国联通",

                                "call_out_cnt":"17",

                                "cell_operator":"chinaunicom",

                                "call_in_time":"46.05",

                                "call_in_cnt":"57"

                }, {

                                "sms_cnt":"8",

                                "cell_phone_num":"170****3656",

                                "net_flow":"0.0",

                                "total_amount":"240.0",

                                "call_out_time":"22.4",

                                "cell_mth":"2017-06",

                                "cell_loc":"宁夏",

                                "call_cnt":"107",

                                "cell_operator_zh":"中国联通",

                                "call_out_cnt":"40",

                                "cell_operator":"chinaunicom",

                                "call_in_time":"48.516666666666666",

                                "call_in_cnt":"67"

                }, {

                                "sms_cnt":"8",

                                "cell_phone_r_zh":"中国联通",

                                "call_out_cnt":"46",

                                "cell_operator":"chinaunicom",

                                "call_in_time":"163.68333333333334",

                                "call_in_cnt":"79"

                }, {

                                "sms_cnt":"2",

                                "cell_phone_num":"170****3656",

                                "net_flow":"0.0",

                                "total_amount":"223.7",

                                "call_out_time":"21.933333333333334",

                                "cell_mth":"2017-03",

                                "cell_loc":"宁夏",

                                "call_cnt":"87",

                                "cell_operator_zh":"中国联通",

                                "call_out_cnt":"26",

                                "cell_operator":"chinaunicom",

                                "call_in_time":"76.38333333333334",

                                "call_in_cnt":"61"

                }]

}]

 

我们需要解析这个字符串,然后做一次聚合操作(聚合这里就不讲了)。

在此之前我们先导入我们需要用到的模块:

640?wx_fmt=png

那么首先第一个问题,这个字符串非常像json文件,但却不是一个标准的json,所以我们要将他进行正确的格式化,那么现在要做的事情就是将他变成一个标准的json格式。

我们把以上那条字符串叫做string1.

String_format=string1[1:-1]

之后我们就可以将这个字符串转化成Python中的字典(采用json模块的loads方法):


Data_format=json.loads(String_format)

观察一下这个字符串:behavior对应的值是一个列表,在列表的每个数据段都有一些相同的key,那对于此我们应该如何处理。

首先,取出behavior中的值:


Behavior= Data_format[‘behavior’]

然后通过DataFrame转化成数据格式:


Data=pd.DataFrame(Behavior)

之后我们发现以上的数据phone_num是惟一的,我们先把phone_num取出来:


phone_num=[i[‘phone_num’] for i in String_format.apply(json.loads)]

取出string1中的字段,并转化成dataframe,之后将有效字段进行关联:

Data=pd.concat([pd.DataFrame(j) for j in [i[‘behavior’] for i in String_format.apply(json.loads)]])


Userinfo=pd.concat([pd.Series(phone_num,name=’ phone_num’),’Id’],axis= 1)


Connect_data = pd.merge(Data,Userinfo, left_on ='cell_phone_num', right_on='phone_num')

640?wx_fmt=png

这样数据就处理完毕了。

这就是简单的半结构化数据处理。希望对大家有所帮助。

 

 

 

640?wx_fmt=jpeg

听说有气质的人都会关注这个公众号!

640?wx_fmt=jpeg

这篇关于半结构化数据处理,有兴趣了解一下?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/911264

相关文章

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

速了解MySQL 数据库不同存储引擎

快速了解MySQL 数据库不同存储引擎 MySQL 提供了多种存储引擎,每种存储引擎都有其特定的特性和适用场景。了解这些存储引擎的特性,有助于在设计数据库时做出合理的选择。以下是 MySQL 中几种常用存储引擎的详细介绍。 1. InnoDB 特点: 事务支持:InnoDB 是一个支持 ACID(原子性、一致性、隔离性、持久性)事务的存储引擎。行级锁:使用行级锁来提高并发性,减少锁竞争

Python:豆瓣电影商业数据分析-爬取全数据【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】

**爬取豆瓣电影信息,分析近年电影行业的发展情况** 本文是完整的数据分析展现,代码有完整版,包含豆瓣电影爬取的具体方式【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】   最近MBA在学习《商业数据分析》,大实训作业给了数据要进行数据分析,所以先拿豆瓣电影练练手,网络上爬取豆瓣电影TOP250较多,但对于豆瓣电影全数据的爬取教程很少,所以我自己做一版。 目

【详细介绍一下GEE】

GEE(Google Earth Engine)是一个强大的云计算平台,它允许用户处理和分析大规模的地球科学数据集,如卫星图像、气候模型输出等。以下是对GEE用法的详细介绍: 一、平台访问与账户设置 访问GEE平台: 用户可以通过访问Google Earth Engine的官方网站来开始使用GEE。 创建账户: 用户需要注册并登录Google账户,然后申请访问GEE平台。申请过程可能需要提

PHP: 深入了解一致性哈希

前言 随着memcache、redis以及其它一些内存K/V数据库的流行,一致性哈希也越来越被开发者所了解。因为这些内存K/V数据库大多不提供分布式支持(本文以redis为例),所以如果要提供多台redis server来提供服务的话,就需要解决如何将数据分散到redis server,并且在增减redis server时如何最大化的不令数据重新分布,这将是本文讨论的范畴。 取模算法 取模运

Weex入门教程之1,了解Weex

【资料合集】Weex Conf回顾集锦:讲义PDF+活动视频! PDF分享:链接:http://pan.baidu.com/s/1hr8RniG 密码:fa3j 官方教程:https://weex-project.io/cn/v-0.10/guide/index.html 用意 主要是介绍Weex,并未涉及开发方面,好让我们开始开发之前充分地了解Weex到底是个什么。 以下描述主要摘取于

Java了解相对较多!

我是对Java了解相对较多,而对C#则是因工作需要才去看了一下,C#跟Java在语法上非常相似,而最初让我比较困惑的就是委托、事件部分,相信大多数初学者也有类似的困惑。经过跟Java的对比学习,发现这其实跟Java的监听、事件是等同的,只是表述上不同罢了。   委托+事件是观察者模式的一个典型例子,所谓的委托其实就是观察者,它会关心某种事件,一旦这种事件被触发,这个观察者就会行动。   下

使用WebP解决网站加载速度问题,这些细节你需要了解

说到网页的图片格式,大家最常想到的可能是JPEG、PNG,毕竟这些老牌格式陪伴我们这么多年。然而,近几年,有一个格式悄悄崭露头角,那就是WebP。很多人可能听说过,但到底它好在哪?你的网站或者项目是不是也应该用WebP呢?别着急,今天咱们就来好好聊聊WebP这个图片格式的前世今生,以及它值不值得你花时间去用。 为什么会有WebP? 你有没有遇到过这样的情况?网页加载特别慢,尤其是那

初步了解VTK装配体

VTK还不太了解,根据资料, vtk.vtkAssembly 是 VTK库中的一个重要类,允许通过将多个vtkActor对象组合在一起来创建复杂的3D模型。 import vtkimport mathfrom vtk.util.colors import *filenames = ["cylinder.stl","sphere.stl","torus.stl"]dt = 1.0renW

仕考网:结构化面试流程介绍

(一)结构化面试 结构化面试,也叫做标准化面试,考官按照预先设定好的一套试题以问答方式与应试者当面交谈,根据应试者的言语、行为表现,对其相关能力和个性特征作出相应评价。 (二)考试流程 抵达考场——审核抽签——面试候考——进入考场——面试答题——考生退场——计分审核 (三)答题技巧 1.声音洪亮,音量可以比平时说话声音大一点。 2.语速不要过快,语速快容易卡顿,而且不便于考官听清答