๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Study_note(zb_data)/EDA

์Šคํ„ฐ๋”” ๋…ธํŠธ (BeautifulSoup + selenium 2)

๐Ÿ“Œ BeautifulSoup + selenium

๐Ÿšฉ ๋ชฉํ‘œ ๋ฐ์ดํ„ฐ

  • ๋ธŒ๋žœ๋“œ
  • ๊ฐ€๊ฒฉ
  • ์…€ํ”„ ์ฃผ์œ  ์—ฌ๋ถ€
  • ์œ„์น˜

๐Ÿšฉ Excel data ์ ‘๊ทผํ•˜๊ธฐ (glob)

  • glob("../๊ฒฝ๋กœ/ํŒŒ์ผ์ด๋ฆ„_* ")
  • ex) ์ง€์—ญ_* : '์ง€์—ญ_' ํฌํ•จ๋œ ํŒŒ์ผ ๋‹ค ๊ฐ€์ ธ์˜ค๊ธฐ
import pandas as pd
from glob import glob

# ํŒŒ์ผ ๋ชฉ๋ก ํ•œ ๋ฒˆ์— ๊ฐ€์ ธ์˜ค๊ธฐ
glob("../data/์ง€์—ญ_*.xls")
>>>>
['../data\\์ง€์—ญ_์œ„์น˜๋ณ„(์ฃผ์œ ์†Œ) (1).xls',
 '../data\\์ง€์—ญ_์œ„์น˜๋ณ„(์ฃผ์œ ์†Œ) (10).xls',
 '../data\\์ง€์—ญ_์œ„์น˜๋ณ„(์ฃผ์œ ์†Œ) (11).xls',
 '../data\\์ง€์—ญ_์œ„์น˜๋ณ„(์ฃผ์œ ์†Œ) (12).xls',
 '../data\\์ง€์—ญ_์œ„์น˜๋ณ„(์ฃผ์œ ์†Œ) (13).xls',
 '../data\\์ง€์—ญ_์œ„์น˜๋ณ„(์ฃผ์œ ์†Œ) (14).xls',
 '../data\\์ง€์—ญ_์œ„์น˜๋ณ„(์ฃผ์œ ์†Œ) (15).xls',
 '../data\\์ง€์—ญ_์œ„์น˜๋ณ„(์ฃผ์œ ์†Œ) (16).xls',
 '../data\\์ง€์—ญ_์œ„์น˜๋ณ„(์ฃผ์œ ์†Œ) (17).xls',
 '../data\\์ง€์—ญ_์œ„์น˜๋ณ„(์ฃผ์œ ์†Œ) (18).xls',
 '../data\\์ง€์—ญ_์œ„์น˜๋ณ„(์ฃผ์œ ์†Œ) (19).xls',
 '../data\\์ง€์—ญ_์œ„์น˜๋ณ„(์ฃผ์œ ์†Œ) (2).xls',
 '../data\\์ง€์—ญ_์œ„์น˜๋ณ„(์ฃผ์œ ์†Œ) (20).xls',
 '../data\\์ง€์—ญ_์œ„์น˜๋ณ„(์ฃผ์œ ์†Œ) (21).xls',
 '../data\\์ง€์—ญ_์œ„์น˜๋ณ„(์ฃผ์œ ์†Œ) (22).xls',
 '../data\\์ง€์—ญ_์œ„์น˜๋ณ„(์ฃผ์œ ์†Œ) (23).xls',
 '../data\\์ง€์—ญ_์œ„์น˜๋ณ„(์ฃผ์œ ์†Œ) (24).xls',
 '../data\\์ง€์—ญ_์œ„์น˜๋ณ„(์ฃผ์œ ์†Œ) (3).xls',
 '../data\\์ง€์—ญ_์œ„์น˜๋ณ„(์ฃผ์œ ์†Œ) (4).xls',
 '../data\\์ง€์—ญ_์œ„์น˜๋ณ„(์ฃผ์œ ์†Œ) (5).xls',
 '../data\\์ง€์—ญ_์œ„์น˜๋ณ„(์ฃผ์œ ์†Œ) (6).xls',
 '../data\\์ง€์—ญ_์œ„์น˜๋ณ„(์ฃผ์œ ์†Œ) (7).xls',
 '../data\\์ง€์—ญ_์œ„์น˜๋ณ„(์ฃผ์œ ์†Œ) (8).xls',
 '../data\\์ง€์—ญ_์œ„์น˜๋ณ„(์ฃผ์œ ์†Œ) (9).xls',
 '../data\\์ง€์—ญ_์œ„์น˜๋ณ„(์ฃผ์œ ์†Œ).xls']

# ํŒŒ์ผ๋ช… ์ €์žฅ
station_files = glob("../data/์ง€์—ญ_*.xls")
station_files
>>>>
['../data\\์ง€์—ญ_์œ„์น˜๋ณ„(์ฃผ์œ ์†Œ) (1).xls',
 '../data\\์ง€์—ญ_์œ„์น˜๋ณ„(์ฃผ์œ ์†Œ) (10).xls',
 '../data\\์ง€์—ญ_์œ„์น˜๋ณ„(์ฃผ์œ ์†Œ) (11).xls',
 '../data\\์ง€์—ญ_์œ„์น˜๋ณ„(์ฃผ์œ ์†Œ) (12).xls',
 '../data\\์ง€์—ญ_์œ„์น˜๋ณ„(์ฃผ์œ ์†Œ) (13).xls',
 '../data\\์ง€์—ญ_์œ„์น˜๋ณ„(์ฃผ์œ ์†Œ) (14).xls',
 '../data\\์ง€์—ญ_์œ„์น˜๋ณ„(์ฃผ์œ ์†Œ) (15).xls',
 '../data\\์ง€์—ญ_์œ„์น˜๋ณ„(์ฃผ์œ ์†Œ) (16).xls',
 '../data\\์ง€์—ญ_์œ„์น˜๋ณ„(์ฃผ์œ ์†Œ) (17).xls',
 '../data\\์ง€์—ญ_์œ„์น˜๋ณ„(์ฃผ์œ ์†Œ) (18).xls',
 '../data\\์ง€์—ญ_์œ„์น˜๋ณ„(์ฃผ์œ ์†Œ) (19).xls',
 '../data\\์ง€์—ญ_์œ„์น˜๋ณ„(์ฃผ์œ ์†Œ) (2).xls',
 '../data\\์ง€์—ญ_์œ„์น˜๋ณ„(์ฃผ์œ ์†Œ) (20).xls',
 '../data\\์ง€์—ญ_์œ„์น˜๋ณ„(์ฃผ์œ ์†Œ) (21).xls',
 '../data\\์ง€์—ญ_์œ„์น˜๋ณ„(์ฃผ์œ ์†Œ) (22).xls',
 '../data\\์ง€์—ญ_์œ„์น˜๋ณ„(์ฃผ์œ ์†Œ) (23).xls',
 '../data\\์ง€์—ญ_์œ„์น˜๋ณ„(์ฃผ์œ ์†Œ) (24).xls',
 '../data\\์ง€์—ญ_์œ„์น˜๋ณ„(์ฃผ์œ ์†Œ) (3).xls',
 '../data\\์ง€์—ญ_์œ„์น˜๋ณ„(์ฃผ์œ ์†Œ) (4).xls',
 '../data\\์ง€์—ญ_์œ„์น˜๋ณ„(์ฃผ์œ ์†Œ) (5).xls',
 '../data\\์ง€์—ญ_์œ„์น˜๋ณ„(์ฃผ์œ ์†Œ) (6).xls',
 '../data\\์ง€์—ญ_์œ„์น˜๋ณ„(์ฃผ์œ ์†Œ) (7).xls',
 '../data\\์ง€์—ญ_์œ„์น˜๋ณ„(์ฃผ์œ ์†Œ) (8).xls',
 '../data\\์ง€์—ญ_์œ„์น˜๋ณ„(์ฃผ์œ ์†Œ) (9).xls',
 '../data\\์ง€์—ญ_์œ„์น˜๋ณ„(์ฃผ์œ ์†Œ).xls']

๐Ÿšฉ ๋ฐ์ดํ„ฐ ํ™•์ธ

  • index ๋ช…๋ น์–ด๋ฅผ ํ™œ์šฉํ•ด ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ ๋งŒ๋“ค์–ด๋ณธ๋‹ค.
  • header ๊ฐ’์„ ์ค˜์„œ ํ•„์š”์—†๋Š” ์ •๋ณด๋Š” ๋‚ ๋ฆฐ๋‹ค.

๐Ÿšฉ ๋ฐ์ดํ„ฐ ํ•ฉ์น˜๊ธฐ (concat)

  • ํ˜•์‹์ด ๋™์ผํ•˜๊ณ  ์—ฐ๋‹ฌ์•„ ๋ถ™์ด๊ธฐ๋งŒ ํ•˜๋ฉด ๋  ๋•Œ๋Š” concat์„ ํ™œ์šฉํ•˜๋ฉด ๋œ๋‹ค.
tmp_raw=[]
for file_name in station_files: # station_files ๊ฐ’
    tmp = pd.read_excel(file_name, header=2) # excel ํŒŒ์ผ์„ ๊ฐ๊ฐ ํ•˜๋‚˜์”ฉ ์ฝ์–ด์˜จ๋‹ค
    tmp_raw.append(tmp) # tmp_raw ๊ฐ’์— append
>>>>
[       ์ง€์—ญ                    ์ƒํ˜ธ                            ์ฃผ์†Œ        ์ƒํ‘œ  \
 0   ์„œ์šธํŠน๋ณ„์‹œ  ์žฌ๊ฑด์—๋„ˆ์ง€ ์žฌ์ •์ œ2์ฃผ์œ ์†Œ ๊ณ ์†์…€ํ”„์ง€์   ์„œ์šธํŠน๋ณ„์‹œ ๊ฐ•๋™๊ตฌ  ์ฒœํ˜ธ๋Œ€๋กœ 1246 (๋‘”์ดŒ์ œ2๋™)  HDํ˜„๋Œ€์˜ค์ผ๋ฑ…ํฌ   
 1   ์„œ์šธํŠน๋ณ„์‹œ                ๊ตฌ์ฒœ๋ฉด์ฃผ์œ ์†Œ         ์„œ์šธ ๊ฐ•๋™๊ตฌ ๊ตฌ์ฒœ๋ฉด๋กœ 357 (์•”์‚ฌ๋™)  HDํ˜„๋Œ€์˜ค์ผ๋ฑ…ํฌ   
 2   ์„œ์šธํŠน๋ณ„์‹œ                 ๋ช…์ผ์ฃผ์œ ์†Œ          ์„œ์šธ ๊ฐ•๋™๊ตฌ ๊ณ ๋•๋กœ 168 (๋ช…์ผ๋™)     SK์—๋„ˆ์ง€   
 3   ์„œ์šธํŠน๋ณ„์‹œ               ๋ฐฉ์•„๋‹ค๋ฆฌ์ฃผ์œ ์†Œ          ์„œ์šธ ๊ฐ•๋™๊ตฌ ๋™๋‚จ๋กœ 811 (๋ช…์ผ๋™)     SK์—๋„ˆ์ง€   
 4   ์„œ์šธํŠน๋ณ„์‹œ           (์ฃผ)์†Œ๋ชจ ์‹ ์›”์ฃผ์œ ์†Œ        ์„œ์šธ ๊ฐ•๋™๊ตฌ ์–‘์žฌ๋Œ€๋กœ 1323 (์„ฑ๋‚ด๋™)     GS์นผํ…์Šค   
 5   ์„œ์šธํŠน๋ณ„์‹œ       (์ฃผ)ํผ์ŠคํŠธ์˜ค์ผ ์ฝ”์•Œ๋ผ์ฃผ์œ ์†Œ     ์„œ์šธํŠน๋ณ„์‹œ ๊ฐ•๋™๊ตฌ  ์˜ฌ๋ฆผํ”ฝ๋กœ 556 (์„ฑ๋‚ด๋™)     S-OIL   
 6   ์„œ์šธํŠน๋ณ„์‹œ        (์ฃผ)์‚ผํ‘œ์—๋„ˆ์ง€ ๊ณ ๋•์ฃผ์œ ์†Œ           ์„œ์šธ ๊ฐ•๋™๊ตฌ ๊ณ ๋•๋กœ 39 (์•”์‚ฌ๋™)     GS์นผํ…์Šค   
 7   ์„œ์šธํŠน๋ณ„์‹œ      ์ฃผ)์ง€์œ ์—๋„ˆ์ง€์ง์˜ ์˜ค๋ Œ์ง€์ฃผ์œ ์†Œ          ์„œ์šธ ๊ฐ•๋™๊ตฌ ์„ฑ์•ˆ๋กœ 102 (์„ฑ๋‚ด๋™)     SK์—๋„ˆ์ง€   
 8   ์„œ์šธํŠน๋ณ„์‹œ          ๋Œ€์„ฑ์„์œ (์ฃผ)๊ธธ๋™์ฃผ์œ ์†Œ              ์„œ์šธ ๊ฐ•๋™๊ตฌ ์ฒœํ˜ธ๋Œ€๋กœ 1168     GS์นผํ…์Šค   
 9   ์„œ์šธํŠน๋ณ„์‹œ           (์ฃผ)์†Œ๋ชจ ์„ฑ๋‚ด์ฃผ์œ ์†Œ         ์„œ์šธ ๊ฐ•๋™๊ตฌ ์˜ฌ๋ฆผํ”ฝ๋กœ 578 (์„ฑ๋‚ด๋™)     GS์นผํ…์Šค   
 10  ์„œ์šธํŠน๋ณ„์‹œ              skํ•ด๋œจ๋Š”์ฃผ์œ ์†Œ         ์„œ์šธ ๊ฐ•๋™๊ตฌ  ์ƒ์ผ๋กœ 132 (๊ฐ•์ผ๋™)     SK์—๋„ˆ์ง€   
 11  ์„œ์šธํŠน๋ณ„์‹œ        ์ง€์—์Šค์นผํ…์Šคใˆœ ๋™์„œ์šธ์ฃผ์œ ์†Œ        ์„œ์šธ ๊ฐ•๋™๊ตฌ ์ฒœํ˜ธ๋Œ€๋กœ 1456 (์ƒ์ผ๋™)     GS์นผํ…์Šค   
 12  ์„œ์šธํŠน๋ณ„์‹œ               ์ฒœํ˜ธํ˜„๋Œ€์ฃผ์œ ์†Œ           ์„œ์šธ ๊ฐ•๋™๊ตฌ ์ฒœ์ค‘๋กœ 67 (์ฒœํ˜ธ๋™)  HDํ˜„๋Œ€์˜ค์ผ๋ฑ…ํฌ   
 13  ์„œ์šธํŠน๋ณ„์‹œ                 ๊ด‘์„ฑ์ฃผ์œ ์†Œ         ์„œ์šธ ๊ฐ•๋™๊ตฌ ์˜ฌ๋ฆผํ”ฝ๋กœ 673 (์ฒœํ˜ธ๋™)     S-OIL   
 
             ์ „ํ™”๋ฒˆํ˜ธ ์…€ํ”„์—ฌ๋ถ€ ๊ณ ๊ธ‰ํœ˜๋ฐœ์œ    ํœ˜๋ฐœ์œ     ๊ฒฝ์œ   ์‹ค๋‚ด๋“ฑ์œ   
 0    02-487-2030    Y     -  1719  1609     -  
 1    02-441-0536    N     -  1734  1615     -  
 2   02-3428-1739    Y  1875  1748  1625     -  
 3    02-442-5145    Y     -  1765  1645  1439  
 4   02-6956-6674    Y  1946  1766  1648  1590  
 5    02-484-1162    Y     -  1770  1640     -  
 6    02-441-3327    Y  1985  1785  1665  1635  
 7    02-484-6165    N     -  1785  1685  1580  
 8    02-474-7222    N  1995  1786  1668  1600  
 9    02-479-3838    Y     -  1788  1688     -  
 10   02-442-7801    Y  1949  1795  1689  1600  
 11   02-426-5372    Y  1981  1801  1684     -  
 12   02-484-9323    N     -  1881  1797     -  
 13   02-470-5133    N     -  1968  1868     -  , .......
stations_raw = pd.concat(tmp_raw)
stations_raw

๐Ÿšฉ ์ธ๋ฑ์Šค ํ™•์ธ ๋ฐ rows, columns ํ™•์ธ

  • ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„ ํ˜•ํƒœ๋กœ ํ™•์ธ
  • info() ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด ํ™•์ธ

๐Ÿšฉ DataFrame ์žฌ์ •๋น„

  • pd.DataFrame({'column_name' : data})

๐Ÿšฉ ๊ตฌ column ์ถ”๊ฐ€ํ•˜๊ธฐ

  • ์ฃผ์†Œ ์ปฌ๋Ÿผ์— ์žˆ๋Š” ์ฃผ์†Œ๋ฅผ ๊ณต๋ฐฑ ๊ธฐ์ค€์œผ๋กœ ๋‚˜๋ˆ„๊ณ  ์ธ๋ฑ์Šค๋ฅผ ์ง€์ •ํ•˜์—ฌ ๊ตฌ ๊ฐ’์„ ๊ตฌํ•œ๋‹ค.
for Address in stations["์ฃผ์†Œ"]:
    print(Address.split()[1])
>>>>
๊ฐ•๋™๊ตฌ
๊ฐ•๋™๊ตฌ
๊ฐ•๋™๊ตฌ
๊ฐ•๋™๊ตฌ
๊ฐ•๋™๊ตฌ
๊ฐ•๋™๊ตฌ
๊ฐ•๋™๊ตฌ
๊ฐ•๋™๊ตฌ
๊ฐ•๋™๊ตฌ
๊ฐ•๋™๊ตฌ
๊ฐ•๋™๊ตฌ
๊ฐ•๋™๊ตฌ
๊ฐ•๋™๊ตฌ
๊ฐ•๋™๊ตฌ
๋™๋Œ€๋ฌธ๊ตฌ
๋™๋Œ€๋ฌธ๊ตฌ
๋™๋Œ€๋ฌธ๊ตฌ
....
๊ฐ•๋‚จ๊ตฌ
๊ฐ•๋‚จ๊ตฌ
๊ฐ•๋‚จ๊ตฌ

 

๊ตฌ ์ปฌ๋Ÿผ ์ถ”๊ฐ€ํ•˜๊ธฐ

๐Ÿšฉ ๋ฐ์ดํ„ฐ ์ค‘ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์„ ์‹œ ์ˆ˜์ •

์ถ”๊ฐ€ ํ•œ ํ›„, unique() ํ•จ์ˆ˜๋กœ ๊ตฌ ์ปฌ๋Ÿผ ์ •๋ณด ๋‹ค์‹œ ํ•œ๋ฒˆ ํ™•์ธ

๐Ÿšฉ ์ธ๋ฑ์Šค ์žฌ์ •๋ ฌ

  • reset_index ํ™œ์šฉ

reset_index
del์„ ํ™œ์šฉ, index ์ปฌ๋Ÿผ ์‚ญ์ œ

๐Ÿšฉ ์ฃผ์œ  ๊ฐ€๊ฒฉ ์ •๋ณด ์‹œ๊ฐํ™”

  • matplotlib.pyplot, seaborn, platform ์‚ฌ์šฉ
  • boxplot ์œผ๋กœ ์‹œ๊ฐํ™” ์ง„ํ–‰

๐Ÿ“’ 1. boxplot์œผ๋กœ ๊ฐ„๋‹จํ•œ ์‹œ๊ฐํ™”

๐Ÿ“’ 2. seaborn, matplotlib ์œผ๋กœ ์‹œ๊ฐํ™”

๐Ÿ“’ 3. seaborn, matplotlib ์œผ๋กœ ์‹œ๊ฐํ™” 2

  • hue option์œผ๋กœ ์ข€ ๋” ๊ตฌ๋ถ„์ด ์‰ฝ๊ฒŒ ์‹œ๊ฐํ™”

 

๐Ÿšฉ ์ฃผ์œ  ์ง€๋„ ์ •๋ณด ์‹œ๊ฐํ™”

  • ์ƒ์œ„, ํ•˜์œ„ 10๊ฐœ ์”ฉ ascending ํ•ด๋ณด๊ธฐ
  • ์ œ์ผ ๋น„์‹ผ ๊ณณ๊ณผ ์ œ์ผ ์‹ผ๊ณณ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค

๐Ÿšฉ pivot_table๋กœ ํ‰๊ท  ๊ฐ€๊ฒฉ ํ™•์ธ