「全國法院失信被執行人名單」,網址:http://shixin.court.gov.cn/,可供查詢,用於懲罰失信人員。數據量有100多萬,也算是大數據了。其中身份證號已被處理,並不能直接看到所有號碼。本文僅做爲我的學習數據處理分析,不針對任何我的和組織。sql
數據字段以下:apache
被執行人姓名/名稱
性別
年齡
身份證號碼/組織機構代碼
法定表明人或者負責人姓名
執行法院
省份
執行依據文號
立案時間
案號
作出執行依據單位
生效法律文書肯定的義務
被執行人的履行狀況
失信被執行人行爲具體情形
發佈時間
關注次數json
數據保存爲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來處理。
讀入數據:oop
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")
總記錄數:spa
%sql select count(*) from shixinren
1,415,577
機構數量:.net
#粗略地把名字長度大於5的認爲是機構 %sql select count(*) from shixinren where length(iname) >= 5
200,513code
其他的都認爲是我的。
年齡分佈:
%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來分詞,這裏就不處理了。