欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

北京法院京牌小客车司法处置数据统计(Pandas)

程序员文章站 2022-06-05 20:15:12
...

最近我家参加了京牌小客车的司法拍卖。即参与京牌摇号失败的人可以参加司法处置的京牌小客车的竞拍。从2011年开始实施摇号政策以来参与摇号次数越多,越有可能成功竞拍。我们参与的是 2018年7月26日拍卖的这一次。在拍卖前夕,官网放出了此次参与竞拍的所有参与者的摇号次数,其中包括了大量的数据,有pdf 366页之多。所以我想利用Excel和Pandas对这些数据做一个整理和统计,看一看我家竞拍成功的可能性究竟有多大。

【代码在第二部分】

目录

1 数据预处理

2 利用pandas进行数据处理

3 遇到的问题


1 数据预处理

首先,看一下官网下载的数据是什么样的:

北京法院京牌小客车司法处置数据统计(Pandas)

这是一个包含366页数据的pdf……我最想知道的是,有多少人比我家摇号次数多。

接下来,我们要把这个pdf文件转换成excel文件。我尝试了两种方法:

1、在smallpdf.com 上转换 -->失败

2、用高级版福昕阅读器转换,在软件的这个位置:

北京法院京牌小客车司法处置数据统计(Pandas)

转换以后得到的Excel为(我去掉了头两行标题):

北京法院京牌小客车司法处置数据统计(Pandas)

可以看到这三列的信息合并为一列了。

所以,接下来的工作就是把三列拆分开来。

选择:数据->分列

北京法院京牌小客车司法处置数据统计(Pandas)

选择分隔符号:

北京法院京牌小客车司法处置数据统计(Pandas)

接下来选择用空格进行分割:

北京法院京牌小客车司法处置数据统计(Pandas)

完成后:

北京法院京牌小客车司法处置数据统计(Pandas)


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没办法比较注册时间),这个数字还是比较接近的,说明是一个有说服力的结果。

北京法院京牌小客车司法处置数据统计(Pandas)

根据上次2018年5月26日的竞拍结果,报名竞拍的人中有将近40%都选择了价格最低的那辆京牌小客车(我家避开了这个高峰):

北京法院京牌小客车司法处置数据统计(Pandas)

假设这次排在前面的1508中依然有40%的人竞拍最便宜的车,那么剩下的将会有905人竞拍39辆车,那么意味着平均每辆车都有23个高分竞争者!!


3 遇到的问题

以下是我在过程中遇到的问题和解决办法,放在这里作为参考:

ImportError: No module named 'xlrd'

相关标签: pandas