밑져야
2023-12-29 TIL 본문
1. 파이썬으로 시간 데이터 전처리 하기 (파이썬)
먼저 사용하고 싶은 데이터를 파이썬의 type()함수를 사용하여, 데이터의 종류를 파악할수 있다
print(type(테이블명['확인하고 싶은 컬럼명'][확인하고 싶은 행의 번호]))
ex)
print(type(sparta_data['access_date'][1]))
데이터 테이블에서 대부분의 값을 보통 문자의 형태로 저장되므로
만약 위의 과정을 수행 했다면 조회한 데이터가 문자의 형태를 하고 있다는 뜻으로

위와 같은 메세지가 출력될 것이다. 여기서 str은 문자를 의미한다.
이때, 다음과 같은 명령어를 이용하여 이 문자 데이터를 날짜 데이터 형식으로 치환할 수 있다.
format='%Y-%m-%dT%H:%M:%S.%f'
테이블명['바꾸고 싶은 데이터의 컬럼명'] = pd.to_datetime(테이블명['바뀐 데이터의 컬럼명'], format=format)
ex)
format='%Y-%m-%dT%H:%M:%S.%f'
sparta_data['access_date_time'] = pd.to_datetime(sparta_data['access_date'], format=format)
위 과정을 수행하면, 아래와 같은 값이 출력된다

아래의 명령어를 이용하면 비슷한 방식으로 각 날짜의 요일 데이터도 전산으로 바로 추출이 가능하다.
테이블명['요일 데이터를 지정해줄 컬럼명'] = 테이블명['날짜 데이터가 들어있는 컬럼명'].dt.day_name()
ex)
sparta_data['access_date_time_weekday'] = sparta_data['access_date_time'].dt.day_name()
결과 =

참고 : https://teamsparta.notion.site/_-3-1f89f961becf42eb8a59fbe0c2146b91#6f02333ce7214c10938fbdda45d81037
---------------------------------------------------------------------------------------------------------------------------------------------
2. 그룹화 이용하여 차트를 만들기 위한 데이터 전처리하기 (파이썬)
groupby('컬럼명')
명령어를 사용하면 데이터를 특정 기준으로 그룹화하여 처리할 수 있다.
이를테면 요일별로 데이터를 정리해줘 시간별로 몇 건이 있는지 세어줘 등등
SQL 문법에서의 group by '컬럼명' 과 같은 역할을 수행한다.
또한
count*() 명령어를 이용하여 해당 컬럼의 데이터 갯수를 셀 수 있고,
agg("변수") 명령어를 이용하면 변수 안 데이터 별 합계를 구할 수 있다.
다음은 앞의 예문에서 날짜 데이터를 전처리한 것을 바탕으로
요일에 따른 접속자 수(접속한 서로다른 아이디의 갯수) 를 셀 때, 필요한 명령어이다.
weeks = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
weekdata = sparta_data.groupby('access_date_time_weekday')['user_id'].count()
weekdata
결과 =

요일 순서가 뒤죽박죽인 이 데이터를 요일을 기준으로 정렬해주려면
weekdata = weekdata.agg(weeks)
weekdata
결과 =

---------------------------------------------------------------------------------------------------------------------------------------
3. 전처리한 데이터를 바탕으로 차트 만들기 (파이썬)
예제 1 - 요일별 수강생 수 바 그래프 그리기
가장 먼저 작업을 위해 필요한 확장 프로그램인 matplotlib 을 불러오겠다 선언하고
앞으로 이를 plt라 지칭하겠다는 뜻의 명령어가 필요하다
import matplotlib.pyplot as plt
#그래프 사이즈
plt.figure(figsize=(10,5))
괄호 안의 앞의 숫자는 만들어진 표의 가로(x축) 사이즈, 뒤의 숫자는 세로(y축) 사이즈를 의미한다.
#그래프 x축 y축
plt.bar(weekdata.index, weekdata)
위 식대로 그래프를 만들려면 앞에 데이터 전처리에서 반드시
데이터의 그룹화를 통해서 값들에 지표나 색인(INDEX) 를 만들어주어야 한다
#그래프 명
plt.title('요일별 수강 완료 수강생 수')
#그래프 x축 레이블
plt.xlabel('요일')
#그래프 y축 레이블
plt.ylabel('수강생(명)')
#x축 레이블을 90도로 변환
plt.xticks(rotation=90)
#그래프 출력
plt.show()
결과 =

만약 위와 같은 바 그래프가 아닌 라인 그래프를 그리고 싶다면
plt.bar 를 plt.plot 으로만 변경해주면 가능하다
예제 2 - 시간 별 접속하는 수강생 수의 라인 그래프 그리기
#그래프 사이즈 변경
plt.figure(figsize=(10,5))
#그래프 x축 y축
plt.plot(hourdata.index, hourdata)
#그래프 명
plt.title('시간별 수강 완료 사용자 수')
#그래프 x축 레이블
plt.xlabel('시간')
#그래프 y축 레이블
plt.ylabel('사용자(명)')
#x축 눈금 표시 하기
plt.xticks(np.arange(24))
위의 바 그래프를 그렸을 때와 다르게 여기서는 np.arange 함수를 사용하였는데
위 명령어를 해석하면,
xsticks 그래프의 x축을 (np.arange 다음의 숫자만큼 쪼개서 표시하고 싶다 (24)) 24개로
이 경우 0부터 시작하므로 차트의 x축에는 0~23 까지에 해당하는 눈금이 새겨지게된다
#그래프 출력
plt.show()
결과 =

--------------------------------------------------------------------------------------------------------------------------------------
4. 피벗 테이블과 히트맵 만들기(파이썬)
예를 들어 위 두개의 차트처럼
A 요인이 결과값에 미치는 영향, 혹은 B요인이 결과값에 미치는 영향을 각각 보는 것이 아니라
A, B 두 요인에게 모두 영향 받았을 때, 각각의 결과값이 궁금한 것이라면
두 요인을 하나는 x축에 변수로 지정하고 또 하나는 y축에 변수로 지정하여
'A가 1이며 B가 3일 때의 결과값' , 'A가 5이며 B가 2일 때의 결과값' 등을
아래와 같은 표를 이용하여 각각 표기해줄 수 있다.

이를 피벗 테이블이라고 부르며
#values : 열에 들어 가는 부분
#index : 행에 들어가는 부분
#aggfunc : 데이터 축약시 사용할 함수
sparta_data_pivot_table = pd.pivot_table(sparta_data, values='user_id',
index=['access_date_time_weekday'],
columns=['access_date_time_hour'],
aggfunc="count").agg(weeks)
sparta_data_pivot_table
위와 같은 명령어를 이용하여 이를 생성하고 출력할 수 있다.
다음의 작업으로 피벗 테이블이 완성되었다면
이 테이블에 수치의 크기에 따라 색을 입혀주는 작업만 해준다면
히트맵으로 구현이 가능하다.
#그래프 사이즈 변경
plt.figure(figsize=(14,5))
#pcolor를 이용하여 heatmap 그리기
plt.pcolor(sparta_data_pivot_table)
#히트맵에서의 x축
plt.xticks(np.arange(0.5, len(sparta_data_pivot_table.columns), 1), sparta_data_pivot_table.columns)
#히트맵에서의 y축
plt.yticks(np.arange(0.5, len(sparta_data_pivot_table.index), 1), sparta_data_pivot_table.index)
여기서 np.arange는 괄호에 명시된 간격으로 배열을 생성 해주는 명령어이다
아래의 표를 예로 들면, 눈금의 중앙 부분에 맞추어, 가로1 x 세로1의 칸들이 필요하므로
시작은 0이 아닌 0.5, 한칸의 간격은 1로 지정해준 것이다.
#그래프 명
plt.title('요일별 종료 시간 히트맵')
#그래프 x축 레이블
plt.xlabel('시간')
#그래프 y축 레이블
plt.ylabel('요일')
#plt.colorbar() 명령어를 추가하면 그래프 옆에 숫자별 색상값을 나타내는 컬러바를 보여 줍니다
plt.colorbar()
plt.show()
결과 =

---------------------------------------------------------------------------------------------------------------------------------
5. 데이터 중복값 제거 (파이썬)
데이터에 어떤 값들이 존재하는지 알아보기 위해
중복된 값을 제거하고 각 종류별로 한번씩만 출력하고 싶다면
다음의 명령어를 이용한다
- SQL 에서 select disntinct() 와 비슷한 역할을 수행한다
새로운 컬럼명 = set(테이블명['중복을 제거하고 싶은 컬럼명'])
print( 새로운 컬럼명 , len( 새로운 컬럼명 ))
ex)
category_range = set(sparta_data['area'])
print(category_range, len(category_range))
결과 =

여기서 len()은 리스트에 들어가 있는 원소 개수, 즉 리스트의 크기를 알려주는 함수이며
결과 값 중 뒤에 붙어있는 12가 바로 len()의 계산 결과로 이 리스트 안에 12개의 값이 존재한다는 의미이다.
-----------------------------------------------------------------------------------------------------------------------------
6. 필요한 데이터만을 볼수 있게 테이블 가공하기
SQL에서 select 와 같이 원하는 컬럼만들 조회하고 싶다면 다음의 명령어를 이용한다.
새로운 테이블명 = 정보를 가져올 테이블명 [['원하는 컬럼 1',' 원하는 컬럼 2 ',' 원하는 컬럼 3']]
ex)
area_info=sparta_data[['area','latitude','longitude']]
결과 =

어떤 값들이 존재하는지 확인한 후에 중복된 값을 삭제하고 싶다면
drop.dulplacates() 를 이용할 수 있다.
ex)
area_info=area_info.drop_duplicates(['area']) area_info
이후 index 를 기준으로 값의 재정렬하고 싶다면 reset_index() 를 이용할 수 있다
ex)
area_info= area_info.reset_index()
만약 지정되어있는 index 외에 다른 컬럼을 기준으로 테이블을 재정렬하고 싶다면
.sort_values 명령어를 통해 가능하다.
ex)
area_info = area_info.sort_values(by=["area"], ascending=[True])
이때, 오름차순으로 정렬하고 싶다면 ascending=[True] 를,
내림차순으로 정렬하고 싶다면 ascending=[False] 를 이용한다.
결과 =

참고 : 5와 동일
----------------------------------------------------------------------------------------------------------
7. 두 테이블 병합하기 (파이썬)
동일한 컬럼이 존재하는 두 데이터 테이블을 합쳐서 하나의 테이블로
만들고 싶다면 merge() 를 이용할 수 있다.
SQL에서 join과 같은 기능을 하는 명령어로 다음과 같이 사용된다.
병합된 테이블명 = pd.merge(병합할 테이블 1, 병합할 테이블 2, on="공통된 컬럼명")
ex)
result = pd.merge(area_info, number_of_students, on="area")
---------------------------------------------------------------------------------------------------
8. 지도를 이용하려 히트맵 그리기 (파이썬)
먼저 지도를 사용하기 위해 필요한 라이브러리를 사용 선언한다.
여기서는 FOLIUM 이라는 라이브러리를 사용할 것이다
import folium
from folium.plugins import MarkerCluste
폴리움(Folium) 이란?
분석한 데이터의 결과를 지도에 그리기 위한 라이브러리
마커 클러스터(MarkerCluster)
가까운 거리의 marker들을 군집시켜, 해당 건수를 표현해줌.
그리고 나면 히트맵을 그리고 싶은 위치의 위도 경도를 설정해준다.
m = folium.Map(location=[37.5536067,126.9674308],
zoom_start=11)
m
결과 =

지도를 불러온 이후에는 앞서서 가공한 위치 데이터를 지도에 찍어주는 작업이 필요하다
for n in result.index:
radius = result.loc[n,'user_id']
우선, loc[n,"열 이름"] => loc[]를 활용하여 n번째의 열을 조회할 수 있다.
즉, n번째의 user의 수를 가져 올수 있는 것이다.
folium.CircleMarker([result['latitude'][n],result['longitude'][n]],
radius = radius/50, fill=True).add_to(m)
그리고 add_to(m)를 활용하여, 지정해 두었던 우리나라의 지도를 가져올 수 있다
m
결과 =


[스파르타코딩클럽] 직장인을 위한 실전 데이터분석 _ 3주차 | Built with Notion
파이썬으로 수치를 계산 할 때, 여러 함수들을 제공하여 많은 양의 복잡한 수치를 계산 할때
teamsparta.notion.site
'TIL' 카테고리의 다른 글
| 2024-01-04 TIL (1) | 2024.01.03 |
|---|---|
| 2024-01-02 TIL (0) | 2024.01.02 |
| 2023-12-28 TIL (1) | 2023.12.28 |
| 2023-12-27 TIL (6) | 2023.12.27 |
| 2023-12-26 TIL (3) | 2023.12.26 |