北京法院京牌小客车司法处置数据统计(Pandas)
最近我家参加了京牌小客车的司法拍卖。即参与京牌摇号失败的人可以参加司法处置的京牌小客车的竞拍。从2011年开始实施摇号政策以来参与摇号次数越多,越有可能成功竞拍。我们参与的是 2018年7月26日拍卖的这一次。在拍卖前夕,官网放出了此次参与竞拍的所有参与者的摇号次数,其中包括了大量的数据,有pdf 366页之多。所以我想利用Excel和Pandas对这些数据做一个整理和统计,看一看我家竞拍成功的可能性究竟有多大。
【代码在第二部分】
目录
1 数据预处理
首先,看一下官网下载的数据是什么样的:
这是一个包含366页数据的pdf……我最想知道的是,有多少人比我家摇号次数多。
接下来,我们要把这个pdf文件转换成excel文件。我尝试了两种方法:
1、在smallpdf.com 上转换 -->失败
2、用高级版福昕阅读器转换,在软件的这个位置:
转换以后得到的Excel为(我去掉了头两行标题):
可以看到这三列的信息合并为一列了。
所以,接下来的工作就是把三列拆分开来。
选择:数据->分列
选择分隔符号:
接下来选择用空格进行分割:
完成后:
2 利用pandas进行数据处理
给出anaconda安装pandas的指令:
进入虚拟环境(以我的环境名,env3为例):
activate env3
安装pandas:
conda install pandas
先看一眼这次竞拍到底有多少人参加:
import pandas as pd
df = pd.read_excel('buyerlist_201807.xlsx') # 读取数据
df = pd.DataFrame(df) # 构造数据
print(df.shape[0]) # 看一下数据大小
结果是。。一万五千多人!!!
15345
看一下数据的索引和前几行:
print(df.head(3)) # 前三排数据
摇号申请编码 摇号次数 摇号注册时间 Unnamed: 3
0 566510581**** 7 2016-07-05 16:41:31.764000
1 826510012**** 63 2011-01-03 22:30:23.369000
2 956810166**** 39 2012-04-13 22:27:02.804000
司法拍卖设置的规则是,假如两位竞拍者的摇号次数相同,优先摇号注册时间长的一位竞拍。而我家的摇号次数是61,注册时间为2011-01-17 19:32:25.587,确定有多少人比我家更有优势的代码是:
import pandas as pd
df = pd.read_excel('buyerlist_201807.xlsx') # 读取数据
df = pd.DataFrame(df) # 构造数据
# print(df.shape[0]) # 看一下数据大小
# print(df.head(3)) # 前三排数据
m = 0
for i in range(df.shape[0]):
if df.iloc[i, 1] > 61: # iloc用于提取数据中指定的某一行某一列
m += 1
elif df.iloc[i, 1] == 61:
date = str(df.iloc[i, 2])[:10]
date = ''.join(date.split('-'))
if int(date) < 20110117:
m += 1
elif int(date) == 20110117:
time = str(df.iloc[5, 3])
time = ''.join(time.split(':'))
if int(date) < 193225.587:
m += 1
print(m)
得到的结果是(我家前面有多少人):
1508
!!!是一个让人心碎的结果了(这批司法拍卖一共才有40辆车)。。。
用excel排序一下(excel没办法比较注册时间),这个数字还是比较接近的,说明是一个有说服力的结果。
根据上次2018年5月26日的竞拍结果,报名竞拍的人中有将近40%都选择了价格最低的那辆京牌小客车(我家避开了这个高峰):
假设这次排在前面的1508中依然有40%的人竞拍最便宜的车,那么剩下的将会有905人竞拍39辆车,那么意味着平均每辆车都有23个高分竞争者!!
3 遇到的问题
以下是我在过程中遇到的问题和解决办法,放在这里作为参考: