本周在工作中处理了很多数据,比如查找联系方式相同的客户、查找宁波地区客户询价情况、多个库联系方式相同的关联起来等,在工作中学到很多数据处理的小技巧,总结一下,之后学到的也会补充进来~
我总结了处理数据的四个点:
- SQL处理
- 脚本处理(python/java)
- excel处理
- VSCode文本处理
SQL处理
SQL大家都会写,在这里介绍几个sql的函数和特性。
1.group_concat()函数
将group by产生的同一个分组中的值连接起来,返回一个字符串结果。语法:group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc ] [separator ‘分隔符’] ), 通过使用distinct可以排除重复值;如果希望对结果中的值进行排序,可以使用order by子句;separator是一个字符串值,缺省为一个逗号。
2.HAVING count(*) > 1
例如:select email from test group by email having count(*) > 1
在表test中以邮箱分组,分组后显示每组里面邮箱出现次数大于1的数据。
没有分组的情况下having和where 类似。有分组的时候,where对分组前内容过滤,having是分组后的内容进行筛选。having()里面可以写聚合函数。
3.now()
now() 函数返回当前的日期和时间。一般在修改数据时,会写入数据的更改时间,这时就会用到这个函数。
4.left join
即左连接,是以左表为基础,根据ON后给出的两表的条件将两表连接起来。结果会将左表所有的查询信息列出,而右表只列出ON后条件与左表满足的部分。左连接全称为左外连接,是外连接的一种,同样的还有右链接和内连接。
值得注意的点是,左连接时对右表的条件约束(where)应该写在 on 条件后面,对两张表的联合数据做的约束应写在联合表的where条件中。
5.LENGTH(LTRIM(cellphone))>0 and cellphone REGEXP “1[35678][0-9]{9}$”)
查找符合手机号正则的数据
脚本处理
这里说的脚本处理是指,在一些复杂的数据场景下,单写SQL比较复杂,执行慢,这时借助代码可以简化复杂场景,实现想要的数据效果。所有的计算机语言都可以帮助我们达到效果,我常用的有java和python,python刚接触不就,还在学习阶段,但是它深深的吸引了我的目光,它非常轻量,作为一种效率提升工具,python是一个很好的入门语言。因为它的语法简单,现成的库(轮子)很多,语言生态非常好。
本周使用python进行了数据处理:背景是需要找出系统中联系方式相同的客户,然后判断他们的跟进销售情况进行分组展示。通过SQL找到了联系方式重复的邮箱列表,同时使用group_concat()函数,把跟进销售集合罗列出来。
到这步后,把结果导出到csv格式文件,使用python来把销售的各种情况区分出来,图中销售id为0或者为空的皆为没有销售跟进的情况。
#!/usr/bin/python
# -*- coding: UTF-8 -*-
if __name__ == '__main__':
for line in open('/Users/dx/py_script/test/data.csv'):
line = line.strip('\n')
my_list = line.split(',')
cellphone = my_list[0]
sub_list = list(set(my_list[1:len(line) - 1]))
type = '未知'
if (len(sub_list) == 1 and int(sub_list[0]) == 0):
type = '多个联系人-无销售'
elif (len(sub_list) == 1 and int(sub_list[0]) != 0):
type = '多个联系人-销售相同'
elif (len(sub_list) == 2 and (int(sub_list[0]) == 0 or int(sub_list[1]) == 0)):
type = '多个联系人-一个有销售一个没有销售'
else:
type = '多个联系人-销售不同'
print(cellphone, type, sep=',')
# print(line, list, sub_list)
通过程序轻松的把重复的邮箱号,按销售一致、销售不一致、一个有销售一个无销售和都无销售跟进分组了,在这里我使用了csv格式的文件来处理数据,csv文件的特点主要有以下几个:
- 文件结构简单,基本上和文本的差别不大;
- 可以和microExcle进行转换,这是一个很大的优点,很容易进行察看模式转换,但是如果你同样的csv文件和将其转换成xls文件后的size比较就更加明白他在size上的优势了。
- 由于其简单的存储方式,一方面可以减少存储信息的容量,这样有利于网络传输以及客户端的再处 理;同时由于是一堆没有任何说明的数据,具备基本的安全性。
excel处理
在处理数据过程中使用excel的一些函数可以提高效率
1.VLOOKUP()函数
VLOOKUP函数是Excel中的一个纵向查找函数,它与LOOKUP函数和HLOOKUP函数属于一类函数,在工作中都有广泛应用,例如可以用来核对数据,多个表格之间快速导入数据等函数功能。功能是按列查找,最终返回该列所需查询序列所对应的值;与之对应的HLOOKUP是按行查找的。
我们来举个例子:
现在sheet1是user基本信息(userId,姓名、年龄),sheet2中是user的爱好(userId、爱好),两张表格可以关联的是userId,现在要在sheet1表格上把爱好显示出来,其实这个例子在数据库中通过表连接同样能达到,这里只是举个简单的例子,解释一下这个函数。
我们在sheet1第一行数据后面写入函数=VLOOKUP(A1,Sheet2!A:B,2,FALSE),下拉到所有列,就得到了结果数据
2.CONCAT()函数
concat(str1,str2,…)
返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。
通常我们要把excel中数据拼接成sql,然后执行,这时就会用到excel的CONCAT()函数,还举上面的例子,现在需要把表格中每个user的年龄修改为15,=CONCAT(“update user_info set age=15 where id = “,A2,”;”)
除此之外,还有:条件判断的IF函数,条件求和的SUMIF函数等常用函数,之后用到再补充进来。
VSCode文本处理
vs code是一个非常好用的工具,全称是Visual Studio Code,他不仅是开源的,还集成了git,支持各种文件格式(html/jade/css/less/sass/xml),智能提示强大。我在数据处理的时候,使用了他的文本处理功能:全文替换
例子:在处理数据时候,需要在多条数据中,把末尾逗号后面没有数据的补充一个0。
类似的处理还有:
- 在数据每行的收尾各加一个”引号
- 把一行数据中按逗号分割换行
- 处理日志的数据至json格式
欢迎大家把日常工作中处理数据时的小技巧发布在评论区,一起学习呀~
1 ↩︎
来源:oschina
链接:https://my.oschina.net/u/4293376/blog/4449151