전문 문서를 제작하기 위해서는 다양한 요소가 기술적으로 결합되어야만 된다.
상기 세가지 요소가 유기적으로 연결이 되어야만 전문적인 보고서 문서를 제작할 수 있다.
[]: Dale Seo (Mar 14, 2020), “파이썬으로 가짜 데이터 생성하기 - Faker”, Engineering Blog
데이터 과학을 하다보면 처음 데이터가 필요한 경우가 많다. 이런 경우 가짜 데이터를 만들어서 원하는 결과를 얻은 후에 나중에 이를 실데이터로 치환하는 경우 생산성을 많이 높일 수 있고 사전에 관련 문제를 해결하는데 도움을 주기도 한다. profile()
메쏘드를 사용해서 기본 데이터를 얻을 수 있지만 특정 필요한 필드만 정의해서 개인 신상에 대한 가짜 데이터도 얻을 수 있다.
from faker import Faker
import pandas as pd
= Faker("ko_KR")
fake
# def create_rows_faker(num=1):
# output = [{"name" : fake.name(),
# "email" : fake.email(),
# # "company" : fake.company(),
# # "job" : fake.job(),
# # "credit card": fake.credit_card_provider(),
# # "city" : fake.city(),
# # "ip_address" : fake.ipv4_private(),
# # "profile" : fake.profile(),
# # "date_time" : fake.date_time(),
# "address" : fake.address()} for x in range(num)]
# return output
#
# df_faker = pd.DataFrame(create_rows_faker(100))
= [fake.profile() for i in range(10)]
profiles = pd.DataFrame(profiles)
df_faker
df_faker.head()
job company ... mail birthdate
0 전기공학 기술자 및 연구원 주식회사 박하김 ... zi@nate.com 2005-10-16
1 여행 사무원 김이박 ... ijihu@dreamwiz.com 1974-12-25
2 소방관 윤김김 ... minjun77@live.com 1970-12-21
3 국가/지방 및 공공행정 사무원 주식회사 강이나 ... sju@nate.com 1956-10-04
4 주조원 유한회사 이 ... ijimin@hotmail.com 1992-10-17
[5 rows x 13 columns]
"data/faker.csv", sep = "|", na_rep = "NaN") df_faker.to_csv(
파이썬 Faker
로 생성한 가짜 데이터를 가지고 기본적인 통계 분석 작업을 수행하기에 앞서 생성한 가짜 고객데이터를 살펴본다.
library(tidyverse)
library(reticulate)
read_delim("data/faker.csv", delim = "|")
faker_tbl <-
%>%
faker_tbl reactable::reactable()
FinanceDataReader
파이썬 팩키지를 활용하여 주식 데이터를 얻어온다.
pip install beautifulsoup4
pip install finance-datareader
import FinanceDataReader as fdr
# 삼성전자(005930) : (2017-01-0 ~ 2019-12-31)
= fdr.DataReader('005930', '2017-01-01', '2019-12-31')
samsung_df
# Apple(AAPL) : (2017-01-0 ~ 2019-12-31)
= fdr.DataReader('AAPL', '2017-01-01', '2019-12-31')
apple_df
# AMAZON(AMZN) : (2017-01-0 ~ 2019-12-31)
= fdr.DataReader('AMZN', '2017-01-01', '2019-12-31')
aws_df
"data/stock_samsung.csv", sep = "|", na_rep = "NaN")
samsung_df.to_csv("data/stock_apple.csv", sep = "|", na_rep = "NaN")
apple_df.to_csv("data/stock_aws.csv", sep = "|", na_rep = "NaN") aws_df.to_csv(
데이터베이스를 구축하고자 하는 경우 데이터베이스 시스템을 갖추고 데이터를 테이블로 저장한다.
# 고객 정보
read_delim("data/faker.csv", delim = "|") %>%
faker_tbl <- select(name, job, ssn, sex, address, mail, company)
read_delim("data/stock_samsung.csv", delim = "|")
samsung_tbl <- read_delim("data/stock_apple.csv", delim = "|")
apple_tbl <- read_delim("data/stock_aws.csv", delim = "|")
aws_tbl <-
# 주가정보
samsung_tbl %>%
stock_tbl <- select(date = Date, samsung = Open) %>%
left_join(
%>%
apple_tbl select(date = Date, apple = Open)
%>%
) left_join(
%>%
aws_tbl select(date = Date, aws = Open)
)
stock_tbl %>%
stock_tbl <- pivot_longer(cols = -date, names_to = "stock", values_to = "price")
# 주식 보유현황
set.seed(777)
tibble(name = faker_tbl %>% select(name) %>% pull,
investment_tbl <-samsung = runif(nrow(faker_tbl), 0, 100) %>% round(., digits =0),
apple = runif(nrow(faker_tbl), 0, 100) %>% round(., digits =0),
aws = runif(nrow(faker_tbl), 0, 100) %>% round(., digits =0)) %>%
mutate(samsung = ifelse(samsung < 70, 0, samsung),
apple = ifelse(apple < 70, 0, apple),
aws = ifelse(aws < 70, 0, aws))
investment_tbl %>%
investment_tbl <- pivot_longer(cols = -name, names_to = "stock", values_to = "shares")
고객정보, 주식보유현황, 주가 정보가 있다고 가정하면 보유주식에 대한 시점별 주식변동에 따른 자산변동현황을 살펴볼 수 있다.
library(DBI)
library(RSQLite)
library(tidyverse)
# Create db ---------------------------------------------------------------
dbConnect(SQLite(), dbname="data/stock.sqlite")
conn <-
# 테이블 넣기 ---------------------------------------------------------------
::dbWriteTable(conn = conn, name = "customers", value = faker_tbl, overwrite = TRUE)
DBI::dbWriteTable(conn = conn, name = "stocks", value = stock_tbl, overwrite = TRUE)
DBI::dbWriteTable(conn = conn, name = "investment", value = investment_tbl, overwrite = TRUE)
DBI
dbDisconnect(conn)
library(datamodelr)
library(DiagrammeR)
dbConnect(SQLite(), dbname="data/stock.sqlite")
conn <-
tbl(conn, "customers") %>% collect()
customers <- tbl(conn, "stocks") %>% collect()
stocks <- tbl(conn, "investment") %>% collect()
investment <-
dm_from_data_frames(customers, investment, stocks)
stock_investment_model <-
dm_add_references(
stock_investment_model <-
stock_investment_model,$name == investment$name,
customers$stock == stocks$stock
investment
)
dm_create_graph(stock_investment_model, rankdir = "LR", col_attr = c("column", "type"))
stock_investment_graph <-dm_render_graph(stock_investment_graph)
dbDisconnect(conn)
앞서 작성한 데이터베이스에 접속하여 SQL Query 문을 보내 필요한 정보를 데이터베이스에서 추출한다.
DBI::dbConnect(RSQLite::SQLite(), dbname="data/stock.sqlite") stock_db <-
SQL 쿼리문을 작성하여 customers
테이블에서 필요한 정보를 추출한다.
SELECT name, sex, ssn, company FROM customers LIMIT 10;
name | sex | ssn | company |
---|---|---|---|
손영수 | M | 340417-2709054 | 주식회사 박하김 |
황상현 | M | 820704-2383128 | 김이박 |
구영희 | F | 080004-1264494 | 윤김김 |
이현숙 | F | 030804-2160982 | 주식회사 강이나 |
윤성민 | M | 880726-2752760 | 유한회사 이 |
황영호 | M | 200422-2863944 | 주식회사 최 |
지병철 | M | 640618-1390728 | 유한회사 성민이 |
김건우 | M | 770203-1539912 | (유) 전 |
류경희 | F | 730210-2716023 | 백박김 |
김혜진 | F | 800323-2972485 | (주) 이박최 |
데이터 과학자 이광춘 저작
kwangchun.lee.7@gmail.com