新利国际官方线路
  咨询电话:15152633123

新利88手机版APP

数据清洗(一):关联数据的替换

    有时我们的数据里充满了各种简写或标记,而在处理、展示数据的过程中,我们需要的是数据各字段的详细名称,因此就需要对我们的数据集进行清洗与处理。前些天遇到一个某图书馆借阅数据,给出的要求是统计借阅图书的类别,数据里有每次借阅书籍的中图分类号,如"A122","A"表示马列毛邓,"A1"表示马克思恩格斯著作,"A12"表示单行著作,"A122"表示1848~1863年间。每一本书都有一个独立的分类号,按照需求只需要对分类号的第一个字母,也即分类号一级索引进行统计,并将统计结果里的字母用中文替换。因此这是一个入门级别的小任务,用Python就可以轻易的实现。

 

一、文件导入

    1.1 源文件

        源文件是一个80万行的Excel(囧),索引号在某一列下,我需要处理的数据大概有四万行。将其导入至sourceData.csv文件,便于读取,数据格式如下图。

    1.2 分类号-中文映射文件

        在百度上查询得到各分类号与中文名称之间的对应关系,存放在"中图分类法.txt"文件中。

    1.3 源代码

    with open("中图分类法.txt""r",encoding="GBK", errors="ignore") as f:      bookFile = f.readlines()      # print(bookFile)      with open("sourceData.csv""r",encoding="GBK", errors="ignore") as f:      dataFile = f.readlines()      # print(dataFile)  

 

二、词频统计

    2.1 提取一级索引号

        我们按行读取的数据形如"I267/121",而我们只需要最开始的字母,因此提取每行第一个元素即可。统计词频我们可以声明一个字典变量,将每一个一级索引作为一个key,如果字典里有该key,则值+1,否则创建key.

    newdict = {}  for line in dataFile:      # print(line[0])      if line[0] in newdict:          newdict[line[0]] += 1      else:          newdict[line[0]] = 1  

    2.2 字典排序

        为了后面能直观地看出各类别图书借阅数量的异同,我们在此将该字典按照值的大小降序排列。在此需要用上sorted(dic,value,reverse)函数。由于sorted函数并不改变原字典,所以需要接受该函数的返回值——排列后的列表。

    sortedDict = sorted(newdict.items(),key = lambda x:x[1],reverse = True)  

 

三、映射关系的替换

    3.1 分类号数据字典化

        由于分类号及其对应关系的数据为一行以逗号","隔开的文本,所以需要将其转换成字典。该数据行形如"A,马列毛邓",结尾还有一个换行符,为了将其变为字典,就需要在剔除换行符的情况下以逗号将其分隔为两个字符串。

    dict = {}  for line in bookFile:      #print(line.strip().split(","))      dict[line.strip().split(",")[0]] = line.strip().split(",")[1]  print(dict)  

    3.2 字符与文本的映射

        所以我们现在有两个变量,一个是存储了分类号与其对应中文的字典:{"A": "马列毛邓", "B": "哲学宗教"...},一个是排序好的列表,列表元素为索引号及出现次数。我们现在需要将索引号替换为字典中对应索引号的值,将结果用两个变量表示(方便后面画图)。

    attr = []  v1 = []      for class2 in sortedDict:      # print(class2[0]+str(class2[1]))      if class2[0] in dict:          attr.append(dict[class2[0]])          v1.append(class2[1])      print(attr)  print(v1)  

        结果如下(部分):

 

四、数据可视化

    这里我用到了第三方库pyecharts,这个库是一个生成Echarts图表的python类库,功能强大,图表也美观。利用该库画图除了可参考官方文档之外,还可参考这篇——各种图表的详细代码。

    bar = Bar("条形图","各类别图书的教师借阅次数",width=1400, height=700)  bar.add("借阅次数统计图",attr,v1,mark_point=["min""max"],is_label_show=True,xaxis_interval=0,xaxis_rotate=-30,is_more_utils=True)  bar.render()  

    第二、三个参数为坐标轴的值。运行后在源码所在目录生成一个网页,里面就是动态的可视化图表。