출처: https://astrocosmos.tistory.com/202 [ASTROCOSMOS:티스토리] 하나둘셋넷 :: 하나둘셋넷
728x90

문자열 관련 함수

REPEAT()

- 문자열을 지정한 횟수 만큼 반복한 문자열 반환

SELECT REPEAT('만세!', 3);  >> 만세!만세!만세!

SELECT emp_id, emp_name, dept_id, gender, salary
    FROM employee
    WHERE retire_data IS NULL;

 

 

SELECT emp_id, emp_name, dept_id, gender, REPEAT('▒', salary/250) AS salary
    FROM employee
    WHERE retire_data IS NULL;

 

REPLACE()
- 문자열의 특정 문자열을 다른
 문자열로 바꾼 문자열 반환
SELECT REPLACE('우리나라 대한민국', '  ', ' '); >> 우리나라대한민국

: 공백을 이용하면 특정 글자 삭제 가능
   
REVERSE()
- 문자열을 앞뒤로 뒤집은 문자열
  반환
SELECT REVERSE('쓰레기통'); >> 통기레쓰
   
SPACE()
- 지정한 길이 만큼을
 공백으로 채운 문자열 반환
SELECT CONCAT('', SPACE(10), ''); >> 너         나
728x90
728x90

문자열 관련 함수 

LPAD()
- 지정한 길이의 문자열이 되도록 지정한 문자를 채워 반환
SELECT LPAD('대한민국', 10, '*'); >> ******대한민국
   
LTRIM()
- 왼쪽에 있는 공백을 없앤 문자열 반환
SELECT CONCAT('[', LTRIM('   대한민국   '), ']'); >> [대한민국     ]
   
RTRIM()
- LTRIM()과 반대 기늠
 
   
TRIM()
- 양쪽에 있는 공백을 없앤 문자열 반환
SELECT CONCAT('[', TRIM('    대한민국    '), ']');  >> [대한민국]

 

728x90
728x90

문자열 관련 함수

RIGHT()

- 오른족부터 지정한 길이 만큼의 문자열 반환

SELECT RIGHT('가나다라마바사', 5 )>> 라마바사아

 

응용

SELECT emp_name, emp_id, dept_id, gender,
            CONCAT('xxx-xxxx-', RIGHT(phone, 4) ) AS phone
    FROM employee
    WHERE retire_date IS NULL;

 

INSTR()
- 문자열에서 지정한 문자열이 나타나는
 위치 반환, 없으면 0 반환
SELECT INSTR('우리나라 좋은 나라 대한민국', '나라'); >> 3 반환

SELECT INSTR('우리나라 좋은 나라 대한민국', '좋은'); >>  6

SELECT INSTR('우리나라 좋은 나라 대한민국', '나라',5); >> 9

 why? 뒤에 5는 5번째 위치부터 찾으라는 의미


   
LOCATE()
- 문자열에서 지정한 문자열이 나타나는 
 위치 반환, 없으면 0 반환
SELECT LOCATE('나라', '우리나라 대한민국'); >> 3 반환
   
LEFT()
- 왼쪽부터 지정한 길이 만큼의
 문자열 반환
SELECT LEFT('가나다라마바사아', '5') >> 가나다라마 반환
   
SUBSTR()
- 지정한 위치에서 지정한 길이 만큼의
 문자열 반환

같은 기능의 3가지 함수

SELECT
SUBSTR('아름다운 대한민국', 6, 2); -- 대한
SELECT SUBSTRING('아름다운 대한민국', 6, 2); -- 대한
SELECT MID('아름다운 대한민국', 6, 2); -- 대한
   
UPPER()
- 모든 문자를 대문자로 바꾼다

LOWER()는 반대 기능
SELECT UPPER('I have a Dream') >> I HAVE A DREAM;

 

728x90
728x90

문자열 관련 함수

 

LENGTH - 문자열 바이트 수 반환

SELECT vacation_id, emp_id, begin_date, reason,
                   LENGH(reason) As reason_len

    FROM vacation;

 

CHAR_LENGTH - 글자수 반환

SELECT vacaction_id, emp_id, begin_date, reason
    FROM vacation;

 

CONCAT - 연결해주기

SELECT CONCAT('ABC', 'DEF, 'HIF', 'KLMN');

 

응용

SELECT vacation_id, emp_id, begin_date, CONCAT(reason, '(', duration, '일간)')
            AS reason
    FROM vacation;

 

구분자를 넣어서 붙이기

SELECT CONCAT_WS( ',' , 'ABC', 'DEF' ,'HIJ',  'KLMN' );

 

응용

SELECT vacation_id, emp_id, CONCAT_WS( ', ' , begin_data, end_date. reason,
                duration) As info
    FROM vacation;

 

 

ELT() - 나열된 값 중에서 지정한 위치의 값 변환

SELECT emp_name, emp_id, gender, dept_id, hire_date, salary,
             ELT(NTILE(3) OVER(ORDER BY salary DESC), '상', '중', '하') AS grp
        FROM employee
        WHERE retire_date IS NULL AND salary IS NOT NULL;

 

FIELD

- 나열된 값 중에서 지정한 값이 있는 위치 반환, 없으면 0 반환

SELECT emp_name, emp_id, dept_id, hire_date, salary
            FROM employee
            WHERE dept_id IN ('MKT', 'SYS', 'HRD')
            ORDER BY FIELD(dept_id, 'MKT', 'HRD', 'SYS');

: 'MKT'는 1, 'HRD'는 2, 'SYS'는 3으로 간주

 

 

728x90
728x90

클래스 개념

class, self, __init__() 클래스는 사용자 정의 데이터 타입
   
클래스선언(코드작성) class Marine:
    health, ap = 40, 5
    def attack(self, target) :
        target.health -= self.ap
   
객체 생성 m1, m2 = Marine(), Marine()
m1.health, m1.ap, m2.health, m2.ap
   
생성자 메서드 스페셜 메서드 중 하나(특별한 기능을 하는 앞뒤로 __가 있는 메서드)

__init__() : 객체를 생성할 때 실행되는 메서드
   
클래스 선언(코드 작성) class Marine:
    def __init__(self, health, ap =5):
        self.health, self.ap = health, ap

    def attack(self, target):
        target, health -= self.ap
   
728x90
728x90

데이터 전처리 그룹] 

그룹 - groupby

groupby( by = ['컬럼1', '컬럼2'], as_index = False )[['컬럼 3']].sum()

groupby( by = ['컬럼1'],as_index = False)[['컬럼2', '컬럼3']].sum()

 

728x90
728x90

집계구별 일별소비지역별 카드소비패턴 분석

집계구별 일별소비지역별 카드소비패턴.csv
0.03MB
원본

 

강남에서 카드이용건수계 비율, 카드이용금액계 비율

강남 소비 분석

 

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rc('font',family='Malgun Gothic')
plt.rcParams['font.family']
gu = pd.read_csv('집계구별 일별소비지역별 카드소비패턴.csv',encoding='CP949')
gu_seoul = gu.loc[gu['가맹점주소광역시도(SIDO)']=='서울' , ['가맹점주소시군구(SGG)','업종대분류(UPJONG_CLASS1)','카드이용건수계(USECT_CORR)','카드이용금액계(AMT_CORR)']]
# display(gu_seoul[gu_seoul['가맹점주소시군구(SGG)']=='강남구'])
gu_gangnam = gu_seoul[gu_seoul['가맹점주소시군구(SGG)']=='강남구']
gu_gangnam_use = gu_gangnam.groupby(by='업종대분류(UPJONG_CLASS1)', as_index=False)[['카드이용건수계(USECT_CORR)']].sum()
# display(gu_gangnam_use)
# display(gu_gangnam_use.info())
gu_gangnam_money = gu_gangnam.groupby(by='업종대분류(UPJONG_CLASS1)', as_index=False)[['카드이용금액계(AMT_CORR)']].sum()
# display(gu_gangnam_money)
# plt.pie(데이터프레임['컬럼명'].values, labels = 데이터프레임['컬럼명'].index(), autopct='%.2f%%')
plt.figure(figsize = (10,10))
plt.subplot(1,2,1)
plt.pie(gu_gangnam_use['카드이용건수계(USECT_CORR)'].values, labels=gu_gangnam_use['업종대분류(UPJONG_CLASS1)'] )
plt.legend(loc='upper left')
plt.title('강남에서 카드이용건수계 비율')
plt.subplot(1,2,2)
plt.pie(gu_gangnam_money['카드이용금액계(AMT_CORR)'].values, labels= gu_gangnam_money['업종대분류(UPJONG_CLASS1)'])
plt.legend(loc='upper left')
plt.title('강남에서 카드이용금액계 비율')
plt.tight_layout()

 

년도별 카드이용금액계의 변화

년도별 소비금액 변동

 

import numpy as np
import pandas as pd
pd.set_option('display.float_format', lambda x:'%.3f'%x) # 지수 표현 없애기
import matplotlib.pyplot as plt
plt.rc('font',family = 'Malgun Gothic')
plt.rcParams['font.family']
import seaborn as sns
import scipy.stats as spst
sobi = pd.read_csv( '집계구별 일별소비지역별 카드소비패턴.csv', encoding ='CP949')
sobi_year = sobi.loc[:,['기준일자(YMD)','카드이용금액계(AMT_CORR)']]
sobi_year['기준일자(YMD)'] = sobi_year['기준일자(YMD)'].astype('str')
sobi_year['기준일자(YMD)'] = sobi_year['기준일자(YMD)'].str[:4]
A= sobi_year.loc[sobi_year['기준일자(YMD)']=='2016','카드이용금액계(AMT_CORR)']
B= sobi_year.loc[sobi_year['기준일자(YMD)']=='2017','카드이용금액계(AMT_CORR)']
C= sobi_year.loc[sobi_year['기준일자(YMD)']=='2018','카드이용금액계(AMT_CORR)']
D= sobi_year.loc[sobi_year['기준일자(YMD)']=='2019','카드이용금액계(AMT_CORR)']
E= sobi_year.loc[sobi_year['기준일자(YMD)']=='2020','카드이용금액계(AMT_CORR)']
display(spst.ttest_ind(D,E))
# print('\n','='*100,'\n21년도의 마지막 값은 7월에서 끝나므로 21년도는 뺀다',sep='')
# < 특정 행 삭제 >
sobi_year.drop( sobi_year[ sobi_year['기준일자(YMD)'].str.contains('2021')].index, inplace = True  )
feature = '기준일자(YMD)'
target = '카드이용금액계(AMT_CORR)'
# sns.barplot(x='컬럼명', y='컬럼명', data=데이터프레임)
sobi_year[feature] = sobi_year[feature].astype('int')
sns.barplot(x=feature, y= target, data=sobi_year )

 

도별 카드이용금액의 관계

도별 카드이용금액 비교

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rc('font',family='Malgun Gothic')
plt.rcParams['font.family']
import scipy.stats as spst
import seaborn as sns
spend = pd.read_csv('집계구별 일별소비지역별 카드소비패턴.csv', encoding = 'CP949')
spend_area = spend.loc[:,['가맹점주소광역시도(SIDO)','카드이용금액계(AMT_CORR)']]
print('\n','='*100,'\n큰 단위로 나누기',sep='')
spend_area['가맹점주소광역시도(SIDO)'] = spend_area['가맹점주소광역시도(SIDO)'].replace({
                                        '서울':'수도권',
                                        '경기':'수도권',
                                        '인천':'수도권',
                                                                      
                                        '대전':'충청도',                              
                                        '충남':'충청도',
                                        '충북':'충청도',
                                        '세종':'충청도',
                                                                      
                                        '광주':'전라도',
                                        '전남':'전라도',
                                        '전북':'전라도',
                                                                      
                                        '부산':'경상도',
                                        '경북':'경상도',
                                        '경남':'경상도',
                                        '대구':'경상도'
                                      
                                      })
feature = '가맹점주소광역시도(SIDO)'
target = '카드이용금액계(AMT_CORR)'
plt.title('도별와 카드이용금액의 관계 < 범주 & 숫자 >')
sns.barplot(x=feature, y=target, data=spend_area)
728x90
728x90

내용

  • 산포도
  • pairplot을 통한 시각화
  • jointplot
  • regplot 이용

 

1. 산포도

sns.scatterplot(x='컬럼명1', y='컬럼명2', data=데이터프레임)

 

 

2. pairplot을 통한 시각화

* 숫자형 변수들에 대한 산점도를 한꺼번에 그린다.

sns.pairplot(데이터프레임, kind = 'reg')

plt.show()

3. jointplot

sns.jointplot(x='컬럼명1', y='컬럼명2', data = 데이터프레임)

plt.show()

 

4. regplot 이용

sns.replot(x='컬럼명1', y='컬럼명2', data=데이터프레임)

plt.show()

 

 

728x90
728x90

내용

  • countplot 이용
  • 기초 통계량 산출 value_counts() $ value_counts(normalize = True)

 

1. countplot 이용

sns.countplot(y='컬럼명', data = 데이터프레임명)

plt.grid()

plt.show()

 

가로로 그리려면,

sns.countplot(x='컬럼명', data=데이터프레임)

 

 

2. 기초 통계량 산출 value_counts() $ value_counts(normalize = True)

데이터프레임['컬럼명'].value_counts()

데이터프레임['컬럼명'].value_counts(normalize=True)

 

 

3. pie chart 이용

plt.pie( 데이터프레임['컬럼명'].values, labels = 데이터프레임['컬럼명'].index(), autopct = '%.2f%%' )



plt.pie( 데이터프레임['컬럼명'].vauels, labels = 데이터프레임['컬럼명'].index(), autopct = '%.2f%%', startangle = 90, counterclock=False)



pt.pie( 데이터프레임['컬럼명'].values, labels = 데이터프레임['컬럼명'].index(), autopct = '%.2f%%', startangle = 90, counterclock = False, explode = [0.05, 0.05, 0.05],  shadow = True )
728x90

+ Recent posts