使用Spark SQL 探索“全国失信人数据”

“全国法院失信被执行人名单”,网址:http://shixin.court.gov.cn/,可供查询,用于惩罚失信人员。数据量有100多万,也算是大数据了。其中身份证号已被处理,并不能直接看到全部号码。本人承诺不将此数据用于非法用途和不正当用途,仅作为个人学习数据处理分析的数据源,不针对任何个人和组织。

数据字段如下:

被执行人姓名/名称
性别
年龄
身份证号码/组织机构代码
法定代表人或者负责人姓名
执行法院
省份
执行依据文号
立案时间
案号
做出执行依据单位
生效法律文书确定的义务
被执行人的履行情况
失信被执行人行为具体情形
发布时间
关注次数

数据保存为JSON格式,比如:

{"id":1000000,"iname":"潘靖","caseCode":"(2014)鄂京山执字第00035号","age":23,"sexy":"男","cardNum":"4208211992****4513","courtName":"京山县人民法院","areaName":"湖北","partyTypeName":"580","gistId":"(2012)鄂京山道字第162号民事判决书","regDate":"2014年02月24日","gistUnit":"湖北省京山县人民法院道交法庭","duty":"被告赔偿原告款401700元。","performance":"全部未履行","disruptTypeName":"其他有履行能力而拒不履行生效法律文书确定义务","publishDate":"2015年03月23日"}

失信人数据分为个人、机构。
为了能够方便将统计结果图表化,还是采用Zeppelin notebook来处理。
读入数据:

val json_text = sqlContext.jsonFile("/home/zhf/Downloads/shixin_person.txt")

输出JSON字段:

json_text: org.apache.spark.sql.DataFrame = [age: bigint, areaName: string, businessEntity: string, cardNum: string, caseCode: string, courtName: string, disruptTypeName: string, duty: string, gistId: string, gistUnit: string, id: bigint, iname: string, partyTypeName: string, performance: string, performedPart: string, publishDate: string, regDate: string, sexy: string, unperformPart: string]

将表缓存以便后续快速查询:

json_text.registerTempTable("shixinren")
sqlContext.cacheTable("shixinren")

总记录数:

%sql select count(*) from shixinren
1,415,577

机构数量:

#粗略地把名字长度大于5的认为是机构
%sql select count(*) from shixinren where length(iname) >= 5

200,513

其余的都认为是个人。

年龄分布:

%sql select age,count(*) from shixinren group by age order by age

年龄分布图
可见,发生纠纷的人主要是成年人,中年人占大多数。数据也有一些问题,可能是数据在填写时候的失误。
性别分布:

%sql select sexy,count(*) from shixinren group by sexy

性别分布
男性较多啊,男性从时候经济活动的比较多。还有部分缺失性别的数据。
省份分布:

%sql select areaName,count(*) c from shixinren group by areaName order by c desc 

省份分布
发生纠纷的主要是经济大省和人口大省,一方面这些地方的经济行为较多,另一方面这些地方的人法律意识较强(被告的法律意识不够强啊)。
处理案件最多的前10个法院:

%sql select courtName,count(*) c from shixinren group by courtName order by c desc limit 10

法院分布
好像都是浙江的法院,然并卵啊。

责任履行情况:

%sql select performance,count(*) from shixinren group by performance

责任履行情况
不履行责任的原因:

%sql select disruptTypeName,count(*) c from shixinren group by disruptTypeName order by c desc limit 10

不履行的原因
看来不履行法院判定的责任并不是没有能力啊。
不履行责任的姓氏TOP20:

%sql select substr(iname,0,1),count(*) c from shixinren where length(iname) <3 group by substr(iname,0,1) order by c desc limit 20

姓氏
为了方便,不统计复姓。排前的都是常见的姓氏。
法院立案的年份:

%sql select substr(regdate,0,4),count(*) c  from shixinren group by substr(regdate,0,4)

立案年份
近年来数量逐步增加,可不是好事啊。同样数据有少量错误。
立案月份分布:
月份分布

%sql select substr(substr(regdate,6,6),0,2),count(*) c from shixinren group by substr(substr(regdate,6,6),0,2) 

全年分布均匀,1月份最多,可能是到年头了,还不还款,只好到法院解决(没想到最后还是没能解决!)。

一个人/机构多次作为被告的情况:

#姓名、证件号码一致就认为是同一个被告了
%sql select count(*) from (select iname,cardNum,count(*) c from shixinren group by iname,cardNum having c>1)t
187,020

前10:

%sql select iname,cardNum,count(*) c from shixinren group by iname,cardNum having c>1 order by c desc limit 10

竟然有这么多,这种时候主要还是公司,但也有“牛人”啊。
多次被告

其中,案件的【生效法律文书确定的义务】如果通过分词,再统计词频,就可以知道哪些事件发生欠款的比较多了,用SQL的话,需要写UDF来分词,这里就不处理了。

发布了200 篇原创文章 · 获赞 16 · 访问量 68万+
展开阅读全文

综合查询被执行人,在发送请求的时候,为什么查询不出来数据啊。

09-21

http://zxgk.court.gov.cn/zhzxgk/index.html 这个是网址 httpclient = new DefaultHttpClient(); HttpPost httpPost = null; String responseBody = ""; try { httpPost = new HttpPost("http://zxgk.court.gov.cn/zhzxgk/newsearch"); httpPost.addHeader("Host", "zxgk.court.gov.cn"); httpPost.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:62.0) Gecko/20100101 Firefox/62.0"); httpPost.addHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); httpPost.addHeader("Referer", "http://zxgk.court.gov.cn/zhzxgk/index_form.do"); httpPost.addHeader("Upgrade-Insecure-Requests", "1"); httpPost.addHeader("cookie", "JSESSIONID="+JSESSIONID+"; Hm_lvt_d59e2ad63d3a37c53453b996cb7f8d4e=1537448832,1537491366; SESSION=a4f37b48-fc7b-4f1d-bd7f-7642ce9ca775; Hm_lpvt_d59e2ad63d3a37c53453b996cb7f8d4e=1537496415"); httpPost.addHeader("Content-Type", "application/x-www-form-urlencoded"); httpPost.addHeader("Connection", "keep-alive"); //httpPost.addHeader("Content-Length", "315"); httpPost.addHeader("Accept-Language", "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2"); List<NameValuePair> nvps2 = new ArrayList<NameValuePair>(); nvps2.add(new BasicNameValuePair("searchCourtName", "%E5%85%A8%E5%9B%BD%E6%B3%95%E9%99%A2%EF%BC%88%E5%8C%85%E5%90%AB%E5%9C%B0%E6%96%B9%E5%90%84%E7%BA%A7%E6%B3%95%E9%99%A2%EF%BC%89")); nvps2.add(new BasicNameValuePair("selectCourtId", "1")); nvps2.add(new BasicNameValuePair("selectCourtArrange", "1")); nvps2.add(new BasicNameValuePair("pname", "%E6%A2%81%E6%96%87%E6%A0%87")); nvps2.add(new BasicNameValuePair("cardNum", "440682198011166619")); nvps2.add(new BasicNameValuePair("j_captcha", imageCap.getVerificationCode())); nvps2.add(new BasicNameValuePair("countNameSelect", "")); nvps2.add(new BasicNameValuePair("captchaId", imageCap.getCaptchaId())); httpPost.setEntity(new UrlEncodedFormEntity(nvps2)); response = httpclient.execute(httpPost); responseBody = EntityUtils.toString(response.getEntity(), HTTP.UTF_8); System.out.println(responseBody); } catch (Exception e) { e.printStackTrace(); System.out.println("获取犯法信息失败!"); } finally { httpPost.abort(); } } 验证码校验通过了,响应也没报错,就是被执行人的数据没出来,可是网页请求就有数据,我把参数一模一样拿到程序跑也出不来数据,但是用开发模式重发就有数据,不知道到底我是错在哪里啊。 问答

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览