![[TIL] 2024-07-23 # 데이터 시각화](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcOTEkd%2FbtsIJ1hWllH%2FTTZi7BvYxOMxzk5qfLJrq1%2Fimg.jpg)
[TIL] 2024-07-23 # 데이터 시각화TIL (2024)/2024.072024. 7. 24. 00:16
Table of Contents
728x90
Today I Learned (2024-07-23) 🤔
목차
오늘 공부한 내용 🧑🏻💻
1. 인프런(핵심만 빠르게, 입문자를 위한 파이썬(Python)과 판다스(Pandas))
데이퍼프레임 조회(read)
DataFrame.index
- 인덱스는 책의 목차같은 개념
- 더 빠르게 검색하고, 데이터를 정렬할 때 사용되는 개념
DataFrame.loc
- loc[행인덱스] -> row조회
- loc[행인덱스, 컬럼명] -> row&column 조회
- 판다스
loc
함수에서는 뒤에 있는 영역까지 포함된다.sample.loc[0:3] # 0부터 2가 아니라 3까지 조회한다. # 판다스 loc 함수에선 : 뒤에 있는 영역까지 포함해서 조회한다.
Dataframe.iloc
- iloc[행인덱스번호] -> row 조회
- iloc[행인덱스번호, 열인덱스번호] -> row&column 조회
인덱싱(indexing)
- 조건에 따라 원하는 부분만 가져오고 싶어하는 경우가 있다. 이런것을 인덱싱이라고 한다.
- 🚨
pandas
에서는and
,or
가 아닌&
,|
로 비트 연산을 사용한다condition = (sample['생활인구합계'] >= 1000) & (sample['행정동코드'] == 11680610)
2. KDT
데이터그룹화
DataFrame.groudby
- 그룹객체를 만들어주는 함수이다.
DataFrame.groupby('그룹화할 열 이름')
- 복잡한 데이터 집합에서 그룹별 통계나 요약 정보를 추출 할 수 있다.
- 데이터를 그룹화하고 그룹화된 데이터에 대한 연산을 수행하는데 매우 유용한 기능
사용법
DataFrame.groudby(열)
+ `통계 함수(sum, mean, max, min...)# 단일 열 기준 그룹화 grouped = df.groupby('column_name') # 복수 열 기준 그룹화 grouped = df.groupby(['column1', 'column2']) # 평균 계산: grouped.mean() # 합계 계산: grouped.sum() # 카운트: grouped.count() # 최대값: grouped.max() # 최소값: grouped.min()
agg()
그룹별로 집계(aggregate) 연산을 수행할 때 사용된다.
여러 함수를 동시에 적용할 수 있다.
예시 코드
# 부서별 급여에 대한 여러 집계 함수 적용 dept_salary_summary = df.groupby("Department")["Salary"].agg(["sum", "mean", "min", "max"]) print(dept_salary_summary)
sum mean min max Department HR 132000 66000.0 60000 72000 IT 133000 66500.0 62000 71000 Sales 135000 67500.0 65000 70000
apply()
그룹화된 데이터에 대해 복잡한 변환과 연산을 수행할 수 있다.
사용자 정의 함수를 통해 그룹별 데이터에 대해 거의 모든 종류의 연산을 수행할 수 있게 해준다.
예시 코드
# 사용자 정의 함수: 최대 급여와 최소 급여의 차이 계산 def salary_range(group): return group["Salary"].max() - group["Salary"].min() salary_diff = df.groupby("Department").apply( salary_range, include_groups=False, ) print(salary_diff)
Department HR 12000 IT 9000 Sales 5000 dtype: int64
apply와 agg의 차이점
- agg는 주로 간단한 집계 연산에 사용되며, apply는 더 복잡하거나 사용자 정의 연산에 사용된다.
- agg는 각 열에 대해 독립적으로 함수를 적용하는 반면, apply는 그룹 전체에 함수를 적용할 수 있다.
filter()
특정 조건을 만족하는 그룹만 선택할 수 있다.
함수가
True
를 반환하는 그룹만 결과 데이터셋에 포함된다.예시 코드
def greater_count(group): condition = group["Name"].count() > 2 return condition # 직원 수가 2명 보다 많은 부서만 선택 filter_departments = df.groupby("Department").filter(greater_count)
데이터 합치기
- 합치기(concat)
DataFrame.concat()
concat
은 주로 단순하게 데이터프레임을 위아래 또는 좌우로 합칠 때 사용된다.axis
파라미터를 통해 축을 정할 수 있다.axis=0
: 세로(위아래) 결합axis=1
: 가로(좌우) 결합
- 🚨 열 방향으로 합칠 때 같은 이름이면 새로운 열이 추가된다. (주의) 🚨
- 기본 사용법
df.concat([df1, df2, df3, .....])
- 병합(merge)
DataFrame.merge()
- 특정 기준(하나 이상의 키)에 따라 데이터프레임을 병합
- Join 종류
- 내부 조인(Inner Join) : 두 데이터 프레임에 모두 존재하는 기준 열에 대해서 병합
how='inner'
- 왼쪽 조인(Left Join) : 첫 번쨰(왼쪽) 데이터 프레임의 열을 기준으로 병합
how='left'
- 오른쪽 조인(Right Join) : 두 번째(오른쪽) 데이터 프레임의 열을 기준으로 병합
how='right'
- 외부 조인(Outer Join) : 두 데이터 프레임에 존재하는 모든 열에 대해 병합
how='outer'
on
: 병합 할때 기준이 되는 열을 지정한다,
- 내부 조인(Inner Join) : 두 데이터 프레임에 모두 존재하는 기준 열에 대해서 병합
- 기본 사용법
pd.merge(left_dataframe, right_dataframe, on="기준 열", how="방식")
concat 과 merger 의 차이
concat
:- 단순히 데이터프레임을 위아래 또는 좌우로 결합할 때 유용하다.
- 데이터프레임을 한 번에 결합할 수 있으며, 기본적으로 인덱스를 사용하여 결합한다.
merge
:- 특정 열을 기준으로 데이터프레임을 결합할 때 유용하다.
- SQL JOIN 연산과 유사하게 다양한 방식으로 결합할 수 있으며, 더 복잡한 결합 조건을 처리할 수 있다.
시각화 라이브러리
matplotlib
- 파이썬 시각화 라이브러리 중 가장 기본적이며 널리 사용되는 라이브러리 [matplotlib]
- 기본 그래프 및 복잡한 그래프까지 유연하고 다양한 시각화 기능을 제공한다.
- 하지만 사용법이 까다로울 수 있다.
Seaborn
- Matplotlib을 기반으로 만들어진 라이브러리 [seaborn]
- 통계적 시각화에 유용하다.
- Matplotlib보다 사용법이 쉬우며 세련된 스타일의 그래프를 제공한다.
- Seaborn 자체적으로 학습용 데이터셋을 제공한다.
Plotly
- 인터랙티브한 시각화를 쉽게 만들 수 있는 라이브러리 [plotly]
- 웹 기반 시각화와 잘 통합되어 분석 결과를 대화형(상호작용적)으로 표현할 수 있다.
- Seaborn처럼 학습용 데이터셋을 제공한다.
선그래프(Line Plot)
선그래프(Line Plot)란?
- 시계열 데이터(time series data)에 대해 시간의 경과에 따른 변화나 추세를 시각적으로 표현하는데 매우 유용하다.
- ⭐️ 시간의 경과에 따른 변화나 추세
- 전체적인 데이터의 추세나 패턴을 쉽게 파악할 수 있다.
- 여러 그룹의 추세를 동시에 그래프에 표시하여 관계나 비교하고자 할 때 효과적이다.
- 시계열 데이터(time series data)에 대해 시간의 경과에 따른 변화나 추세를 시각적으로 표현하는데 매우 유용하다.
기본 사용법
sns.lineplot(data, x, y)
예시
sns.load_dataset("flights")
라는 데이터셋을 이용flights 데이터 정보
year
: 연도를 나타내는 정수형 값month
: 월을 나타내는 문자열 값passengers
: 해당 연도와 월에 항공기를 이용한 승객 수를 나타내는 정수형 값입니다.
년도별 승객 수 변화
import seaborn as sns import matplotlib.pyplot as plt # 예제 데이터 생성 df = sns.load_dataset("flights") # 기본 라인 플롯 sns.lineplot(data=df, x="year", y="passengers") plt.title("Basic Line Plot") plt.show()
한계
- 대량의 데이터를 처리하면 선 그래프가 지나치게 복잡해져서 정보의 해석이 어려워진다.
- 데이터에 연속성이 있어야 한다.
- 누락된 데이터가 발생하면 선 그래프가 이상해질 수 있다.
산점도(Scatter Plot)
산점도(Scatter Plot)란?
- 두 변수 간의 관계를 시각저긍로 탐색하고 이해하는 데 매우 유용한 도구이다.
- 두 변수 간의 관계를 점들로 표현한 그래프.
- 즉, 변수 사이에 어떤 연관성이 있는지 쉽게 파악할 수 있다.
기본 사용법
sns.scatterplot(data, x ,y hue)
예시
sns.load_dataset("tips")
라는 데이터셋을 이용하였다.총 청구금액과 팁 금액 시각화
import seaborn as sns import matplotlib.pyplot as plt # 샘플 데이터 로드 tips = sns.load_dataset("tips") # 팁 금액과 총 청구금액의 연관성 시각화 sns.scatterplot(data=tips, x="total_bill", y="tip") # 그래프 제목 추가 plt.title("Tip Amount And Total Bill") # 그래프 보여주기 plt.show()
흡연 여부에 따른 데이터 포인트 시각화
import seaborn as sns import matplotlib.pyplot as plt tips = sns.load_dataset("tips") # 팁 금액과 총 청구금액의 연관성 시각화, 단 흡연 여부에 따라 구분 sns.scatterplot(data=tips, x="total_bill", y="tip", hue="smoker") plt.title("Tip Amount And Total Bill by Smoking") plt.show()
한계
- 많은 양의 데이터가 그래프에 표시되면 점들이 서로 겹쳐서 파악하기 어려워진다.
어려웠던 내용 📚
- groupby 실습이 어려웠다.
- 더 사용해봐야겠다.
궁금한 내용과 부족한 내용 🙋🏻
scatterplot
에서hue
를 여러개 적용할 수 있나?- 삐빅, 불가능
- 해결책
plt.subplots(nrows=2, ncols=2)
처럼 여러개의Axes
를 만들어서 각각hue
를 설정해준다.
느낀 점 💡
- 데이터가 시각화되서 화면에 뿌려진다는 것이 재미있었고, 더 방대한 데이터들을 누가봐도 알아보고 쉽게 시각화시켜고 싶어졌다.
- 내일이 기대된다.
'TIL (2024) > 2024.07' 카테고리의 다른 글
[TIL] 2024-07-25 (데이터 시각화) (0) | 2024.07.26 |
---|---|
[TIL] 2024-07-24 (데이터 시각화) (6) | 2024.07.25 |
[TIL] 2024-07-22 (2) | 2024.07.23 |
[TIL] 2024-07-21 (0) | 2024.07.21 |
[TIL] 2024-07-20 (2) | 2024.07.21 |
@mane Lab :: 마네의 연구소
배움에 즐거움을 느끼는 마네의 연구소입니다. 이미지 출처 : https://www.instagram.com/hoseobiiiiiii._.0410/
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!