调研比赛中简单的数据转化处理操作(2) LeeRinji

背景提要

阅读此文之前,请先阅读”调研比赛中简单的数据转化处理操作(1)”,并一直向上追溯直至到达根节点或已访问节点。本文尝试使用问卷回答者提交问卷时的IP所在城市对问卷回答者进行分级处理。

在这一步骤中,考虑将回答者划分为多类群体:回答者或来自于一线城市、新一线城市、二线城市、三线城市、四线城市、五线城市。

判断依据

考虑过后,我们选择按照以下的逻辑对回答者其所来自的城市进行判断:

  • 使用2019年5月24日,第一财经新一线城市研究所提出的中国城市新分级名单作为城市分级依据。
  • 如果回答者的IP地址来自于克孜勒苏,那么对其跳过判断过程,不进入下一步骤。
  • 如果IP地址能明确表明回答者来自于某层级城市,那么将其划入该层级城市。
  • 对于未能明确IP所在位置的回答者和IP地址来自克孜勒苏的回答者进行手动判断处理。

实现代码

代码实现还是非常简单的。结果表明有16例情况需要手动处理,其他的数据中,来自于五线城市的回答者占比最少,约10%;来自于三线城市的回答者占比最多,约20%。

import csv

def get_city_name(file_name):
    data=[]
    for line in open(file_name,'r'):
        data.append(line)
    return data

city_1=get_city_name('city1.txt')
city_11=get_city_name('city11.txt')
city_2=get_city_name('city2.txt')
city_3=get_city_name('city3.txt')
city_4=get_city_name('city4.txt')
city_5=get_city_name('city5.txt')

str_ip=[]
str_gk=[]

with open('311.csv',encoding='utf-8') as f:
    f_csv=csv.reader(f)
    flag=False
    for row in f_csv:
        if flag==False:
            str1=str(row[5])
            str2=str(row[13])
            print(row[5])
            print(row[13])
            flag=True
        else:
            str_ip.append(row[5])
            str_gk.append(row[13])
            
str_ip_mod=[]
#IP Information Format: 120.229.70.203(广东-深圳)
for i in str_ip:
    i=i.split('-')[1][:-1]
    str_ip_mod.append(i)

print(str_ip_mod)

res=[9 for i in range(len(str_ip_mod))]
for i in range(len(str_ip_mod)):
    if str_ip_mod[i] != '克孜勒苏':
        for j in city_1:
            if str_ip_mod[i] in j:
                res[i]=0
        for j in city_11:
            if str_ip_mod[i] in j:
                res[i]=1
        for j in city_2:
            if str_ip_mod[i] in j:
                res[i]=2
        for j in city_3:
            if str_ip_mod[i] in j:
                res[i]=3
        for j in city_4:
            if str_ip_mod[i] in j:
                res[i]=4
        for j in city_5:
            if str_ip_mod[i] in j:
                res[i]=5

print(res)            
            
need_to_judge=[]
for i in range(10):
    count=0
    for j in range(len(res)):
        if i==res[j]:
            count=count+1
        if i==9:
            if res[j]==9:
                need_to_judge.append(j)
    print(count)

print(need_to_judge)
            
for i in need_to_judge:
    print(str(i)+":",str_ip[i],str_gk[i])

可能的调整

实际上我们使用的划分依据“中国城市新分级名单”的分级指标有相当商业方面的倾向,未必适用于我们所进行的研究,此外,新疆乌鲁木齐、克拉玛依在这一分级标准中分别只被分为了三线城市与五线城市,这似乎与当地经济发展水平有着一定的不符,考虑到我们调研问题的特殊性,其或许需要我们的手动调整。

另外,某些情况下我们可能需要对城市层级进行合并操作,例如将一线与新一线城市划为同一类,将二三线城市划为同一类,四五线城市划为同一类等等。

最后,有部分需要手动判断来源地的回答者给出的信息是不充分或者彼此矛盾的,这一部分的判断是需要加以一定关注的。