python2 json大数据_大数据反欺诈数据处理之CSV2JSON

原标题:大数据反欺诈数据处理之CSV2JSON

题主自从事反欺诈工作以来,接触了各行各业的客户。反欺诈的第一步是获取数据,而客户交付给我们的数据无外乎两种格式:一是JSON,二是CSV。

由于DataVisor的强项和特色是无监督算法,那么,哪种格式更合适呢?先来看两者的基本含义和特点。

JSON(Java Object Notation) 是基于Java编程语言ECMA-262 3rd Edition-December 1999标准的一种轻量级的数据交换格式。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、C#、Java、Java、Perl、Python等)。这些特性使JSON成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率),主要用于跟服务器进行交换数据。跟XML相类似,它是一种独立语言,在跨平台数据传输上有很大的优势。

#JSON的结构#

JSON建构有两种结构:

1. “名称/值”对的集合。不同的语言中,它被理解为对象,记录,结构,字典,哈希表,有键列表,或者关联数组 。

2. 值的有序列表。在大部分语言中,它被理解为数组。

#json的具体形式#

1. 对象是一个无序的“‘名称/值’对”集合。

2. 数组是值的有序集合。

3. 值可以是双引号括起来的字符串、数值、true、false、null、对象或者数组。这些结构可以嵌套。

4. 字符串是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。一个字符即一个单独的字符串。 字符串与C或者Java的字符串非常相似。

5. 数值也与C或者Java的数值非常相似。除去未曾使用的八进制与十六进制格式。除去一些编码细节。

CSV逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。

CSV文件格式的通用标准并不存在,但是在RFC 4180中有基础性的描述。使用的字符编码同样没有被指定,但是7-bitASCII是最基本的通用编码。

#csv的使用规则#

1. 开头是不留空,以行为单位。

2. 可含或不含列名,含列名则居文件第一行。

3. 一行数据不跨行,无空行。

4. 以半角逗号(即,)作分隔符,列为空也要表达其存在。

5. 列内容如存在半角逗号(即,)则用半角双引号(即"")将该字段值包含起来。

6. 列内容如存在半角引号(即")则应替换成半角双引号("")转义,并用半角引号(即"")将该字段值包含起来。

7. 文件读写时引号,逗号操作规则互逆。

8. 内码格式不限,可为 ASCII、Unicode 或者其他。

9. 不支持特殊字符

#CSV的缺点#

1. 服务器端在中间插入删除数据时要小心,页面很可能会错位;

举例,如果服务器端在中间(如index 2处)而非尾端插入新列。客户端代码除了新增处理新数据的代码外,index 2以后的数据都必须修改index号。这不符合软件的开闭原则(对扩展开发,对修改封闭)即使你保证绝不会在中间插入新列,保证新列永远插入到末尾,你也无法保证删除数据列永远只删末尾列(如果你删除了中间某列数据,可怜的客户端程序员将修改该列之后的所有列的index,为它们加1)

2. CSV里的数据无法看出关联性。

即使你保证永远只在末尾插入新列,并保证永远不删除旧列,也不是完美无缺的格式。比如在CSV里各列数据都是平等的,你无法看出有任何关联性。在XML,JSON里可以体现出数据的关联性。

总结:如果你的数据不会频繁新增删除列,也不在乎关联性,那么CSV以其简单易懂的格式,和最快的传输性能,使它成为你组织数据的首选。而如果你需要频繁变换数据列,需要key-value结构,那么JSON格式以其轻巧灵活的结构应该成为首选。

想必不用题主说,各位看官已经知道结论了,是的,我们更倾向于JSON。主要是因为通常运营数据和交易数据的字段众多,少则几十,多则几百。客户在提供数据时,或因为没有完全理解需求,或因为数据提供有遗漏,或因为某个时间点前未采集此数据而由于风控要求从此时间点后开始采集,增加/删除某字段是整个模型运算中的常态。若采用CSV,不仅不方便,而且很容易出错。

为了便于各位看官将CSV转换成JSON,分享以下Python代码:

csv2json.py

为了便于复制,将代码块粘贴如下:

#-*- coding:utf-8 -*-importosimportos.pathimportcsvrootdir="/Users/ying/Documents"# folder stores csv filesforparent,dirnames,filenamesinos.walk(rootdir):forfilenameinfilenames:abs_path=os.path.join(parent,filename)if".csv"inabs_path:printabs_path#对每个文件进行处理withopen(abs_path,'rb')ascsvfile:reader=csv.reader(csvfile)rows=[rowforrowinreader]header=rows[0]forrowOneinrows[1:]:json_row={}foriinrange(0,len(rowOne)):json_row[header[i]]=rowOne[i]printjson_row

注:更改csv存储的文件夹地址,即可方便的将csv转成Python返回搜狐,查看更多

责任编辑:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值