Typical Data Science Pipeline
Data Munging / Data wrangling
- ๋ฐ์ดํฐ๋ฅผ ์ป๊ณ ๋ถ์์ ์ํด ์ค๋น/์ ๋ฆฌํ๋ ๊ฒ
๋ฐ์ดํฐ๊ณผํ์ ์ฌ์ฉํ๋ ์ธ์ด
- Python: ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ํผ์ณ ๋ฑ ํฌํจ - regular expressions
* regular expression ์
- [hc]at : hat or cat
- .at : .์๋ฆฌ์ ์๋ฌด๊ฑฐ๋ ๋ค์ด๊ฐ ์ ์์
- ab*c : b๊ฐ 0๊ฐ ์ด์ ์์ด์ผ ํจ
- ab+c : b๊ฐ 1๊ฐ ์ด์ ์์ด์ผ ํจ
- R: ํต๊ณํ์๋ค์ด ์ฃผ๋ก ์ฌ์ฉ
- Matlab: ํ๋ ฌ
- Java/C++: ๋น ๋ฐ์ดํฐ ์์คํ ์ ์ํ ์ธ์ด
- Excel: bread and butter toool
๋ ธํธ๋ถ ํ๊ฒฝ
- reproducible, tweakable, documented
- ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ์ ์ ์งํ๊ธฐ ์ฝ๋ค.
๋ฐ์ดํฐ ์์ง
- Files (CSV, XML, JSON)
- Databases (SQL server)
- API: Application Programming Interface
- Web Scraping (HTML)
๋ฐ์ดํฐ ํ์
1. CSV (Comma-Separated Values)
2. XML (eXtensible Markup Language)
<student>
<name> 000 </name>
<age> 19 </age>
</student>
์ด๋ฐ ์์ผ๋ก <>, </> ๋ก ๊ตฌ๋ถ ๊ฐ๋ฅ
3. JSON (JavaScript Object Notation)
{
"a": {
"name": 000,
"age": 19
}
... ์ด๋ฐ ์์ผ๋ก, {}์ ๋ฐ์ดํ ๋ฑ์ผ๋ก ๊ตฌ๋ถ
CSV ํ์ผ์์ ๋ฐ์ดํฐ ๋ถ๋ฌ์ค๊ธฐ - pandas ์ด์ฉ
import pandas
student_data = pandas.read_csv("student_table.csv")
Relational DB์์ ๋ฐ์ดํฐ ๋ถ๋ฌ์ค๊ธฐ
import pandas
student_data = pandas.read_sql_query(sql_string, db_uri)
SELECT * FROM student_table --์ ์ฒด ๋ถ๋ฌ์ค๊ธฐ
SELECT studentid, name FROM student_table WHERE gpa > 3.5
--ํ
์ด๋ธ์์ gpa>3.5์ธ ํ์๋ค์ id์ ์ด๋ฆ ๋ถ๋ฌ์ค๊ธฐ
SELECT S.name, A.name
FROM student_table S, advisor_table A
WHERE S.advisorid = A.id --ํ์์ ์ง๋๊ต์ ์์ด๋๊ฐ ์ง๋๊ต์ ๋ช
๋จ ์์ด๋์ ๋์ผํ ๊ฒฝ์ฐ์ ์ด๋ฆ ์ ์ถ๋ ฅ
SELECT S.advisorid, avg(S.gpa)
FROM student_table S
GROUP BY S.advisorid --์ง๋๊ต์๊ฐ ๊ฐ์ ํ์๋ค์ ์ง๋๊ต์ ์์ด๋์ ํ์๋ค ์ฑ์ ํ๊ท ์ถ๋ ฅ
SELECT S.advisorid, avg(S.gpa)
FROM student_table S
WHERE S.birthdate >= 2000/1/1 AND S.birthdate < 2010/1/1
GROUP BY S.advisorid
API๋ฅผ ์ด์ฉํ์ฌ ๋ฐ์ดํฐ ์ป๊ธฐ
- REST (Representational State Transfer) API
import json
import requests
url = 'https://...format=json'
data = requests.get(url).text
parsed_data = json.loads(data)
Web Scraping
<html>
<head>
<title> ... </title>
</head>
<body>
<h1> hello world! </h1>
<p> COSE471 data science </p>
</body>
</html>
๋ฐ์ดํฐ์ ์์ฒ
1. Proprietary Data Sources
- ๊ธฐ์ ์ด ์์งํ๋ ๋ด๋ถ ๋ฐ์ดํฐ
- API๋ก ์ ํ์ ์ผ๋ก ๊ณต๊ฐํ ์ ์์
- ์ธ๋ถ๋ก ๋ฐ์ดํฐ ์ ์ฒด๋ฅผ ๊ณต๊ฐํ๊ธฐ ์ด๋ ค์ด ์ด์ : ๋น์ฆ๋์ค์ ์ด์ (๊ฒฝ์์ฌ๋ฅผ ๋์์ค ์ ์์), ํ๋ผ์ด๋ฒ์ ์ด์
- ์์: 2006๋ AOL search log release
2. Government Data Sources
- ์, ๊ตญ๊ฐ ๋ฑ์์ ๊ณต๊ฐํ๋ ์คํ ๋ฐ์ดํฐ
- Freedom of Information Act: ๋ฐ์ดํฐ๋ฅผ ๊ณต๊ฐํด๋ฌ๋ผ๊ณ ์์ฒญํ ์ ์์
- ๋ฐ์ดํฐ๊ฐ ๊ณต๊ฐ๋ ๋ ํ๋ผ์ด๋ฒ์๋ฅผ ์ง์ผ์ผ ํจ
3. Academic Data Sets
- ๋ ผ๋ฌธ ๋ฑ์์ ๋ฐํํ๋ ์๋ฃ
4. Web Search/Scraping
- Scraping: ์นํ์ด์ง์์ ๋ฐ์ดํฐ๋ ํ ์คํธ๋ฅผ ์ถ์ถํ๋ ๊ฒ
- ์ด๋ฏธ API๊ฐ ์กด์ฌํ๋์ง, ๋๊ตฐ๊ฐ ์ด๋ฏธ scraper๋ฅผ ์์ฑํด๋์๋์ง ํ์ธํ๊ณ ํด์ผ ํจ
5. Available Data Sources
- Bulk Downloads: ์ํคํผ๋์, IMDB, Million Song Database
- API access: ๋ด์ํ์์ค, ํธ์ํฐ ๋ฑ
6. Sensor Data Logging
- ์ด๋ฏธ์ง, ๋น๋์ค ๋ฐ์ดํฐ: Flicker ์ด๋ฏธ์ง๋ฅผ ์ด์ฉํ์ฌ ๋ ์จ๋ฅผ ๊ด์ธก
- ํด๋ํฐ์ accelerometer๋ฅผ ์ด์ฉํ์ฌ ์ง์ง ๊ด์ธก
- ํ์ GPS๋ฅผ ์ด์ฉํ์ฌ ๊ตํต ํ๋ฆ ๊ด์ธก
- logging system ๊ตฌ์ถ: ์ ์ฅ์๊ฐ ์ ๋ ดํจ
7. Crowdsourcing
- ์ํคํผ๋์, Freebase, IMDB ๋ฑ ์ฌ๋ฌ ์ ์๊ฐ ์ฐธ์ฌํ ๋ฐ์ดํฐ
- Amazon Turk, CrowdFlower ๋ฑ์ ํ๋ซํผ์ ๋์ ์ง๋ถํ๋ฉด ๋ค์์ ์ฌ๋์ด ๋ฐ์ดํฐ๋ฅผ ๋ชจ์์ฌ ์ ์์
8. Sweat Equity
- ์ญ์ฌ ์๋ฃ ๋ฑ์ ์ข ์ด, ํผ๋์ํ ๋ฑ์ ํ์์ผ๋ก ์ ์ฅ๋์ด์์ด ๋ณํ์ด ํ์ํจ
Cleaning Data: Garbage In, Garbage Out
- ๋ฐ์ดํฐ ์ ๋ฆฌ ์ค์ ๋ํ๋ ์ ์๋ ๋ฌธ์
* artifact์ ์ค๋ฅ๋ฅผ ๊ตฌ๋ณ
* Data compatibility, unification
* ๊ฒฐ์ธก์น ์ฒ๋ฆฌ
* ๋ฏธ๊ด์ธก๊ฐ (0) ์ถ์
* ์ด์์น ํ์ง
Errors vs. Artifacts
- error: ๋ฐ์ดํฐ๋ฅผ ์์งํ๋ ๊ณผ์ ์์ ๊ทผ๋ณธ์ ์ผ๋ก ์์ด๋ฒ๋ฆฐ ์ ๋ณด
- artifact: ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๊ณผ์ ์ค์ ๋ํ๋๋ ์์คํ ์ ์ธ ๋ฌธ์
- sniff test: product๋ฅผ ๊ฐ๊น์ด์์ ์กฐ์ฌํ์ฌ ์๋ชป๋์๋ค๋ ๋์๋ฅผ ์์์ฐจ๋ฆฌ๋ ๋ฐฉ๋ฒ
์ฐ๋๋ณ ๊ณผํ์์ ์ฒซ ๋ ผ๋ฌธ ๋ฐํ์ ์ ๊ด๋ จ ๋ฐ์ดํฐ
- PubMed๋ฅผ ์ด์ฉํ์ฌ ๊ฐ์ฅ ์์ฃผ ์ธ์ฉ๋๋ ๊ณผํ์ 100,000๋ช ์ ์ฒซ ๋ ผ๋ฌธ ๋ฐํ ์ฐ๋๋ฅผ ์กฐ์ฌ
- ์์ ๋ถํฌ: 1960๋ ์ ๋ชฐ๋ ค์๊ณ , 2023๋ ์ ๊ฐ๊น์์ง๋ฉด 0์ ์๋ ดํ๋ฉฐ, ๊ทธ ์ค๊ฐ์ ์ผ์ ํ๊ฒ ์ ์ง๋๋ ๊ทธ๋ํ
(์ด์ : 1960๋ ๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์์งํ์ผ๋ฏ๋ก ๊ทธ ์ด์ ๋ ผ๋ฌธ๋ค๋ 1960๋ ์ผ๋ก ๋ฐ์๋ ์ ์์ผ๋ฉฐ, ์ต๊ทผ์ ๊ฐ๊น์์ง์๋ก ์ปค๋ฆฌ์ด๊ฐ ์ ์ ์ฌ๋์ด ๋ง์์ ์์์ ๋ค์ง ๋ชปํ ๊ฐ๋ฅ์ฑ์ด ๋์)
- ์ค์ ๋ถํฌ (์ผ์ชฝ)
1965๋ ์ด์ ๋ฐ์ดํฐ๋ ์์์ ์ผ๋ก ํ์ฌ ๋๋ฝ๋์์ ๊ฐ๋ฅ์ฑ ์์
2000๋ ์ดํ ์ ์ ์ด๋ฆ ๊ธฐ๋ก ๋ฐฉ์์ด ๋ณํ๋ก, ๋ค๋ฅธ ์ ์์ง๋ง ๊ฐ์ ์ ์๋ก ์ธ์ํ ์ ์์ด ์ค๋ฅ ๋ฐ์
Data Compatibility
1. Unit Conversion
- 1999๋ ๋์ฌ์ Mars Climate Orbiter๊ฐ ์ฌ๋ผ์ง
- ์ด์ ๋ ๋จ์ ์ฐจ์ด ๋๋ฌธ
- Z-score๋ฅผ ์ด์ฉํ๋ฉด ๋จ์๊ฐ ์ฌ๋ผ์ง๋ฏ๋ก ์ ์ฉ
2. Number / Character Representation
- 1996๋ Ariane 5 rocket ํญ๋ฐ: 64-bit float์ 16-bit integer๋ก ์ ํํ๊ธฐ ๋๋ฌธ
- ์ค์ ์์น์ integer ๊ทผ์ฌ๋ฅผ ํผํ ๊ฒ
- ์ธก์ ๊ฐ์ decimal number, count๋ integer๊ฐ ๋๋๋ก ํ์
- fractional quantities๋ decimal ๊ฐ์ผ๋ก ๊ธฐ๋กํ์
3. Character Representations
- ํ ์คํธ ๋ฐ์ดํฐ์ ์ธ์ฝ๋ฉ ๋ฐฉ์์ ์ฃผ์ํ์
- UTF-8: multibyte encoding for all Unicode characters
4. Name Unification
- ๊ธ ์ ์ ๊ธฐ๋ก ๋ฐฉ์์ด ๋ค ๋ค๋ฅผ ์ ์์. ex) Steve, Steven. S. ๋ฑ๋ฑ
- ์ด๋ฆ์ ๊ฐ๊ฒ ํต์ผํ์. ๋์๋ฌธ์ ๋ณํ, ๋ฏธ๋ค๋ค์ ์ ๊ฑฐ ๋ฑ
- false positive์ negative ์ฌ์ด์ tradeoff
5. Time / Date Unification
- ๋ ์ง ํต์ผ: UTC ๋ฑ ์ด์ฉ
6. Financial Unification
- Currency conversion: ํ์จ์ ์ด์ฉ
- ์ ๋๊ฐ ๋ณํ๋ณด๋ค returns / percentage change๋ฅผ ์ด์ฉํ์
- stock price๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ํ์. (split(์ก๋ฉด๋ถํ ), dividends(๋ฐฐ๋น))
- time value of money๋ ๊ณต์ ํ ์ฅ๊ธฐ ๋น๊ต๋ฅผ ์ํด ์ธํ๋ ์ด์ ์ correction์ ํด์ผ ํ๋ค.
๊ฒฐ์ธก์น ๋ค๋ฃจ๊ธฐ
- ๋ชจ๋ฅธ๋ค๊ณ ํ์ฌ 0์ผ๋ก ์ค์ ํ๋ ๊ฒ์ ์ณ์ง ์๋ค.
- ๊ฒฐ์ธก์น ์ฒ๋ฆฌ: ๋น์นธ์ผ๋ก ๋๋ ๊ฒ๋ณด๋ค estimation, imputation์ด ํ์ํ๋ค.
Imputation methods
- Heuristic-based imputation: ํ๊ท ์๋ช ์ ๋ฐ์ํ์ฌ ์ฌ๋ง์ผ์ ์์ธก
- Mean value imputation: ํ๊ท ์ผ๋ก ๋์ฒด
- Random value imputation: ๋์๋ก ๋์ฒด -> ํต๊ณ์ ํ๊ฐ์ imputation์ ์ํฅ์ ์ค์ฌ์ค
- Imputation by nearest neighbor: ๊ฐ์ฅ ๊ฐ๊น์ด record๋ฅผ ์ด์ฉํ์ฌ ๋์ฒด
- Imputation by interpolation: linear regression์ ์ด์ฉํ์ฌ ๋์ฒด -> record์ ๋น ํ๋๊ฐ ๋ง์ด ์์ ๋
Outlier Detection
- ์ต๋๊ฐ, ์ต์๊ฐ์ ์ ํ์ธํ๊ธฐ
- Normally distributed data๋ ํฐ outlier๋ฅผ ๊ฐ์ง ์๋๋ค. (k sigma from the mean)
- ๊ทธ๋ฅ ์ญ์ ํ์ง ๋ง๊ณ ์ด์์น๊ฐ ์๊ธด ์ด์ ๋ฅผ ์๊ฐํ์ฌ ๊ณ ์น๊ธฐ
- ์๊ฐํ๋ฅผ ํตํด ํ์งํ๊ธฐ ์ฌ์ (์ ์ฐจ์์ธ ๊ฒฝ์ฐ๋ง ๊ฐ๋ฅ)
- ํด๋ฌ์คํฐ๋ง ํ์ ๋ ์ค์ฌ์ผ๋ก๋ถํฐ ๋ฉ๋ฆฌ ๋จ์ด์ ธ์๋ ๊ฒฝ์ฐ
Delete Outliers Prior to Fitting?
- ์ ํฉ ์ด์ ์ ์ด์์น๋ฅผ ์ง์ฐ๋ ๊ฒ์ ๋ ๋์ ๋ชจ๋ธ์ ๋ง๋ค์ด๋ด๊ธฐ๋ ํ๋ค.
ex) ์ด์์น๊ฐ ์ธก์ ์ค๋ฅ๋ก ์๊ธด ๊ฒ์ผ ๋
- ๋ฐ๋๋ก ๋ ๋์ ๋ชจ๋ธ์ ๋ง๋ค์ด๋ด๊ธฐ๋ ํ๋ค.
ex) ๊ฐ๋จํ ๋ชจ๋ธ์ ์ํด ์ค๋ช ๋์ง ์๋๋ค๊ณ ํด์ ํด๋นํ๋ ์ ์ ๋ชจ๋ ์ง์๋ฒ๋ฆด ๊ฒฝ์ฐ