税金を払っていないやつのリストを分析してください.
国税庁は、高額滞納者リストをホームページで公開している.ただし、個人がこの情報で滞納者の名誉を傷つけると、問題になりますのでご注意ください!
夜眠れなくて退屈な時にやったデータの収集と分析.
第1章。スクロール
個人滞納者
上記のリンクでは、個人の高額滞納者のリストを表示できます.
全部で20個の1658ページがあり、ツールを借りて収集できる情報が必要です.
実際,BS 4を用いてスクロールしようとしたが,ページ移動が自由ではないため,Seleniumを介してクリックイベント収集を利用する方法を用いた.df = pd.DataFrame(columns = ['No','공개년도','성명','연령',
'상호','직업(업종)','체납자 주소',
'총 체납액','세목','납기','체납건수','체납요지'])
表中の列は12個あり、以下に示すようにデータフレームが割り当てられている.for click in range(1, 1659):
for i in range(1, 20+1):
inputs = []
for j in range(1, 12+1):
inputs.append(driver.find_element_by_xpath(f'//*[@id="wrap"]/div/div[2]/table/tbody/tr[{i}]/td[{j}]').text)
df = df.append(pd.DataFrame([inputs], columns = df.columns.to_list()))
if click == 10:
driver.find_element_by_xpath(f'//*[@id="wrap"]/div/div[2]/form/div/a[4]').click()
elif click%10 == 0:
driver.find_element_by_xpath(f'//*[@id="wrap"]/div/div[2]/form/div/a[5]').click()
else:
driver.find_element_by_xpath(f'//*[@id="wrap"]/div/div[2]/form/div/div/a[{click%10}]').click()
スクロールを行うときに不便な点は、10ページ目で次のページを移動するためにボタンにクリックイベントを割り当てる必要があることですが、1~10ページ目のクリックイベントxpathは20ページ以上のクリックボタンxpathとは異なるため問題になります.幸い、最初の10ページしか使用していないので、クリックイベントを簡単に使用できます.
第二章。ぶんせき
分析の内容は実は何もありません.df.dtypes
---
No int64
공개년도 int64
성명 object
연령 float64
상호 object
직업(업종) object
체납자 주소 object
총 체납액 object
세목 object
납기 object
체납건수 float64
체납요지 object
dtype: object
データ型の合計債務部分は、「1000」などの区切り記号を含む連続変数であり、オブジェクトとみなされ、削除され、intタイプに変換されます.df['총 체납액'].replace('[^0-9]','', regex=True, inplace=True)
df = df.astype({'총 체납액' : 'int'})
df.info()
---
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 33150 entries, 0 to 33149
Data columns (total 12 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 No 33150 non-null int64
1 공개년도 33150 non-null int64
2 성명 33150 non-null object
3 연령 33099 non-null float64
4 상호 22791 non-null object
5 직업(업종) 26200 non-null object
6 체납자 주소 33150 non-null object
7 총 체납액 33150 non-null int64
8 세목 33150 non-null object
9 납기 33150 non-null object
10 체납건수 33145 non-null float64
11 체납요지 33150 non-null object
dtypes: float64(2), int64(3), object(7)
memory usage: 3.0+ MB
公開年は2004年から累計滞納額が最低205万元、最大163299万元だった.巨大な滞納者といえる.
好奇心で確認しました.df[df.연령 < 20]
相続、譲渡所得税などがあります.
今、決済価格を確認してみましょう.df.isna().sum()
---
No 0
공개년도 0
성명 0
연령 51
상호 10359
직업(업종) 6950
체납자 주소 0
총 체납액 0
세목 0
납기 0
체납건수 5
체납요지 0
dtype: int64
商号や職業欄がたくさん空いていて、大きな問題はないはずです.(個人滞納者なので)
主にどんな職業/職業があるか見てみましょう.sorted_dict = sorted(dict.items(), key = lambda item: item[1], reverse = True)
print(sorted_dict[:20])
---
[(nan, 6950), ('건설업', 1737), ('제조업', 1611),
('서비스', 1582), ('도소매', 1536), ('제조', 1220),
('부동산', 1117), ('부동산업', 947), ('무직', 796),
('건설', 723), ('도매', 720), ('음식', 637),
('소매', 569), ('소매업', 450), ('서비스업', 369),
('도소매업', 323), ('도매업', 306), ('도매 및 소매업', 304),
('음식점업', 198), ('임대', 160)]
上位20位を選び、Nanは6950で1位で、主に製造、不動産、卸売などだった.
その中のNan値と無職が気になるので1人20個確認しましょうdf[df['직업(업종)'].isna()]
df[df['직업(업종)'] == '무직'][:20]
はい.ほとんどが所得税、相続税で、個人所得税です.
今、どの地域の滞納者が一番多いか確認してみましょう.dict = {}
for i in df['지역']:
dict[i] = dict.get(i, 0) + 1
sorted_dict = sorted(dict.items(), key = lambda item: item[1], reverse = True)
---
[('경기', 6817),
('서울', 4653),
('경기도', 4309),
('서울특별시', 2359),
('경남', 1516),
('인천', 1417),
('충남', 1314),
('부산', 1033),
('경북', 948),
('인천광역시', 935),
('충북', 784),
('부산광역시', 736),
('전북', 577),
('전남', 574),
('강원', 560),
('대구광역시', 467),
('대구', 466),
('대전', 400),
('대전광역시', 320),
('경상남도', 306),
('강원도', 294),
('광주', 285),
('광주광역시', 267),
('울산', 259),
('울산광역시', 250),
('제주특별자치도', 215),
('경상북도', 200),
('충청남도', 198),
('제주', 188),
('전라북도', 121),
('전라남도', 115),
('충청북도', 110),
('세종', 80),
('세종특별자치시', 69),
('서울시', 5),
('제주도', 2),
('대구역시', 1)]
京畿道ソウル特別市(キョンギド·ソウル特別市)などでは一致しなかった.
圧倒的な1位はソウル、2位というのが目につく.
今眠いから寝ます.
Reference
この問題について(税金を払っていないやつのリストを分析してください.), 我々は、より多くの情報をここで見つけました
https://velog.io/@dev_halo/세금안낸놈들-명단을-분석해보자
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
df = pd.DataFrame(columns = ['No','공개년도','성명','연령',
'상호','직업(업종)','체납자 주소',
'총 체납액','세목','납기','체납건수','체납요지'])
for click in range(1, 1659):
for i in range(1, 20+1):
inputs = []
for j in range(1, 12+1):
inputs.append(driver.find_element_by_xpath(f'//*[@id="wrap"]/div/div[2]/table/tbody/tr[{i}]/td[{j}]').text)
df = df.append(pd.DataFrame([inputs], columns = df.columns.to_list()))
if click == 10:
driver.find_element_by_xpath(f'//*[@id="wrap"]/div/div[2]/form/div/a[4]').click()
elif click%10 == 0:
driver.find_element_by_xpath(f'//*[@id="wrap"]/div/div[2]/form/div/a[5]').click()
else:
driver.find_element_by_xpath(f'//*[@id="wrap"]/div/div[2]/form/div/div/a[{click%10}]').click()
分析の内容は実は何もありません.
df.dtypes
---
No int64
공개년도 int64
성명 object
연령 float64
상호 object
직업(업종) object
체납자 주소 object
총 체납액 object
세목 object
납기 object
체납건수 float64
체납요지 object
dtype: object
データ型の合計債務部分は、「1000」などの区切り記号を含む連続変数であり、オブジェクトとみなされ、削除され、intタイプに変換されます.df['총 체납액'].replace('[^0-9]','', regex=True, inplace=True)
df = df.astype({'총 체납액' : 'int'})
df.info()
---
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 33150 entries, 0 to 33149
Data columns (total 12 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 No 33150 non-null int64
1 공개년도 33150 non-null int64
2 성명 33150 non-null object
3 연령 33099 non-null float64
4 상호 22791 non-null object
5 직업(업종) 26200 non-null object
6 체납자 주소 33150 non-null object
7 총 체납액 33150 non-null int64
8 세목 33150 non-null object
9 납기 33150 non-null object
10 체납건수 33145 non-null float64
11 체납요지 33150 non-null object
dtypes: float64(2), int64(3), object(7)
memory usage: 3.0+ MB
公開年は2004年から累計滞納額が最低205万元、最大163299万元だった.巨大な滞納者といえる.
好奇心で確認しました.
df[df.연령 < 20]
相続、譲渡所得税などがあります.
今、決済価格を確認してみましょう.
df.isna().sum()
---
No 0
공개년도 0
성명 0
연령 51
상호 10359
직업(업종) 6950
체납자 주소 0
총 체납액 0
세목 0
납기 0
체납건수 5
체납요지 0
dtype: int64
商号や職業欄がたくさん空いていて、大きな問題はないはずです.(個人滞納者なので)主にどんな職業/職業があるか見てみましょう.
sorted_dict = sorted(dict.items(), key = lambda item: item[1], reverse = True)
print(sorted_dict[:20])
---
[(nan, 6950), ('건설업', 1737), ('제조업', 1611),
('서비스', 1582), ('도소매', 1536), ('제조', 1220),
('부동산', 1117), ('부동산업', 947), ('무직', 796),
('건설', 723), ('도매', 720), ('음식', 637),
('소매', 569), ('소매업', 450), ('서비스업', 369),
('도소매업', 323), ('도매업', 306), ('도매 및 소매업', 304),
('음식점업', 198), ('임대', 160)]
上位20位を選び、Nanは6950で1位で、主に製造、不動産、卸売などだった.その中のNan値と無職が気になるので1人20個確認しましょう
df[df['직업(업종)'].isna()]
df[df['직업(업종)'] == '무직'][:20]
はい.ほとんどが所得税、相続税で、個人所得税です.
今、どの地域の滞納者が一番多いか確認してみましょう.
dict = {}
for i in df['지역']:
dict[i] = dict.get(i, 0) + 1
sorted_dict = sorted(dict.items(), key = lambda item: item[1], reverse = True)
---
[('경기', 6817),
('서울', 4653),
('경기도', 4309),
('서울특별시', 2359),
('경남', 1516),
('인천', 1417),
('충남', 1314),
('부산', 1033),
('경북', 948),
('인천광역시', 935),
('충북', 784),
('부산광역시', 736),
('전북', 577),
('전남', 574),
('강원', 560),
('대구광역시', 467),
('대구', 466),
('대전', 400),
('대전광역시', 320),
('경상남도', 306),
('강원도', 294),
('광주', 285),
('광주광역시', 267),
('울산', 259),
('울산광역시', 250),
('제주특별자치도', 215),
('경상북도', 200),
('충청남도', 198),
('제주', 188),
('전라북도', 121),
('전라남도', 115),
('충청북도', 110),
('세종', 80),
('세종특별자치시', 69),
('서울시', 5),
('제주도', 2),
('대구역시', 1)]
京畿道ソウル特別市(キョンギド·ソウル特別市)などでは一致しなかった.圧倒的な1位はソウル、2位というのが目につく.
今眠いから寝ます.
Reference
この問題について(税金を払っていないやつのリストを分析してください.), 我々は、より多くの情報をここで見つけました https://velog.io/@dev_halo/세금안낸놈들-명단을-분석해보자テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol