税金を払っていないやつのリストを分析してください.


  • リストの公開者の一部または全部を使用して特定の人の名誉を損なう場合は、刑事上の名誉毀損罪で処罰されたり、民事上の損害賠償責任を負う可能性があります.
  • 高額滞納者名簿を公開する
    国税庁は、高額滞納者リストをホームページで公開している.ただし、個人がこの情報で滞納者の名誉を傷つけると、問題になりますのでご注意ください!
    夜眠れなくて退屈な時にやったデータの収集と分析.

    第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位というのが目につく.
    今眠いから寝ます.