select *

    from v$version;

반응형
Posted by JoeSung
,
0. Intro

[AirBnB CF]

1. 질문

 구매전환율은 회원가입을 한 이용자 중 실제 예약으로 이어진 이용자의 비율을 의미합니다. 에어비앤비 ( AirBnB) 이용자의 첫여행국가별, 성별 구매전환율을 구하고 1) 실제 예약으로 이어진 이용자가 얼마나 되는지, 2) 어떤 성별이 더 높은 예약율을 보이는지, 3) 어떤 국가가 가장 예약될 가능성이 높은지를 알려주세요.



2. 참고data


train_users_2.csv.zip



(출처 : www.kaggle.com)


3. 테이블생성스크립트

create table air_user 

(id  varchar2(50), 

 date_account_created  date, 

 timestamp_first_active  number, 

 date_first_booking   varchar2(50), 

 gender  varchar2(50), 

 age    number(10), 

 signup_method  varchar2(50), 

 signup_flow  number(10), 

 language  varchar(10), 

 affiliate_channel  varchar2(50), 

 affiliate_provider   varchar2(50), 

 first_affiliate_tracked  varchar2(50), 

 signup_app  varchar2(50), 

 first_device_type  varchar2(50), 

 first_browser  varchar2(50), 

 country_destination varchar2(10)); 



4. 분석쿼리

select 여행목적지, 남자, 여자, 알수없음, case when 여행목적지 is not null then 남자+여자+알수없음 end as TOTAL

   from 

   (

  select *

    from 

    (

select a.여행목적지, a.gender, round( ( a.cnt_book / b.country_total )*100,2 ) as booking_ratio  -- booking_ratio : 첫 예약자의 여행목적지별 성별 전환율

  from 

  (

    select country_destination as "여행목적지", gender, count(*) as cnt_book   -- cnt_book : Airbnb 첫 예약자의 여행목적지별, 성별 예약자 수

from air_user

where date_first_booking is not null  

group by country_destination, gender

  ) a

  inner join

  (

    select country_destination as "여행목적지", count(country_destination) as country_total  -- country_total : Airbnb 첫 예약자의 여행목적지별 예약자 수

from air_user

group by country_destination

  ) b

  on a.여행목적지 = b.여행목적지

    )

    pivot( sum(booking_ratio) for gender in ('MALE' as "남자",'FEMALE' as "여자",'-unknown-' as "알수없음"))


union all


select 'TOTAL' as 여행목적지,

 round(sum(regexp_count(upper(gender), '^MALE')) / count(*)*100, 2) as 남자,

 round(sum(regexp_count(upper(gender), 'FEMALE')) / count(*)*100, 2) as 여자,

 round(sum(regexp_count(upper(gender), '-UNKNOWN-')) / count(*)*100, 2) as 알수없음

    from air_user

    where date_first_booking is not null

);


5. 결과화면


[그림 1. 국가별 성별 전환율]


6. 결론


1.1 에어비앤비 (AirBnB)에 가입하는 회원의 10명 중 최소 3명은 실제 예약으로 이어짐

 남성의 경우 31.18%, 여성의 경우 35.98%가 그리고 성별을 알 수 없는 경우 32.64%의 이용자가 회원가입 이후 첫 예약까지 이어졌다. 기존의 전문 숙박업인 호텔, 모텔이 경쟁자로 있다는 것을 생각해 보았을 때 비전문적으로 운영되는 AirBnB의 숙박 서비스의 예약률은 상당히 높은 수치인 것으로 생각된다.


1.2 (성별 분석) 여성의 구매전환율이 남성의 구매전환율보다 약 4%가량 높게 나타남

 '여행은 살아보는거야'. AirBnB의 마케팅 메시지인 '현지인 처럼 살아보는 경험'이 이용자들에게 제대로 전달이 되고 있다고 가정했을 때, 이러한 메시지는 남성보다 여성에게 더 잘 소구된다고 판단할 수 있다. 따라서, 차후 마케팅을 진행시에 여성을 타겟으로한 마케팅 진행시에 좀 더 높은 ROI를 달성할 수 있을 것으로 기대된다.


1.3 (국가별 분석) 남성의 경우 독일(DE)에서, 여성의 경우 프랑스(FR)에서 첫 AirBnB를 경험할 확률이 가장 높음

 남성들의 경우 가장 매력을 느낀 여행 국가는 1. DE(독일) 2. NL(네덜란드) 3. AU (오스트레일리아) 순으로 나타났고, 여성들의 경우 가장 매력을 느낀 여행 국가는 1. FR(프랑스) 2. IT(이탈리아) 3. GB (영국) 순으로 나타났다. 이유를 wild guessing 했을 때, 독일의 경우 '맥주'문화가 남성들에게 어필하지 않았나 싶고 네덜란드의 경우 법적 규제가 약해 '마약'과 '성문화'가 용이한 점이 남성들에게 어필했을 것이라고 추측된다. 여성들의 경우 선호하는 국가가 패션, 뷰티로 대표되는 럭셔리 산업이 발전해있고 도시의 이미지가 세련되었다는 특징이 있다. 따라서, 쇼핑의 용이성과 도시가 주는 세련됨 자체가 여성들에게 어필했을 것이라고 추측해볼 수 있다.

 차후 마케팅 진행시에, '독일 여행을 계획 중인 남성'과 '프랑스 여행을 계획 중인 여성'을 타겟으로 가장 먼저 진행했을 때 상대적으로 높은 ROI를 기대해볼 수 있을 것으로 기대된다.



7. 연습문제

airbnb_practice.csv 데이터를 사용하여 회원가입을 한 시점을 기준으로 

첫 예약이 이루어지기 까지의 시간을 다음과 같은 구간으로 나누어서 유져 수를 구해주세요. 


 -1일 미만  ( 0 )

 -1일 이상~2일 미만 ( 1 )

 -2일 이상~3일 미만 ( 2 )

 -3일 이상~4일 미만 ( 3 )

 -4일 이상~5일 미만 ( 4 )

 -5일 이상~6일 미만 ( 5 )

 -6일 이상~7일 미만 ( 6 )

 -7일 이상 ( 7 )



 [data set]

   

air_practice.csv




 [테이블 생성]

 create table pra

 (id  varchar2(100),

  day_diff  number(20));


  ** id : 회원고유 아이디

  ** day_diff : 회원가입으로부터 구매까지 걸린 날짜수






** Git Hub : https://github.com/JoeUnsung/airbnb_sql/blob/master/airbnb_convsersion_analysis.sql


 



반응형
Posted by JoeSung
,

lsnrctl status

반응형
Posted by JoeSung
,

Q. 이전에 수행했던 SQL 쿼리들의 히스토리를 어떻게 확인할까? (오라클 DB 기준)


A. Version_startscn을 통해서 확인할 수 있다.


1)  scn(system change number) 를 확인한다. 

          --db에서 발생하는 변경사항에 대한 번호

            Select current_scn from v$database; 

             

2) 시간도 확인

            Select systimestamp from dual; 

            --2017-09-28 15:10:16

            

3) 아래의 쿼리를 통해 where절에 확인하고 싶은 기준 시간을 넣어가며 확인

             select versions_startscn, versions_endscn, versions_operation, ename, sal, deptno

            from emp

              versions between scn minvalue and maxvalue

              where versions_startscn > 1379911;

반응형
Posted by JoeSung
,


[결과]



- 국내에서 치킨집이 폐업하는 건수는 평균적으로 연간 4-500건 대에 머무릅니다.


- 그런데, 2007년에는 3579건으로 거의 7~8배에 가까운 치킨집이 폐업을 하게 됩니다.


- 특이값인데, 그러면 2007년에는 어떤 일이 있었던 걸까? >> 서브프라임 모기지가 일어났던 해이기 때문으로 추측하고 있습니다.


- 치킨집의 비즈니스 특성상, 필수재가 아니기 때문에 단위당 경제가 악화 됨에 따라 매출이 줄어드는 정도가 매우 큰 편입니다. 쉽게 말해, 형편이 어려워지면 사람들이 밥은 줄이지 않아도 치킨은 줄인다는 말입니다.




[과정]


--환경 : oracle 11g database, sqlgate for oracle


--데이터 csv 파일 

폐업건수.csv



--폐업건수 테이블 생성

 create table endup

   (year  number(20),

   barber  number(30),

   western  number(30),

   japan   number(30),

   chiken   number(30),

   beverage  number(30),

   korean   number(30),

   beer   number(30) );

   


--년도별 치킨집 폐업건수 중 가장 폐업건수가 많은 년도

select item, year, cnt, rank() over(order by cnt desc nulls last) as rank

   from

   (

     select *

      from endup

      unpivot( cnt for item in (BARBER, WESTERN, JAPAN, CHIKEN, BEVERAGE, KOREAN, BEER) )

   )

   where item in 'CHIKEN';

반응형
Posted by JoeSung
,





## rvest를 통한 웹 스크래핑


install.packages("xml2")

library("xml2")

library("rvest")


url_tvcast = "http://tvcast.naver.com/jtbc.youth"

html_tvcast = read_html(url_tvcast, encoding = "UTF-8")


html_tvcast %>% html_nodes(".title a")

html_tvcast %>% html_nodes(".title a") %>% html_text()

tvcast_df = html_tvcast %>% html_nodes(".title a") %>% html_text() %>%

data.frame()


반응형
Posted by JoeSung
,

선행 블로깅

http://gigle.tistory.com/67



[결과물]



[코드]


[전국 댐 위치 시각화 with R]

:: 사용 코드

library(ggmap)

## ggmap이 버전이슈가 최근에 있어서 오류가 날지도 모른다.

## 그런 경우 install.packages("ggmap", type = "source") 를 통해 다시 설치하면 해결.

library(ggplot2)

a <- read.csv(file = "20170624.csv", sep = "," , header = TRUE)

## 파일을 불러오기

sub_a <- subset(a, TJL > 0, select = c("LON","LAT","TJL"))

## 위도와 경도만 가져와서 subset을 만듭니다.

str(sub_a)

cent <- c(lon = 127.8, lat = 35.8)


sub_a$test1 <- sub_a$TJL/1.7

sub_a

## 한국(남한)기준 위도 경도의 중심입니다.

map <- ggmap(get_googlemap(center = cent, zoom = 7, maptype='roadmap', color = 'bw'), extent = 'device')

## map 변수에 구글 지도(남한) 부분을 저장합니다.

map + geom_point(data = sub_a, aes(x=LON, y=LAT), colour = 'royalblue', alpha = 0.75, size = sub_a$TJL/1.3)

## size 변수를 통해 원의 크기를 조절 / alpha를 통해서 투명도를 조절 / data를 통해 사용할 데이터 가져오기


반응형
Posted by JoeSung
,



[결과물]




[코드]

> install.packages("shiny") ## 패키지 설치

library(shiny)

runExample()

Valid examples are "01_hello", "02_text", "03_reactivity", "04_mpg", "05_sliders", "06_tabsets", "07_widgets", "08_html", "09_upload", "10_download", "11_timer"

runExample("01_hello") ## 위의 가능한 




[레퍼런스]

http://1004jonghee.tistory.com/entry/%EC%83%A4%EC%9D%B4%EB%8B%88Shiny-%ED%8C%A8%ED%82%A4%EC%A7%80

반응형
Posted by JoeSung
,




[코드]


Sys.setlocale("LC_ALL","ko_KR.UTF-8")



-맥의 경우 UTF-8로 설정을 해도 한글이 종종 깨집니다.

-이유는 mac이 locale 설정이 기본적으로 안되어 있는 경우가 종종 있어서 그렇습니다.

-이런 경우 위의 코드로 locale설정을 바꾸어주면 R studio에서 깨지는 일이 사라집니다.

반응형
Posted by JoeSung
,


-Data 시각화 공부와 정리




[결과물]


[사용 데이터 예시]





[사용 코드]


library(ggmap)

## ggmap이 버전이슈가 최근에 있어서 오류가 날지도 모른다.

## 그런 경우 install.packages("ggmap", type = "source") 를 통해 다시 설치하면 해결.

library(ggplot2)


a <- read.csv(file = "rarara.csv", sep = "," , header = TRUE)

## 파일을 불러오기


sub_a <- subset(a, rain > 50, select = c("longti","latti","rain"))

## 위도와 경도만 가져와서 subset을 만듭니다.

str(sub_a)


cent <- c(lon = 127.8, lat = 35.8)

## 한국(남한)기준 위도 경도의 중심입니다.


map <- ggmap(get_googlemap(center = cent, zoom = 7, maptype='roadmap', color = 'bw'), extent = 'device')

## map 변수에 구글 지도(남한) 부분을 저장합니다.

map + geom_point(data=sub_a, aes(x=longti, y=latti),colour ='gray10', alpha = 1) ## 점을 찍어주는 라인




[레퍼런스]

전국댐위치.xlsx



::비주얼라이즈님의 블로그

http://visualize.tistory.com/111


::Lovetoken님의 블로그

https://lovetoken.github.io/r/data_visualization/2016/10/18/ggmap.html

반응형
Posted by JoeSung
,