์ธ์ ์ด๋์ ์ ์ฉํ๋์ง ๊ฐ์ธ์ ์ธ ๊ฒฝํ์ ํตํด ๋ง์ ๋๋ฆฌ๊ณ ์์ต๋๋ค. ๊ฐ์์ ๋
ผ๋ฌธ์ด๋ฏ๋ก ๋ฌด์์ ๋ ๊น์ด ํ๊ณ ๋ค ์ ์๋์ง ๋ช
ํํฉ๋๋ค. ํ์ง๋ง ์ฌ๊ธฐ์๋ ์ ์ ์ผ๋ก ์ฃผ๊ด์ ์ธ ๊ฐ์ธ์ ์ธ ๊ฒฝํ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ด์ฉ๋ฉด ๋ชจ๋ ๊ฒ์ด ์์ ํ ๋ค๋ฅผ ์๋ ์์ต๋๋ค.
์ฟผ๋ฆฌ ์ธ์ด๋ฅผ ์๊ณ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ด ์ ์ค์ํ๊ฐ์? ๋ฐ์ดํฐ ๊ณผํ์ ํต์ฌ์๋ ๋ช ๊ฐ์ง ์ค์ํ ์์ ๋จ๊ณ๊ฐ ์์ผ๋ฉฐ, ๊ฐ์ฅ ๋จผ์ ์ด์ ๊ฐ์ฅ ์ค์ํ(์ด ์์ด๋ ์๋ฌด ๊ฒ๋ ์๋ํ์ง ์์ต๋๋ค!) ๋ฐ์ดํฐ๋ฅผ ์ป๊ฑฐ๋ ์ถ์ถํ๋ ๊ฒ์ ๋๋ค. ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ๋ฐ์ดํฐ๋ ์ด๋ค ํํ๋ก๋ ์ด๋๊ฐ์ ์ ์ฅ๋์ด ์์ผ๋ฉฐ ๊ฑฐ๊ธฐ์์ "๊ฒ์"๋์ด์ผ ํฉ๋๋ค.
์ฟผ๋ฆฌ ์ธ์ด๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐ๋ก ์ด ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ ์ ์์ต๋๋ค! ๊ทธ๋ฆฌ๊ณ ์ค๋ ์ ๋ ์ ์๊ฒ ์ ์ฉํ๋ ์ฟผ๋ฆฌ ์ธ์ด์ ๋ํด ๋ง์๋๋ฆฌ๊ณ , ์ ํํ ์ด๋์, ์ด๋ป๊ฒ ๊ณต๋ถํด์ผ ํ๋์ง, ์ ๊ณต๋ถํด์ผ ํ๋์ง ์๋ ค๋๋ฆฌ๊ฒ ์ต๋๋ค.
์ด ๋ฌธ์์์๋ ์ธ ๊ฐ์ง ์ฃผ์ ๋ฐ์ดํฐ ์ฟผ๋ฆฌ ์ ํ ๋ธ๋ก์ด ์์ต๋๋ค.
- "ํ์ค" ์ฟผ๋ฆฌ ์ธ์ด๋ ๊ด๊ณํ ๋์ํ์ด๋ SQL๊ณผ ๊ฐ์ ์ฟผ๋ฆฌ ์ธ์ด๋ฅผ ๋งํ ๋ ์ผ๋ฐ์ ์ผ๋ก ์ดํด๋๋ ์ธ์ด์ ๋๋ค.
- ์คํฌ๋ฆฝํ ์ฟผ๋ฆฌ ์ธ์ด: ์๋ฅผ ๋ค์ด Python things pandas, numpy ๋๋ ์ ์คํฌ๋ฆฝํ .
- ์ง์ ๊ทธ๋ํ ๋ฐ ๊ทธ๋ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํ ์ฟผ๋ฆฌ ์ธ์ด์ ๋๋ค.
์ฌ๊ธฐ์ ์์ฑ๋ ๋ชจ๋ ๋ด์ฉ์ ์ํฉ์ ๋ํ ์ค๋ช
๋ฐ "ํ์ํ ์ด์ "์ ํจ๊ป ์ ์ฉํ๋ ๊ฐ์ธ์ ์ธ ๊ฒฝํ์ผ ๋ฟ์
๋๋ค. ๋๊ตฌ๋ ๋น์ทํ ์ํฉ์ด ์ด๋ป๊ฒ ๋ฅ์น ์ ์๋์ง ์๋ํ๊ณ ์ด๋ฌํ ์ธ์ด๋ฅผ ์ดํดํ์ฌ ๋ฏธ๋ฆฌ ์ค๋นํ๋ ค๊ณ ๋
ธ๋ ฅํ ์ ์์ต๋๋ค. ํ๋ก์ ํธ์ (๊ธด๊ธํ๊ฒ) ์ง์ํ๊ฑฐ๋ ํ์ํ ํ๋ก์ ํธ์ ๋์ฐฉํ๊ธฐ ์ ์.
"ํ์ค" ์ฟผ๋ฆฌ ์ธ์ด
ํ์ค ์ฟผ๋ฆฌ ์ธ์ด๋ ์ฐ๋ฆฌ๊ฐ ์ฟผ๋ฆฌ์ ๋ํด ์ด์ผ๊ธฐํ ๋ ์ผ๋ฐ์ ์ผ๋ก ์๊ฐํ๋ ๊ฒ๊ณผ ์ ํํ ๊ฐ์ต๋๋ค.
๊ด๊ณ๋์ํ
์ค๋๋ ๊ด๊ณ ๋์ํ์ด ํ์ํ ์ด์ ๋ ๋ฌด์์ ๋๊น? ์ฟผ๋ฆฌ ์ธ์ด๊ฐ ์ ํน์ ํ ๋ฐฉ์์ผ๋ก ๊ตฌ์ฑ๋์ด ์๋์ง ์ ์ดํดํ๊ณ ์ด๋ฅผ ์์์ ์ผ๋ก ์ฌ์ฉํ๋ ค๋ฉด ๊ทธ ๋ฐ์ ๊น๋ ค ์๋ ํต์ฌ์ ์ดํดํด์ผ ํฉ๋๋ค.
๊ด๊ณ ๋์ํ์ด๋ ๋ฌด์์ ๋๊น?
๊ณต์์ ์ธ ์ ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ๊ด๊ณ ๋์ํ์ ๊ด๊ณํ ๋ฐ์ดํฐ ๋ชจ๋ธ์ ๊ด๊ณ์ ๋ํ ํ์ํ ์ฐ์ฐ ์์คํ ์ ๋๋ค. ์ข ๋ ์ธ๊ฐ์ ์ผ๋ก ๋งํ๋ฉด, ์ด๋ ๊ฒฐ๊ณผ๊ฐ ํญ์ ํ ์ด๋ธ์ด ๋๋๋ก ํ ์ด๋ธ์ ๋ํ ์์ ์์คํ ์ ๋๋ค.
๋ชจ๋ ๊ด๊ณ ์ฐ์ฐ ๋ณด๊ธฐ
์ด์ ๋ ๋ฌด์์ ๋๊น?
์ฟผ๋ฆฌ ์ธ์ด๊ฐ ๋ฌด์์ธ์ง, ํน์ ์ฟผ๋ฆฌ ์ธ์ด์ ํํ์ ๋ค์ ์ด๋ค ์์ ์ด ์๋์ง ์ดํดํ๊ธฐ ์์ํ๋ฉด ์ฟผ๋ฆฌ ์ธ์ด์์ ์๋ํ๋ ๊ฒ์ด ๋ฌด์์ธ์ง, ์ด๋ป๊ฒ ์๋ํ๋์ง ๋ ๊น์ด ์ดํดํ ์ ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
์์ ๊ฐ์ ธ์จ
์ฐ๊ตฌ ์๋ฃ:
SQL
์์ ๊ฐ์ ธ์จ
SQL์ ๋ณธ์ง์ ์ผ๋ก ๊ด๊ณํ ๋์์ ๊ตฌํ์
๋๋ค. ์ค์ํ ์ฃผ์ ์ฌํญ์ด ์์ง๋ง SQL์ ์ ์ธ์ ์
๋๋ค! ์ฆ, ๊ด๊ณํ ๋์ํ ์ธ์ด๋ก ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ ๋ ์ค์ ๋ก ๊ณ์ฐ ๋ฐฉ๋ฒ์ ๋งํ์ง๋ง SQL์ ์ฌ์ฉํ์ฌ ์ถ์ถํ ๋ด์ฉ์ ์ง์ ํ๋ฉด DBMS๊ฐ ์ด๋ฏธ ๊ด๊ณํ ๋์ํ ์ธ์ด๋ก (ํจ๊ณผ์ ์ธ) ํํ์์ ์์ฑํฉ๋๋ค. ๋๋ฑ์ฑ์ ์ฐ๋ฆฌ์๊ฒ ๋ค์๊ณผ ๊ฐ์ด ์๋ ค์ ธ ์์ต๋๋ค.
์์ ๊ฐ์ ธ์จ
์ด์ ๋ ๋ฌด์์ ๋๊น?
๊ด๊ณํ DBMS: Oracle, Postgres, SQL Server ๋ฑ์ ์ฌ์ ํ โโ์ฌ์ค์ ์ด๋์๋ ์์ผ๋ฉฐ ์ด๋ค๊ณผ ์ํธ ์์ฉํด์ผ ํ ๊ฐ๋ฅ์ฑ์ด ์์ฒญ๋๊ฒ ๋์ต๋๋ค. ์ฆ, SQL์ ์ฝ๊ฑฐ๋(๊ฐ๋ฅ์ฑ์ด ๋งค์ฐ ๋์) ์์ฑํด์ผ ํจ์ ์๋ฏธํฉ๋๋ค( ๊ฐ๋ฅ์ฑ๋ ๋ฎ์).
๋ฌด์์ ์ฝ๊ณ ๊ณต๋ถํด์ผ ํ๋๊ฐ
์์ ๋์ผํ ๋งํฌ(๊ด๊ณํ ๋์ํ ๊ด๋ จ)์ ๋ฐ๋ฅด๋ฉด ์์ฒญ๋ ์์ ์๋ฃ๊ฐ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด,
๊ทธ๋ฐ๋ฐ NoSQL์ด ๋ญ๊ฐ์?
""NoSQL"์ด๋ผ๋ ์ฉ์ด๋ ์์ ํ ์๋ฐ์ ์ธ ์ ๋๋ฅผ ๊ฐ์ง๋ฉฐ ์ผ๋ฐ์ ์ผ๋ก ๋ฐ์๋ค์ฌ์ง๋ ์ ์๋ ์ด๋ฅผ ๋ท๋ฐ์นจํ๋ ๊ณผํ ๊ธฐ๊ด์ด ์๋ค๋ ์ ์ ๋ค์ ํ ๋ฒ ๊ฐ์กฐํ ๊ฐ์น๊ฐ ์์ต๋๋ค." ๋
์ค์ ๋ก ์ฌ๋๋ค์ ๋ง์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ์์ ํ ๊ด๊ณํ ๋ชจ๋ธ์ด ํ์ํ์ง ์๋ค๋ ๊ฒ์ ๊นจ๋ฌ์์ต๋๋ค. ํนํ ์ฑ๋ฅ์ด ์ค์ํ๊ณ ์ง๊ณ๊ฐ ํฌํจ๋ ํน์ ๋จ์ ์ฟผ๋ฆฌ๊ฐ ์ง๋ฐฐ์ ์ธ ๊ฒฝ์ฐ, ์ฆ ๋ฉํธ๋ฆญ์ ์ ์ํ๊ฒ ๊ณ์ฐํ๊ณ ์ด๋ฅผ ๋ฐ์ดํฐ์ ๊ธฐ๋กํ๋ ๊ฒ์ด ์ค์ํ ๊ฒฝ์ฐ์๋ ๋์ฑ ๊ทธ๋ ์ต๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐ ๋๋ถ๋ถ์ ๊ด๊ณํ ๊ธฐ๋ฅ์ ๋ถํ์ํ ๋ฟ๋ง ์๋๋ผ ์ ํดํ ๊ฒ์ผ๋ก ๋ฐํ์ก์ต๋๋ค. ํน์ ์์ ์ ๋ํด ์ฐ๋ฆฌ์๊ฒ ๊ฐ์ฅ ์ค์ํ ๊ฒ์ธ ์์ฐ์ฑ์ ๋ง์น ์ ์๋ค๋ฉด ์ ํ์คํํด์ผ ํฉ๋๊น?
๋ํ ๊ธฐ์กด ๊ด๊ณํ ๋ชจ๋ธ์ ๊ณ ์ ๋ ์ํ์ ์คํค๋ง ๋์ ์ ์ฐํ ์คํค๋ง๊ฐ ํ์ํ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ์ด๋ ์์คํ ์ ๋ฐฐํฌํ๊ณ ์ ์ํ๊ฒ ์์ ์ ์์ํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ์ฒ๋ฆฌํ๊ฑฐ๋ ์ ์ฅ๋ ๋ฐ์ดํฐ์ ์คํค๋ง ๋ฐ ์ ํ์ ์ฒ๋ฆฌํ๋ ๊ฒ์ด ์ค์ํ ๊ฒฝ์ฐ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ์์ฒญ๋๊ฒ ๋จ์ํํฉ๋๋ค. ๊ทธ๋ค์ง ์ค์ํ์ง ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, ์ฐ๋ฆฌ๋ ์ ๋ฌธ๊ฐ ์์คํ ์ ๋ง๋ค๊ณ ์ผ๋ถ ๋ฉํ ์ ๋ณด์ ํจ๊ป ํน์ ๋๋ฉ์ธ์ ๋ํ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ค๊ณ ํฉ๋๋ค. ๋ชจ๋ ํ๋๋ฅผ ์์ง ๋ชปํ๊ณ ๋จ์ํ ๊ฐ ๋ ์ฝ๋์ ๋ํด JSON์ ์ ์ฅํ ์ ์์ต๋๋ค. ์ด๋ ๋ฐ์ดํฐ ํ์ฅ์ ์ํ ๋งค์ฐ ์ ์ฐํ ํ๊ฒฝ์ ์ ๊ณตํฉ๋๋ค. ๋ชจ๋ธ ๋ฐ ๋น ๋ฅธ ๋ฐ๋ณต - ๋ฐ๋ผ์ ์ด ๊ฒฝ์ฐ์๋ NoSQL์ด ํจ์ฌ ๋ ์ ํธ๋๊ณ ์ฝ๊ธฐ ์ฝ์ต๋๋ค. ์์ ํญ๋ชฉ(NoSQL์ด ํ์ํ ๊ณณ์ ๋ฐ๋ก ์์๋ ๋ด ํ๋ก์ ํธ ์ค ํ๋์์)
{"en_wikipedia_url":"https://en.wikipedia.org/wiki/Johnny_Cash",
"ru_wikipedia_url":"https://ru.wikipedia.org/wiki/?curid=301643",
"ru_wiki_pagecount":149616,
"entity":[42775,"ะะถะพะฝะฝะธ ะัั","ru"],
"en_wiki_pagecount":2338861}
๋ ์ฝ์ด๋ณด์ค ์ ์์ต๋๋ค
๋ฌด์์ ๊ณต๋ถํ ๊น์?
๋์ ์ฌ๊ธฐ์๋ ์์ , ํด๋น ์์ ์ ์์ฑ, ์ด ์ค๋ช ์ ๋ง๋ ์ฌ์ฉ ๊ฐ๋ฅํ NoSQL ์์คํ ์ ์ฒ ์ ํ ๋ถ์ํ ๋ค์ ์ด ์์คํ ์ ๋ํ ์ฐ๊ตฌ๋ฅผ ์์ํ๋ฉด ๋ฉ๋๋ค.
์คํฌ๋ฆฝํ ์ฟผ๋ฆฌ ์ธ์ด
์ฒ์์๋ Python์ด ์ผ๋ฐ์ ์ผ๋ก ๊ทธ๊ฒ๊ณผ ์ด๋ค ๊ด๋ จ์ด ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ๊ฒ์ ์ฟผ๋ฆฌ์ ๊ดํ ๊ฒ์ด ์๋๋ผ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋๋ค.
- Pandas๋ ๋ง ๊ทธ๋๋ก ๋ฐ์ดํฐ ๊ณผํ์ ์ค์์ค ๊ตฐ์ฉ ์นผ์ด๋ฉฐ, ๊ทธ ์์์ ์์ฒญ๋ ์์ ๋ฐ์ดํฐ ๋ณํ, ์ง๊ณ ๋ฑ์ด ๋ฐ์ํฉ๋๋ค.
- Numpy - ๋ฒกํฐ ๊ณ์ฐ, ํ๋ ฌ ๋ฐ ์ ํ ๋์ํ์ด ์์ต๋๋ค.
- Scipy - ์ด ํจํค์ง์๋ ๋ง์ ์ํ, ํนํ ํต๊ณ๊ฐ ํฌํจ๋์ด ์์ต๋๋ค.
- Jupyter ์ฐ๊ตฌ์ - ๋ง์ ํ์์ ๋ฐ์ดํฐ ๋ถ์์ด ๋ ธํธ๋ถ์ ์ ํฉํฉ๋๋ค. ์์๋๋ฉด ์ ์ฉํฉ๋๋ค.
- ์์ฒญ - ๋คํธ์ํฌ ์์ .
- Pyspark๋ ๋ฐ์ดํฐ ์์ง๋์ด๋ค ์ฌ์ด์์ ๋งค์ฐ ์ธ๊ธฐ๊ฐ ๋์ผ๋ฉฐ, ๋จ์ํ ์ธ๊ธฐ๊ฐ ๋๊ธฐ ๋๋ฌธ์ ์ด ์ ํ์ด๋ Spark์ ์ํธ ์์ฉํด์ผ ํ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค.
- *Selenium - ์ฌ์ดํธ ๋ฐ ๋ฆฌ์์ค์์ ๋ฐ์ดํฐ๋ฅผ ์์งํ๋ ๋ฐ ๋งค์ฐ ์ ์ฉํ๋ฉฐ ๋๋ก๋ ๋ฐ์ดํฐ๋ฅผ ์ป์ ์ ์๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ด ์๋ ๊ฒฝ์ฐ๋ ์์ต๋๋ค.
๋์ ์ฃผ์ ์กฐ์ธ: Python์ ๋ฐฐ์ฐ์ธ์!
ํ๋ค
๋ค์ ์ฝ๋๋ฅผ ์๋ก ๋ค์ด๋ณด๊ฒ ์ต๋๋ค.
import pandas as pd
df = pd.read_csv(โdata/dataset.csvโ)
# Calculate and rename aggregations
all_together = (df[df[โtrip_typeโ] == โreturnโ]
.groupby(['start_station_name','end_station_name'])
.agg({'trip_duration_seconds': [np.size, np.mean, np.min, np.max]})
.rename(columns={'size': 'num_trips',
'mean': 'avg_duration_seconds',
'amin': min_duration_seconds',
โamax': 'max_duration_seconds'}))
๋ณธ์ง์ ์ผ๋ก ์ฐ๋ฆฌ๋ ์ฝ๋๊ฐ ๊ณ ์ ์ ์ธ SQL ํจํด์ ๋ง๋๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
SELECT start_station_name, end_station_name, count(trip_duration_seconds) as size, โฆ..
FROM dataset
WHERE trip_type = โreturnโ
GROUPBY start_station_name, end_station_name
๊ทธ๋ฌ๋ ์ค์ํ ๋ถ๋ถ์ ์ด ์ฝ๋๊ฐ ์คํฌ๋ฆฝํธ์ ํ์ดํ๋ผ์ธ์ ์ผ๋ถ๋ผ๋ ๊ฒ์ ๋๋ค. ์ค์ ๋ก ์ฐ๋ฆฌ๋ Python ํ์ดํ๋ผ์ธ์ ์ฟผ๋ฆฌ๋ฅผ ๋ด์ฅํ๊ณ ์์ต๋๋ค. ์ด ์ํฉ์์๋ Pandas ๋๋ pySpark์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ฟผ๋ฆฌ ์ธ์ด๊ฐ ์ ๊ณต๋ฉ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก pySpark์์๋ ๋ค์๊ณผ ๊ฐ์ ์ ์ ์ผ๋ก ์ฟผ๋ฆฌ ์ธ์ด๋ฅผ ํตํด ์ ์ฌํ ์ ํ์ ๋ฐ์ดํฐ ๋ณํ์ ๋ณผ ์ ์์ต๋๋ค.
df.filter(df.trip_type = โreturnโ)
.groupby(โdayโ)
.agg({duration: 'mean'})
.sort()
์ด๋์, ๋ฌด์์ ์ฝ์๊น
์ผ๋ฐ์ ์ผ๋ก Python ์์ฒด์ ๋ํด
์ฟผ๋ฆฌ ์ธ์ด๋ก์์ ์ ธ
์ ๊ฐ ์์ ํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋ฐ ๋ถ์ ํ๋ก์ ํธ ์ค ์๋น์๋ ์ค์ ๋ก Python, Java์์ ์ฝ๋๋ฅผ ํธ์ถํ๋ ์ ธ ์คํฌ๋ฆฝํธ์ ์ ธ ๋ช ๋ น ์์ฒด์์ต๋๋ค. ๋ฐ๋ผ์ ์ผ๋ฐ์ ์ผ๋ก bash/zsh/etc์ ํ์ดํ๋ผ์ธ์ ์ผ์ข ์ ์์ ์์ค ์ฟผ๋ฆฌ๋ก ๊ฐ์ฃผํ ์ ์์ต๋๋ค(๋ฌผ๋ก ๊ฑฐ๊ธฐ์ ๋ฃจํ๋ฅผ ๋ฃ์ ์ ์์ง๋ง ์ด๋ ์ ์ธ์ด์ DS ์ฝ๋์์๋ ์ผ๋ฐ์ ์ด์ง ์์ต๋๋ค). ๊ฐ๋จํ ์ - ์ํค๋ฐ์ดํฐ์ QID ๋งคํ๊ณผ ๋ฌ์์์ด ๋ฐ ์์ด ์ํค์ ๋ํ ์ ์ฒด ๋งํฌ๋ฅผ ์ํํด์ผ ํ์ต๋๋ค. ์ด๋ฅผ ์ํด bash์ ๋ช ๋ น์์ ๊ฐ๋จํ ์์ฒญ์ ์์ฑํ๊ณ ์ถ๋ ฅ์ ์ํด Python์ผ๋ก ๊ฐ๋จํ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ์ต๋๋ค. ๋ค์๊ณผ ๊ฐ์ด ์ ๋ฆฌํ์ธ์:
pv โdata/latest-all.json.gzโ |
unpigz -c |
jq --stream $JQ_QUERY |
python3 scripts/post_process.py "output.csv"
์ด๋์์
JQ_QUERY = 'select((.[0][1] == "sitelinks" and (.[0][2]=="enwiki" or .[0][2] =="ruwiki") and .[0][3] =="title") or .[0][1] == "id")'
์ค์ ๋ก ์ด๋ ํ์ํ ๋งคํ์ ์์ฑํ ์ ์ฒด ํ์ดํ๋ผ์ธ์ด์์ต๋๋ค. ๋ณด์๋ค์ํผ ๋ชจ๋ ๊ฒ์ด ์คํธ๋ฆผ ๋ชจ๋์์ ์๋ํ์ต๋๋ค.
- pv filepath - ํ์ผ ํฌ๊ธฐ์ ๋ฐ๋ผ ์งํ๋ฅ ํ์์ค์ ์ ๊ณตํ๊ณ ํด๋น ๋ด์ฉ์ ๊ณ์ ์ ๋ฌํฉ๋๋ค.
- unpigz -c ์์นด์ด๋ธ์ ์ผ๋ถ๋ฅผ ์ฝ๊ณ jq์ ์ ๊ณตํ์ต๋๋ค.
- ํค๊ฐ ์๋ jq - ์คํธ๋ฆผ์ ์ฆ์ ๊ฒฐ๊ณผ๋ฅผ ์์ฑํ๊ณ ์ด๋ฅผ Python์ ํ์ฒ๋ฆฌ๊ธฐ(์ฒซ ๋ฒ์งธ ์์ ๋์ผ)์ ์ ๋ฌํ์ต๋๋ค.
- ๋ด๋ถ์ ์ผ๋ก ํฌ์คํธ ํ๋ก์ธ์๋ ์ถ๋ ฅ ํ์์ ์ง์ ํ๋ ๊ฐ๋จํ ์ํ ๋จธ์ ์ด์์ต๋๋ค.
์ ์ฒด์ ์ผ๋ก ๋๊ท๋ชจ ๋ฐ์ดํฐ(0.5TB)์ ๋ํด ํ๋ฆ ๋ชจ๋๋ก ์๋ํ๋ ๋ณต์กํ ํ์ดํ๋ผ์ธ์ ์๋นํ ๋ฆฌ์์ค ์์ด ๊ฐ๋จํ ํ์ดํ๋ผ์ธ๊ณผ ๋ช ๊ฐ์ง ๋๊ตฌ๋ก ๋ง๋ค์ด์ก์ต๋๋ค.
๋ ๋ค๋ฅธ ์ค์ํ ํ: ํฐ๋ฏธ๋์์ ์ ์๋ํ๊ณ ํจ๊ณผ์ ์ผ๋ก bash/zsh/etc๋ฅผ ์์ฑํ ์ ์์ด์ผ ํฉ๋๋ค.
์ด๋์ ์ ์ฉํ ๊น์? ์, ๊ฑฐ์ ๋ชจ๋ ๊ณณ์์ ๋ค์ ๋ง์๋๋ฆฌ์ง๋ง, ์ธํฐ๋ท์๋ ๊ณต๋ถํ ์๋ฃ๊ฐ ๋ง์ด ์์ต๋๋ค. ํนํ ์ฌ๊ธฐ์๋
R ์คํฌ๋ฆฝํ
๋ค์ ๋งํ์ง๋ง ๋ ์๋ ์ด๋ ๊ฒ ์ธ์น ์๋ ์์ต๋๋ค. ์, ์ด๊ฒ์ ์ ์ฒด ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋๋ค! ๋ฌผ๋ก ๊ทธ๊ฐ ์ณ์ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ ๋๋ ์ค์ ๋ก ์ฟผ๋ฆฌ ์ธ์ด์ ๋งค์ฐ ์ ์ฌํ ๋งฅ๋ฝ์์ R์ ์์ฃผ ์ ํ์ต๋๋ค.
R์ ์ ์ ์ปดํจํ
๊ณผ ์๊ฐํ๋ฅผ ์ํ ํต๊ณ ์ปดํจํ
ํ๊ฒฝ์ด์ ์ธ์ด์
๋๋ค.
์ทจํ
๋ฐ์ดํฐ ๊ณผํ์๊ฐ R์ ์์์ผ ํ๋ ์ด์ ๋ ๋ฌด์์ ๋๊น? ์ ์ด๋ R์์ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ๋ IT๊ฐ ์๋ ์ฌ๋๋ค์ด ์์ฒญ๋๊ฒ ๋ง๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ ๋ ๋ค์๊ณผ ๊ฐ์ ๊ณณ์์ ์ด๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค.
- ์ ์ฝ ๋ถ๋ฌธ.
- ์๋ฌผํ์๋ค.
- ๊ธ์ต ๋ถ๋ฌธ.
- ํต๊ณ๋ฅผ ๋ค๋ฃจ๋ ์์ ์ํ ๊ต์ก์ ๋ฐ์ ์ฌ๋๋ค์ ๋๋ค.
- ์ ๋ฌธ ํต๊ณ ๋ชจ๋ธ ๋ฐ ๊ธฐ๊ณ ํ์ต ๋ชจ๋ธ(์ ์์ ๋ฒ์ ์์ R ํจํค์ง๋ก๋ง ์ฐพ์ ์ ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง์)
์ค์ ๋ก ์ฟผ๋ฆฌ ์ธ์ด์ธ ์ด์ ๋ ๋ฌด์์ ๋๊น? ํํ ๋ฐ๊ฒฌ๋๋ ํํ๋ก๋ ์ค์ ๋ก๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์ฟผ๋ฆฌ(๋ชจ๋ธ) ๋งค๊ฐ๋ณ์๋ฅผ ์์ ํ๋ ๊ฒ๋ฟ๋ง ์๋๋ผ ggplot2 ๋ฑ์ ํจํค์ง์์ ๋ฐ์ดํฐ๋ฅผ ์๊ฐํํ๋ ๋ฑ ๋ชจ๋ธ์ ์์ฑํด๋ฌ๋ผ๋ ์์ฒญ์ธ๋ฐ, ์ด๊ฒ๋ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๋ ํํ๋ค. .
์๊ฐํ ์ฟผ๋ฆฌ ์์
ggplot(data = beav,
aes(x = id, y = temp,
group = activ, color = activ)) +
geom_line() +
geom_point() +
scale_color_manual(values = c("red", "blue"))
์ผ๋ฐ์ ์ผ๋ก R์ ๋ง์ ์์ด๋์ด๊ฐ ๋ฐ์ดํฐ ํ๋ ์ ๋ฐ ๋ฐ์ดํฐ ๋ฒกํฐํ์ ๊ฐ์ pandas, numpy ๋๋ scipy์ ๊ฐ์ Python ํจํค์ง๋ก ๋ง์ด๊ทธ๋ ์ด์ ๋์์ผ๋ฏ๋ก ์ผ๋ฐ์ ์ผ๋ก R์ ๋ง์ ๊ฒ๋ค์ด ์ต์ํ๊ณ ํธ๋ฆฌํด ๋ณด์ผ ๊ฒ์ ๋๋ค.
์๋ฅผ ๋ค์ด, ์ฐ๊ตฌํ ์์ค๊ฐ ๋ง์ด ์์ต๋๋ค.
์ง์ ๊ทธ๋ํ
์ฌ๊ธฐ์๋ ์ง์ ๊ทธ๋ํ์ ๊ทธ๋ํ์ฉ ์ฟผ๋ฆฌ ์ธ์ด๋ก ์์ ํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๊ฝค ๋ง๊ธฐ ๋๋ฌธ์ ์ฝ๊ฐ ํน์ดํ ๊ฒฝํ์ ํ์ต๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์ด ๋ถ๋ถ์ ์ข ๋ ์ด๊ตญ์ ์ด๊ธฐ ๋๋ฌธ์ ๊ธฐ๋ณธ์ ์ธ ๊ฒ๋ง ๊ฐ๋จํ ์ดํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
๊ธฐ์กด ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์๋ ๊ณ ์ ๋ ์คํค๋ง๊ฐ ์์ง๋ง ์ฌ๊ธฐ์๋ ์คํค๋ง๊ฐ ์ ์ฐํ๋ฉฐ ๊ฐ ์กฐ๊ฑด์๋ ์ค์ ๋ก "์ด" ๊ทธ ์ด์์ ๋๋ค.
๋น์ ์ด ์ฌ๋์ ๋ชจ๋ธ๋งํ๊ณ ํต์ฌ ์ฌํญ์ ์ค๋ช ํ๊ณ ์ถ๋ค๊ณ ์์ํด๋ณด์ญ์์ค. ์๋ฅผ ๋ค์ด ํน์ ์ฌ๋์ธ Douglas Adams๋ฅผ ์ ํํ๊ณ ์ด ์ค๋ช ์ ๊ธฐ์ด๋ก ์ฌ์ฉํฉ์๋ค.
๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ์์ฒญ๋ ์์ ์ด์ด ํฌํจ๋ ๊ฑฐ๋ํ ํ ์ด๋ธ์ ์์ฑํด์ผ ํ ๊ฒ์ ๋๋ค. ๊ทธ ์ค ๋๋ถ๋ถ์ NULL์ด๊ฑฐ๋ ์ผ๋ถ ๊ธฐ๋ณธ False ๊ฐ์ผ๋ก ์ฑ์์ ธ ์์ ๊ฒ์ ๋๋ค. ํ๊ตญ ๊ตญ๋ฆฝ ๋์๊ด ํญ๋ชฉ - ๋ฌผ๋ก ๋ณ๋์ ํ ์ด๋ธ์ ๋ฃ์ ์๋ ์์ง๋ง ์ด๋ ๊ถ๊ทน์ ์ผ๋ก ๊ณ ์ ๋ ๊ด๊ณํ์ ์ฌ์ฉํ์ฌ ์ ์ด๋ก ์ ์ฐํ ๋ ผ๋ฆฌ ํ๋ก๋ฅผ ๋ชจ๋ธ๋งํ๋ ค๋ ์๋์ผ ๊ฒ์ ๋๋ค.
๋ฐ๋ผ์ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ๊ทธ๋ํ ๋๋ ์ด์ง ๋ฐ ๋จํญ ๋ถ์ธ ํํ์์ผ๋ก ์ ์ฅ๋๋ค๊ณ ์์ํด ๋ณด์ธ์.
์ด๋์ ์ด๋ฐ ์ผ์ ๋ง๋ ์ ์๋์? ์ฒซ์งธ๋ก,
๋ค์์ ์ ๊ฐ ์ฌ์ฉํ๊ณ ์์ ํ ์ฃผ์ ์ฟผ๋ฆฌ ์ธ์ด์ ๋๋ค.
์คํํด
์ํค :
SPARQL(์ฌ๊ท ์ฝ์ด ๋ถํฐ๊ณตํ๊ณผ. SPARQL ํ๋กํ ์ฝ ๋ฐ RDF ์ฟผ๋ฆฌ ์ธ์ด) -๋ฐ์ดํฐ ์ฟผ๋ฆฌ ์ธ์ด , ๋ชจ๋ธ๋ก ํํ๋จRDF ๊ณผํ๋กํ ์ฝ ์ด๋ฌํ ์์ฒญ์ ์ ์กํ๊ณ ์๋ตํฉ๋๋ค. SPARQL์ ๊ถ์ฅํฉ๋๋คW3C ์ปจ์์์ ๊ทธ๋ฆฌ๊ณ ๊ธฐ์ ์ค ํ๋์๋งจํฑ ์น .
๊ทธ๋ฌ๋ ์ค์ ๋ก๋ ๋ ผ๋ฆฌ์ ๋จํญ ๋ฐ ์ดํญ ์กฐ๊ฑด๋ถ์ ๋ํ ์ฟผ๋ฆฌ ์ธ์ด์ ๋๋ค. ๋ถ์ธ ํํ์์์ ์์ ๋ ๊ฒ๊ณผ ๊ทธ๋ ์ง ์์ ๊ฒ์ ์กฐ๊ฑด๋ถ๋ก ์ง์ ํ๋ ๊ฒ๋ฟ์ ๋๋ค(๋งค์ฐ ๋จ์ํ๋จ).
SPARQL ์ฟผ๋ฆฌ๊ฐ ์คํ๋๋ RDF(Resource Description Framework) ๊ธฐ๋ฐ ์์ฒด๋ ์ผ์ค ๊ตฌ์กฐ์
๋๋ค. object, predicate, subject
- ์ฟผ๋ฆฌ๋ ์ ์ ์ ์ง์ ๋ ์ ํ ์ฌํญ์ ๋ฐ๋ผ ํ์ํ ํธ๋ฆฌํ์ ์ ํํฉ๋๋ค. p_55(X, q_33)์ด ์ฐธ์ธ X๋ฅผ ์ฐพ์ต๋๋ค. ์ฌ๊ธฐ์ ๋ฌผ๋ก p_55๋ ID 55์์ ์ผ์ข
์ ๊ด๊ณ์ด๊ณ q_33์ ID 33์ ๊ฐ์ง ๊ฐ์ฒด(์ฌ๊ธฐ์ ๊ทธ๋ฆฌ๊ณ ์ ์ฒด ์ด์ผ๊ธฐ, ๋ค์ ๋ชจ๋ ์ข
๋ฅ์ ์ธ๋ถ ์ฌํญ์ ์๋ตํจ).
๋ฐ์ดํฐ ํํ์ ์:
๊ตญ๊ฐ๋ณ ์ฌ์ง ๋ฐ ์์๋ ์ฌ๊ธฐ๋ฅผ ์ฐธ์กฐํ์ธ์.
๊ธฐ๋ณธ ์ฟผ๋ฆฌ ์
์ค์ ๋ก ์ฐ๋ฆฌ๋ ์ ์ด์ ๋ํด ?country ๋ณ์์ ๊ฐ์ ์ฐพ๊ณ ์ถ์ต๋๋ค.
member_of, member_of(?country,q458) ๋ฐ q458์ด ์ ๋ฝ ์ฐํฉ์ ID์ธ ๊ฒ์ ์ฌ์ค์
๋๋ค.
Python ์์ง ๋ด๋ถ์ ์ค์ SPARQL ์ฟผ๋ฆฌ ์:
์ผ๋ฐ์ ์ผ๋ก SPARQL์ ์์ฑํ๋ ๋์ ์ฝ์ด์ผ ํ์ต๋๋ค. ๊ทธ๋ฐ ์ํฉ์์๋ ๋ฐ์ดํฐ๊ฐ ๊ฒ์๋๋ ๋ฐฉ์์ ์ ํํ ์ดํดํ๊ธฐ ์ํด ์ต์ํ ๊ธฐ๋ณธ ์์ค์์ ์ธ์ด๋ฅผ ์ดํดํ๋ ๊ฒ์ด ์ ์ฉํ ๊ธฐ์ ์ด ๋ ๊ฒ์ ๋๋ค.
์จ๋ผ์ธ์ผ๋ก ๊ณต๋ถํ ์๋ฃ๊ฐ ๋ง์ด ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ฌ๊ธฐ
๋ ผ๋ฆฌ์ ์ฟผ๋ฆฌ ์ธ์ด
๋ด ๊ธฐ์ฌ์์ ์ฃผ์ ์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ฝ์ ์ ์์ต๋๋ค.
output(X) :- country(X), member_of(X,โEUโ).
์ฌ๊ธฐ์๋ X์ ๊ฒฝ์ฐ country(X)๊ฐ ์ฐธ์ธ ๊ฒฝ์ฐ ์๋ก์ด ์กฐ๊ฑด์ ์ถ๋ ฅ/1(/1์ ๋จํญ์ ์๋ฏธ)์ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ค๋ช ํฉ๋๋ค. ์ฆ, X๋ ๊ตญ๊ฐ์ด๊ณ member_of(X,"EU ")์ด๊ธฐ๋ ํฉ๋๋ค.
์ฆ, ์ด ๊ฒฝ์ฐ ๋ฐ์ดํฐ์ ๊ท์น์ด ๋ชจ๋ ๋์ผํ ๋ฐฉ์์ผ๋ก ์ ์๋๋ฏ๋ก ๋ฌธ์ ๋ฅผ ๋งค์ฐ ์ฝ๊ณ ์ ๋ชจ๋ธ๋งํ ์ ์์ต๋๋ค.
์ ๊ณ ์ด๋์์ ๋ง๋ฌ๋์?: ํด๋น ์ธ์ด๋ก ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๋ ํ์ฌ์ ์์คํ ํต์ฌ์ ํ์ฌ ํ๋ก์ ํธ์ ๋ํ ์ ์ฒด ๋๊ท๋ชจ ํ๋ก์ ํธ-์ด๊ฒ์ ๋ค์ ์ด๊ตญ์ ์ธ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง ๋๋ก๋ ๋ฐ์ํฉ๋๋ค.
์ํค๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ ผ๋ฆฌ์ ์ธ์ด์ ์ฝ๋ ์กฐ๊ฐ ์:
์๋ฃ: ์ฌ๊ธฐ์ ํ๋ ๋ ผ๋ฆฌ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ธ Answer Set ํ๋ก๊ทธ๋๋ฐ์ ๋ํ ๋ช ๊ฐ์ง ๋งํฌ๋ฅผ ์ ๊ณตํ๊ฒ ์ต๋๋ค. ๊ณต๋ถํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
http://peace.eas.asu.edu/aaai12tutorial/asp-tutorial-aaai.pdf http://ceur-ws.org/Vol-1145/tutorial1.pdf https://www.youtube.com/watch?v=gVQ0bP8zyHw https://www.youtube.com/watch?v=kdcd7Je2glc https://potassco.org/book/ http://potassco.sourceforge.net/teaching.html https://www.cs.uni-potsdam.de/~torsten/Potassco/Tutorials/fmcad12.pdf
์ถ์ฒ : habr.com