전문 문서를 제작하기 위해서는 다양한 요소가 기술적으로 결합되어야만 된다.
상기 세가지 요소가 유기적으로 연결이 되어야만 전문적인 보고서 문서를 제작할 수 있다.
[]: Dale Seo (Mar 14, 2020), “파이썬으로 가짜 데이터 생성하기 - Faker”, Engineering Blog
데이터 과학을 하다보면 처음 데이터가 필요한 경우가 많다. 이런 경우 가짜 데이터를 만들어서 원하는 결과를 얻은 후에 나중에 이를 실데이터로 치환하는 경우 생산성을 많이 높일 수 있고 사전에 관련 문제를 해결하는데 도움을 주기도 한다. profile() 메쏘드를 사용해서 기본 데이터를 얻을 수 있지만 특정 필요한 필드만 정의해서 개인 신상에 대한 가짜 데이터도 얻을 수 있다.
from faker import Faker
import pandas as pd
fake = Faker("ko_KR")
# 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))
profiles = [fake.profile() for i in range(10)]
df_faker = pd.DataFrame(profiles)
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]
df_faker.to_csv("data/faker.csv", sep = "|", na_rep = "NaN")파이썬 Faker로 생성한 가짜 데이터를 가지고 기본적인 통계 분석 작업을 수행하기에 앞서 생성한 가짜 고객데이터를 살펴본다.
library(tidyverse)
library(reticulate)
faker_tbl <- read_delim("data/faker.csv", delim = "|")
faker_tbl %>%
reactable::reactable()FinanceDataReader 파이썬 팩키지를 활용하여 주식 데이터를 얻어온다.
pip install beautifulsoup4pip install finance-datareaderimport FinanceDataReader as fdr
# 삼성전자(005930) : (2017-01-0 ~ 2019-12-31)
samsung_df = fdr.DataReader('005930', '2017-01-01', '2019-12-31')
# Apple(AAPL) : (2017-01-0 ~ 2019-12-31)
apple_df = fdr.DataReader('AAPL', '2017-01-01', '2019-12-31')
# AMAZON(AMZN) : (2017-01-0 ~ 2019-12-31)
aws_df = fdr.DataReader('AMZN', '2017-01-01', '2019-12-31')
samsung_df.to_csv("data/stock_samsung.csv", sep = "|", na_rep = "NaN")
apple_df.to_csv("data/stock_apple.csv", sep = "|", na_rep = "NaN")
aws_df.to_csv("data/stock_aws.csv", sep = "|", na_rep = "NaN")데이터베이스를 구축하고자 하는 경우 데이터베이스 시스템을 갖추고 데이터를 테이블로 저장한다.
# 고객 정보
faker_tbl <- read_delim("data/faker.csv", delim = "|") %>%
select(name, job, ssn, sex, address, mail, company)
samsung_tbl <- read_delim("data/stock_samsung.csv", delim = "|")
apple_tbl <- read_delim("data/stock_apple.csv", delim = "|")
aws_tbl <- read_delim("data/stock_aws.csv", delim = "|")
# 주가정보
stock_tbl <- samsung_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)
investment_tbl <- tibble(name = faker_tbl %>% select(name) %>% pull,
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 ---------------------------------------------------------------
conn <- dbConnect(SQLite(), dbname="data/stock.sqlite")
# 테이블 넣기 ---------------------------------------------------------------
DBI::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)
dbDisconnect(conn)library(datamodelr)
library(DiagrammeR)
conn <- dbConnect(SQLite(), dbname="data/stock.sqlite")
customers <- tbl(conn, "customers") %>% collect()
stocks <- tbl(conn, "stocks") %>% collect()
investment <- tbl(conn, "investment") %>% collect()
stock_investment_model <- dm_from_data_frames(customers, investment, stocks)
stock_investment_model <- dm_add_references(
stock_investment_model,
customers$name == investment$name,
investment$stock == stocks$stock
)
stock_investment_graph <- dm_create_graph(stock_investment_model, rankdir = "LR", col_attr = c("column", "type"))
dm_render_graph(stock_investment_graph)dbDisconnect(conn)앞서 작성한 데이터베이스에 접속하여 SQL Query 문을 보내 필요한 정보를 데이터베이스에서 추출한다.
stock_db <- DBI::dbConnect(RSQLite::SQLite(), dbname="data/stock.sqlite")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