(SQL) 칼럼 연결하기, 공백 제거하기
(CONCAT, TRIM)

(SQL) 칼럼 연결하기 , 공백제거하기.

(SQL) 칼럼 연결하기 (CONCAT ), 공백 제거하기 ( TRIM, RTRIM, LTRIM )



  • 회사명과 회사 위치를 함께 출력하고 싶지만, 두 정보가 서로 다른 테이블 열에 저장되어 있다.

  • 시,도, 우편번호는 서로 다른 열에 저장되어 있지만, 배송지 주소를 인쇄하는 응용 프로그램에서는 하나의 필드로 가져와야 한다.

위 두 상황을 해결하기 위해서는 칼럼을 서로 연결해줘야 한다.
칼럼을 연결할 때 사용하는 함수인 Concat, || 에 대해 알아보자.

추가로, 칼럼의 공백을 제거해주는 함수인 TRIM에 대해서도 살펴보자.


✋🏾 <손에 잡히는 10분 SQL _ 인사이트> 교재를 참고해 작성한 포스팅입니다.

✋🏾 샘플데이터 다운로드 링크


1. 칼럼 연결하기 : CONCAT, ||



칼럼을 연결하는 문법은 사용하는 DBMS에 따라 다르다.

MYSQL과 MariaDB의 경우, CONCAT 함수를 이용하여 칼럼을 연결해준다.

SELECT CONCAT(vend_name,'(' , vend_country,')') AS vend_total
FROM Vendors



CONTCAT함수는 괄호안에, 연결하고자 하는 칼럼, 문자를 넣어주면 된다.

위 코드의 경우 , vend_name 칼럼과 vend_country 칼럼을 연결해준다.
추가로, 소괄호를 함수안에 삽입해 vend_country를 괄호로 감싼 것을 알 수 있다.


위 표와 같이 vend_name, vend_country과 연결되어 출력된다.

PostgreSql은 칼럼을 연결하기 위해 || 문법을 사용한다.

SELECT vend_name || '(' || vend_country || ')' AS vend_total
FROM Vendors



연결하고자 하는 대상 사이에 || 를 넣어주면 된다.
( CONCAT 함수보다 더 간단하고 직관적인 느낌이다)


2. 공백제거하기 : TRIM, RTRIM, LTRIM



칼럼을 서로 연결하다 보면 공백문자가 사이에 채워져 있는 경우가 많다.

연결하자하는 레코드 자체에 공백이 포함되어 있어 나타나는 현상이다.

대부분의 DBMS는 열 길이에 맞춰 텍스트를 저장하기 때문에
공백도 하나의 문자로 취급한다.

그러나 문제는 공백은 눈에 잘 띄지 않는다는 점이다.

따라서,공백을 고려하지 않고 데이터를 처리한다면
향후에 데이터 검색이나 계산시 문제가 발생할 수 있다.

다행히도 많은 DBMS가 공백제거 함수를 제공한다.


TRIM ( ) , RTRIM( ) , LTRIM ( ) 함수를 이용하면 레코드의
공백을 제거 할 수 있다.

함수명에서 눈치챈 사람도 있겠지만, 세 함수의 차이는 아래와 같다.

  • TRIM ( ) : 양쪽에 있는 공백 제거

  • LTRIM ( ) : 왼쪽에 있는 공백 제거

  • RTRIM( ) : 오른쪽에 있는 공백 제거

다음 코드는 공백을 제거하여 칼럼을 연결하는 코드이다.

SELECT CONCAT(RTRIM(vend_name),'(',RTRIM(vend_country),')')
FROM Vendors
ORDER BY vend_name; -- MYSQL
     
     
SELECT RTRIM(vend_name) || '(' || RTRIM(vend_country) || ')'
  FROM Vendors
  ORDER BY vend_name; -- Postgresql 

(SQL) 와일드 카드 문자를 이용한 필터링

(SQL) 와일드 카드 문자를 이용한 필터링

(SQL) 와일드 카드 문자를 이용한 필터링

와일드카드 문자는 검색 패턴을 만들어
데이터를 필터링할 때 사용한다.

와일드카드 문자를 사용할 수 있다면,
데이터 필터링의 폭이 훨씬 넓어질 것이다.

문자열 데이터 필터링의 핵심인
와일드카드 문자에 대해 알아보자.

✋🏾 <손에 잡히는 10분 SQL _ 인사이트> 교재를 참고해 작성한 포스팅입니다.

✋🏾 샘플데이터 다운 링크 : https://forta.com/books/0135182794/



1. 와일드카드 문자란?


와일드카드 문자란

여러 데이터에서 부분적으로 일치하는 값이 있는지
확인할 때 사용되는 특수문자를 말한다.

앞서 언급했듯이,
와일드카드 문자는 검색패턴을 만들어
데이터를 필터링할 때 사용한다.


2. 와일드카드 문자의 특징.


와일드카드 문자는 다음과 같은 특징이 있다.

  • 검색절 (WHERE)절에서 와일드카드 문자를 이용하려면
    반드시 LIKE 연산자를 함께 사용해야 한다.

  • 와일드카드 문자를 이용한 검색은

    텍스트 열(문자열)에서만 사용할 수 있다.

3. 와일드카드 문자의 종류와 사용예시.

1) % 와일드카드


검색할 문자열에서 %는 임의의 수의 문자를 의미한다.

예를 들어, Fish라는 단어로 시작하는 제품을 찾고 싶다면,
다음과 같이 쿼리를 작성하면 된다.

SELECT prod_id, prod_name
FROM Products
WHERE prod_name LIKE 'Fish%';


제품명이 Fish로 끝나는 제품을 찾고 싶다면,
Fish앞에 %를 써주면 된다.

SELECT prod_id, prod_name
FROM Products
WHERE prod_name LIKE '%Fish';
-- 와일드카드는 검색 패턴 내 어디에서나 사용할 수 있고, 여러 개의 와일드카드를 같이 사용할 수도 있다.


와일드카드를 검색 패턴의 중간에 사용하는 경우가
많이는 없지만, 이메일 주소를 검색하는 경우 유용하다.

SELECT cust_email
FROM Customers
WHERE cust_email LIKE 'b%forta.com';


예시코드에서 알수 있듯이,
% 와일드카드는 검색패턴을 만들때, 글자 수 제한이 없어
범용성이 높고, 많이 이용되는 문자다.

또한, %와일드카드를 이용하면
필터링할 때 데이터의 앞 뒤 공백으로 인해 생기는
검색 오류를 방지할 수도 있다.

SELECT  prod_id,prod_name
FROM Products
WHERE prod_name LIKE '%bean bag%'; 
  -- bean bag 앞이나 뒤에 어떤 문자열(공백)이 와도 관계없다. 


2) 언더라인(_) 와일드카드


언더라인 와일드카드는 %와 비슷하게 사용되지만,
%와일드카드가 여러 문자열을 대신할 수 있는 것과는 달리
언더라인 와일드카드는 단 한 개의 문자를 대신한다.
(언더라인 와일드카드를 연달아쓰면 , 그 개수만큼 문자수를 매칭한다)


언더라인 와일드카드는
검색조건으로 글자수를 정해놓고 필터링 할 때 유용하다.

SELECT prod_id, prod_name
FROM Products
WHERE prod_name LIKE '__ inch teddy bear';
  --두자리수 인치인 테디베어만 검색




4. 와일드카드 문자 사용시 주의해야 할 점!


1) NULL은 와일드카드로 매칭이 안됨!

2) 와일드카드를 이용한 검색 패턴은 다른 필터링 조건보다 처리가 오래 걸린다.
–> 와일드카드를 남용하지 말자


3) 와일드카드를 잘못된 곳에 사용한다면, 의도와 다른 데이터가 검색된다.

–> 와일드카드를 조심해서 사용하자

인하대학교 빅데이터 동아리 '인빅' 설립과 느낀 점

(회고록) 인하대학교 빅데이터 동아리 ‘인빅’

(회고록) 인하대학교 빅데이터 동아리 ‘인빅’
설립과 운영, 그리고 나의 성장



내가 대학생활 동안 가장 열정을 쏟고 도전적으로 몰입했던 일은
인하대학교 최초의 빅데이터 동아리 인빅을 설립하고 운영하여 중견동아리로 성장시킨 것이다.

나는 데이터 분석에 관심이 많았지만 비전공자로서 독학에 어려움을 느꼈었다.
그리고 교내 커뮤니티를 통해 나와 유사한 고민을 안고 있는 사람이 많다는 것을 알게 되었다.

이는 정기적으로 데이터 분석 공부를 하고 정보를
공유할 수 있는 ‘빅데이터 커뮤니티’를 만들자는 생각으로 이어졌다.

그렇게 해서 만든 동아리가 인하대학교 빅데이터 동아리 ‘인빅’이다.

이 회고록을 통해 ‘인빅’ 을 설립하며 느꼈던 보람과 기쁨을
상기시킴과 동시에 어려웠던 점과 배웠던 점을 되새기고자 한다.

이 회고록은 세 파트로 구성되어 있다.

  • 인빅에 대한 소개
  • 인빅 설립 과정
  • 느낀점

1. 인빅에 대한 소개


인하대학교 빅데이터 동아리 인빅은 2021년 2학기 기준 5기까지 운영되었으며,
총 120여 명의 회원이 활동한 교내 최초의 빅데이터 동아리이다.

인빅의 활동은 팀스터디로 진행되며 기초스터디, 시각화단계, 머신러닝단계로
커리큘럼을 나누어 진행한다.

각 단계에 따라 필요한 스터디를 진행하고, 정기세미나에서 실습 내용을 발표를 한다.
이후 학기 말에 진행되는 종강세미나에서 최종 프로젝트를 발표하면 한 기수가 끝이 나게 된다.



기초스터디는 데이터 전처리 능력을 기르기 위해 만들어진 단계이며,
파이썬 기초와 판다스,넘파이를 배우게 된다. 많은 비전공자 회원들이 처음 거치게 되는 단계이다.



시각화스터디는 데이터 시각화 능력을 기르기 위해 만들어진 커리큘럼이며,
태블로를 이용하여 프로젝트를 수행하게 된다.

2주마다 데이터 예제 실습을 진행하고 세미나에서 발표하였다.

특히 왜 이 차트를 사용했는지 공유하고 실습은 어떻게 하였는지를
태블로 창을 띄어서 소개하는 방식으로 진행하였다.

데이터를 활용하기 위한 인사이트를 얻는 것이 최종 목표인 단계다.



머신러닝 단계는 사이킷런, 텐서플로를 이용하여
머신러닝 , 딥러닝을 학습하는 것을 목표로 만들어진 단계이다.

공학적인 내용 , 즉 이론적인 내용까지 건드리는 것이 목표였다.



이와 같은 커리큘럼으로 인빅은 운영되었다.

이를 바탕으로 인빅구성원들로 이루어진 팀이
‘더 존 빅데이터 경진대회’에서 우수상을 수상하고,

수료한 회원들이 라인, 모두의 연구소, 퍼블릭에이아이 ML 개발자로 취직하는 등
인빅은 외부활동에서도 우수한 성과를 보이고있다.







2. 인빅 설립과정


나는 빅데이터 스터디를 같이 진행하던 네명과 함께 인빅 설립 준비에 들어갔다.
주 3회 이상 회의를 진행하고 지속적으로 연락을 취하는 등 많은 시간과 노력을 쏟았다.

이 설립 준비기간동안 크게 두가지 사항을 중점적으로 고려했다.

  • 체계적인 시스템을 갖추자.

  • 동기부여가 될 수 있는 커리큘럼을 만들자.

이를 위해 타 유명 빅데이터 동아리에 컨택을 해 시스템에 대한 조언을 얻는 한편
빅데이터 전공 교수님과 현직자 선배들에게 자문을 구해 필요한 커리큘럼에 대한 정보를 얻을 수 있었다.

정리하면 다음과 같다.

  • 시스템 아이디어
    • 팀 프로젝트가 효과적
    • 고정된 커리큘럼이 있어야 한다.
    • 정기 컨퍼런스 시간이 있어야 한다.

  • 커리큘럼 아이디어
    • 머신러닝 모델링 뿐만 아니라 데이터 시각화 공부도 필요
    • 문제 제기 능력을 기를 수 있는 커리큘럼
    • 기초 코딩 지식이 없는 회원들을 위한 기초 스터디 단계 필요

이 과정에서 데이터 직군에 근무하시는 현직자 선배들을
수소문하여 컨택하고 도움을 요청했던 것이 특히 기억에 남는다.

무턱대고 메일 주소를 알아내어 도움을 요청했는데,
다행히 적극적인 자세를 좋게 봐주셔서 직접 만나뵙고 정보를 얻을 수 있었다.

현업에서는 데이터 툴 활용능력도 중요하지만,
어떤 문제를 해결할지 고민하는 능력, 즉 문제 제기 능력이 중요하다는 점을 알 수 있었다.

문제 제기 능력은 동아리 커리큘럼의 방향성이 됐을뿐만 아니라,
나의 데이터 분석 공부 방향성이 되었다.

이렇게 얻은 정보들을 바탕으로 팀 스터디 기반의 3단계 커리큘럼을 만들 수 있었다.



동아리 시스템 구축을 위한 준비를 이와 같이 거쳤지만,
사실 내가 더 신경쓴건 동아리 설립을 같이 한 운영진들과의 소통이었다.

내가 의도한바와 그들이 받아들이는 바가 같은지, 혹은 내가 운영진이 주장하는 것을
제대로 이해하고 있는지를 확인하는 과정에 많은 노력을 기울였다.

이를 위해 많은 회의를 진행했고, 지속적으로 메신저를 통해 연락을 취했다.

많은 회의를 진행하다보니 운영진들이 피로한게 느껴졌고,
스트레스도 많다는 것을 알 수 있었다.

앞으로 동아리를 같이 운영해나가야할 운영진이기 때문에,
그들의 불만사항을 체크하는데도 많은 신경을 썼다.

너무 많은 회의에 지치지 않도록 주3회였던 오프라인 회의를
주 1회 오프라인 주1회 화상으로 대체하고, 회의를 컴팩트하게 진행했다.

또 그들에게 칭찬과 격려를 지속적으로 하고, 우리가 빅데이터 커뮤니티를 만들면
서로 도움을 많이 받을 수 있다는 동기부여를 지속적으로 하였다.

이렇게 약 3개월의 준비기간을 거쳐 인빅을 시작할 수 있었다.


3. 느낀 점


교내 최초의 빅데이터 동아리 인빅의 설립은 나에게 큰 도전이자 성장할 수 있는 계기였다.

  • 빅데이터 전문가가 아닌 내가 동아리를 만들 수 있을까?
  • 내가 한 조직을 처음부터 만들 수 있을까?

이 두가지 질문이 동아리 설립준비를 망설이게 하였지만,
향후 취업에서 메리트, 빅데이터 전문가로서의 성장, 리더쉽까지
기를 수 있는 좋은 기회이기 때문에 불안감과 걱정을
핑계로 포기하면 후회가 많이 남을 것 같았다.

그리고 결과적으로 동아리 설립을 통해 내가 원하는 바를 다 이룰 수 있었다.

데이터 분석 역량을 기를 수 있었고, 빅데이터에 관심있는 많은 친구들을 알게 되었다.
또 내가 조직을 이끌 수 있는 리더십이 있구나 라는 자신감 또한 얻을 수 있었다.

무엇보다도 후에 대학생활을 돌아볼 때, 인빅을 만들었기 때문에
자신있게 열심히 살았다 라고 말할 수 있을 것 같다.

(python) 특정 조건으로 모든 행 업데이트하기
- apply 이용

판다스에서는 for문보다 apply를 애용합시다.

(python) 특정 조건으로 모든 행 업데이트하기 - apply 이용

1. 문제 발생



4개의 테이블로 구성된 데이터베이스가 있다.
각 테이블은 지역코드를 레코드로 가지고 있다.

그런데 2개의 테이블은
지역코드를 8자리의 형태로 가지고 있는 반면,

나머지 2개의 테이블은
지역코드를 10자리의 형태로 가지고 있다.

데이터를 살펴보니,
10자리 형태의 지역코드는
8자리 지역코드에 “00”를 붙인 형태였다.

고민끝에
데이터 작업 편의를 위해
지역코드를 모두 10자리로 통일해주기로 했다.

전처리는 8자리 코드를 문자형으로 바꾼후
“00”을 첨부해주는 방식으로 진행하려 했다.

이를 위해 for문을 사용하였다.

for i in range(adstrd_master["adstrd_code"].count()):
	adstrd_master["adstrd_code"][i]=str(adstrd_master["adstrd_code"][i])+"00"
 

다행히 전처리가 필요한 첫번째 테이블은
다음과 같이 레코드 업데이트가 잘 되었다.

그리고 두번째 테이블을 전처리하기로 했다.
여기서 문제가 발생했다.

파일크기가 250kb로 크지 않았던
첫번째 테이블과 달리,
두번째 테이블은 용량이 무려 2GB에 달하고 ,
레코드수는 5000만개가 넘어가는
거대한 테이블이었다.

for문을 이용하여 전처리를 진행하는데,
몇 시간이 지나도 계속 “처리중”상태로 뜨는 것이었다.

아무리 용량이 크다고 해도,
수 시간동안 레코드를 업데이트 하는 것은
이상하다는 생각이 들었다.

결국 for문을 이용한 방법이 문제가 있는 것 같아
다른 방식을 찾아보기로 했다.


2. 해결 방법



pandas의 apply 메소드를 이용하면
간단히 해결 가능하다.

pandas 데이터프레임은
구조상 for문을 이용하여
데이터를 업데이트하면
시간이 상당히 오래 걸린다고 한다.

이럴경우 apply메소드를 통해
데이터를 빠르게 업데이트 할 수 있다.

fpopl['adstrd_code']=fpopl['adstrd_code'].apply(lambda x: str(x)+"00")


apply와 lambda를 활용하여 코드를 작성하면 된다.
apply는 lambda에 적용된 함수를 객체에 적용시켜주는 메소드이다.

놀랍게도,
전처리 작업이 30초 안에 끝났다.

(for문으로는 3시간 넘어도 안되던 작업이…. 😅)


3. 배운 점 및 피드백

  • pandas 데이터프레임에서 for문 사용을 자제하자.

  • apply 메소드를 이용하면 레코드를 빠르게 업데이트 할 수 있다.

  • apply 메소드와 map 메소드의 차이를 알아보자.

새빨간 거짓말 통계 - 대럴 허프

새빨간 거짓말 통계

새빨간 거짓말 통계 - 대럴 허프


통계자료를 볼때 고려해야 할 점 (5가지)



1. 출처를 캐봐야 한다.


1) 조사자가 본인 측에 유리하도록 통계결과에 고의적인 왜곡을 하지않았는지

  • 직접 대놓고 거짓을 말함
  • 일부러 애매하게 표현
  • 유리한 데이터만 골라쓰고 불리한 데이터는 묵살

2) 무의식적으로 사용된 왜곡은 없는지?

  • 권위자가 인용되어있을 경우,
    그 권위자가 이야기와 관련되어 있을 뿐만 아니라 그 사실을 지지하고 있는지도 확인

2. 조사 방법이 올바른지 알아봐야 한다.

1) 올바른 표본을 사용하였는지

  • 표본의 수가 충분?
  • 표본의 추출 방법이 적당?

2) 같은 조건에서 실험(조사)을 진행했는지

3. 숨겨진 자료를 찾아 보아야 한다.

  • 신뢰도에 관한 자료 (유의수준, p-value, 표준편차)
  • 평균값의 종류 (산술평균?중앙값?)
  • 백분율만 있을 경우 실제 숫자
  • 비교할 수 있는 다른 자료 (비슷한 시기의 다른 조사, 그 시대의 주요 배경,사건)
  • 지수를 계산할때의 기준

4. 쟁점 바꿔치기에 주의해야 한다.

1) 상관관계를 인과관계처럼 해석해놓은 경우
2) 전후관계를 바꿔놓음
3) 피조사자들의 심리상태,태도가 반영된 조사결과

  • 중국의 두번의 인구조사
  • 1950년도, 미국의 인구조사 (사회보장제도 연금을 위한 조사)


5. 상식적으로 말이 되는 이야기인가 살펴보자.

  • 증명되지도 않는 가정을 토대로 장황하게 이야기가 전개될 때
    ‘상식적으로 말이 되는 이야기인가?’라는 질문 던져보자

  • 여러 통계들이 액면 그대로 받아들였다가는 큰일나는 거짓된 것들.

  • 너무나도 정확한 숫자 (소숫점까지 표현된 결과)
    • 자동차 연평균 과세액 : 51.13 달러
    • 직업 여성이 가족과 함께 만족한 생활을 하기 위해 필요한 주급 : 40.13 달러

Pagination


© 2024. All rights reserved.