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