[데이터 전처리4] 날짜 다루기2
- 오늘날짜 추출하기
- 지정 날짜/시간 추출하기
- 날짜/ 시각에서 연, 월, 일 추출하기
- 문자형'으로 되어 있는 날짜/ 시각에서 연, 월, 일 추출하기
■ Pyspark
ο 오늘날짜 추출하기
import findspark
findspark.init()
from pyspark.sql import SparkSession
from pyspark.sql.functions import *
① Session 생성
# Create SparkSession
spark = SparkSession.builder \
.appName('SparkByExamples.com') \
.getOrCreate()
data=[["1"]]
df=spark.createDataFrame(data,["id"])
생성된 df
DataFrame[id: string]
② 날짜 추출하기
(방법1) Pyspark 안에 있는 함수 활용
오늘날짜(dt)와 현재시간(stamp) 컬럼을 넣어줌.
데이터프레임.withColumns('컬럼명', current_date())
데이터프레임.withColumns('컬럼명', current_timestamp())
df.withColumn("dt",current_date()) \
.withColumn("stamp",current_timestamp()) \
.show(truncate=False)
(방법2) SQL Select문 연동
spark.sql("SELECT current_date() AS dt
, current_timestamp() AS stamp")\
.show(truncate=False)
* truncate=False 적용하면 stamp에 잘림없이 볼 수 있다.
ο 지정 날짜/시간 추출하기
# CAST('value' AS 'type')
spark.sql("""SELECT
CAST('2022-07-31' AS date) AS dt,
CAST('2022-07-31 15:22:00' AS timestamp) AS stamp
""")\
.show(truncate=False)
# type 'value'
spark.sql("""SELECT
date '2022-07-31' AS dt,
timestamp '2022-07-31 15:22:00' AS stamp
""")\
.show(truncate=False)
https://sparkbyexamples.com/pyspark/pyspark-sql-date-and-timestamp-functions/
ο 날짜/ 시각에서 연, 월, 일 추출하기
# CAST('value' AS TIMESTAMP) 에서 YEAR, MONTH, DAY, HOUR 함수로 연,월,일,시를 추출
spark.sql("""SELECT
stamp,
YEAR(stamp) AS year,
MONTH(stamp) AS month,
DAY(stamp) AS day,
HOUR(stamp) AS hour
FROM
(SELECT CAST('2022-07-31 15:22:00' AS timestamp) AS stamp) AS t
""")\
.show(truncate=False)
ο 문자형'으로 되어 있는 날짜/ 시각에서 연, 월, 일 추출하기
# CAST('value' AS string)로 문자형으로 뽑아서 substring을 통해 추출.
spark.sql("""SELECT
stamp,
substring(stamp, 1, 4) AS year,
substring(stamp, 6, 2) AS month,
substring(stamp, 9, 2) AS day,
substring(stamp, 12, 2) AS hour,
substring(stamp, 1, 7) AS year_month
FROM
(SELECT CAST('2022-07-31 15:22:00' AS string) AS stamp) AS t
""")\
.show(truncate=False)
# CAST( AS string)으로 문자형으로 뽑은 날짜를 SUBSTR(str,pos,len)를 사용해서 연월일시로 추출
spark.sql("""SELECT
stamp,
substr(stamp, 1, 4) AS year,
substr(stamp, 6, 2) AS month,
substr(stamp, 9, 2) AS day,
substr(stamp, 12, 2) AS hour,
substr(stamp, 1, 7) AS year_month
FROM
(SELECT CAST('2022-07-31 15:22:00' AS string) AS stamp) AS t
""")\
.show(truncate=False)
■ Pandas
ο 오늘날짜 추출하기
① 필요한 패키지, 모듈 불러오기
import pymysql
import pandas.io.sql as psql
import pandas as pd
② MySQL 데이터베이스 연동하기
con = pymysql.connect(host='localhost', user='root', password='1234',
db='webmarket', charset='utf8',
autocommit=True,
cursorclass=pymysql.cursors.DictCursor)
cur = con.cursor()
# SQL을 통해 데이터를 조작하기 위한 Cursor 객체 생성
③ sql쿼리 결과 데이터 읽어오기
sql = """SELECT
CURRENT_DATE AS dt,
CURRENT_TIMESTAMP AS stamp
"""
df_now = psql.read_sql(sql, con)
con.close()
df_now
날짜함수 .datetime.now() 활용
print (pd.datetime.now()) # 현재 날짜, 시간
print (pd.datetime.now().date()) # 현재 날짜 연, 월, 일
print (pd.datetime.now().year)
print (pd.datetime.now().month)
print (pd.datetime.now().day)
print (pd.datetime.now().hour)
print (pd.datetime.now().minute)
print (pd.datetime.now().second)
print (pd.datetime.now().microsecond)
③ -1. 판다스 날짜함수를 통해 추출한 날짜 값들을 문자형으로 변환 → 사전형으로 데이터프레임에 담음.
df_now_pd = pd.DataFrame({
'dt': [str(pd.datetime.now().date())], # pd.datetime.now()에서 date만 추출
'stamp': [str(pd.datetime.now())]
})
df_now_pd
ο 지정 날짜/시간 추출하기
~② MySQL 데이터베이스 연동까진 동일.
③ sql쿼리 결과 데이터 읽어오기
sql = """SELECT
date '2022-07-31' AS dt,
timestamp '2022-07-31 15:22:00' AS stamp
"""
df_now = psql.read_sql(sql, con)
con.close()
df_now
③ -1. 판다스 날짜함수를 통해 추출한 날짜 값들을 문자형으로 변환 → 사전형으로 데이터프레임에 담음.
df_datetime_pd = pd.DataFrame({
'dt': ['2022-07-31'],
'stamp': ['2022-07-31 15:22:00']
})
df_datetime_pd
df_datetime_pd.info()
④ string에서 datetime 자료형으로 전환 : pd.to_datetime(컬럼, format='')
pd.to_datetime() 함수로 시간 형식의 object 자료형 컬럼을 datetime 형식으로 바꿀 수 있다.
df_datetime_pd['dt'] = pd.to_datetime(df_datetime_pd['dt'], format='%Y-%m-%d')
df_datetime_pd['stamp'] = pd.to_datetime(df_datetime_pd['stamp'], format='%Y-%m-%d %H:%M:%S')
df_datetime_pd
ο 날짜/ 시각에서 연, 월, 일 추출하기
~② MySQL 데이터베이스 연동까진 동일.
③ sql쿼리 결과 데이터 읽어오기
sql = """SELECT
stamp,
EXTRACT(YEAR FROM stamp) AS year,
EXTRACT(MONTH FROM stamp) AS month,
EXTRACT(DAY FROM stamp) AS day,
EXTRACT(HOUR FROM stamp) AS hour
FROM
(SELECT timestamp '2022-07-31 15:22:00' AS stamp) AS t
"""
df_now = psql.read_sql(sql, con)
con.close()
df_now
③ -1. 사전형으로 timstamp 값이 문자형으로 담긴 데이터프레임 df
→ pandas to_datetime 함수로 날짜형식으로 변환
df = pd.DataFrame({'timestamp': ['2022-07-31 15:22:00']})
df['timestamp'] = pd.to_datetime(df['timestamp'], format='%Y-%m-%d %H:%M:%S')
df
print (df['timestamp'].dt.date) # YYYY-MM-DD (문자)
print (df['timestamp'].dt.year) # 연도(숫자/ 4자리)
print (df['timestamp'].dt.month) # 월(숫자)
print (df['timestamp'].dt.month_name) # 월(무자)
print (df['timestamp'].dt.day) # 일(숫자)
print (df['timestamp'].dt.time) # HH:MM:SS (문자)
print (df['timestamp'].dt.hour) # 시(숫자)
print (df['timestamp'].dt.minute) # 분(숫자)
print (df['timestamp'].dt.second) # 초(숫자)
print (df['timestamp'].dt.microsecond)
'Data analysis > SQL +' 카테고리의 다른 글
[MySQL] 매출 데이터 분석 : 이탈률 (0) | 2022.08.10 |
---|---|
[MySQL] 매출 데이터 분석 : 구매지표 (0) | 2022.08.10 |
[데이터 전처리4] 날짜 다루기1 : MySQL, Postgre (0) | 2022.07.31 |
[데이터 전처리3] 문자열 분해하기 : 계층 추출하기 (0) | 2022.07.29 |
[데이터 전처리2] URL에서 요소 추출하기2 : 경로와 매개변수값 추출하기 (0) | 2022.07.29 |