데이터의 종류
이진 데이터
- 두 가지 값 중 하나만을 가지는 데이터
ex) 시험에 합격 했는지 여부, 제품이 결함이 있는지 여부 등
- 머신 러닝에서 중요한 역할을 함
- 분류 문제를 해결하는 경우 예측하고자 하는 대상이 이진 데이터인 경우가 많음
- 비율, 오즈비, 로그 오즈비 등의 측정 지표를 사용하여 분석할 수 있음
lab03
import pandas as pd
import matplotlib.pyplot as plt
# 데이터 불러오기
titanic = pd.read_csv('../data/Titanic_data.csv')
# 성별에 따른 생존자 수와 사망자 수 구하기
survived_gender =titanic.groupby('Sex')['Survived'].sum()
dead_gender=titanic.groupby('Sex')['Survived'].count()-survived_gender
출력
Sex
female 233
male 109
Name: Survived, dtype: int64
Sex
female 81
male 468
Name: Survived, dtype: int64
# 그래프 그리기
plt.figure(figsize=(10, 6))
plt.bar(survived_gender.index, survived_gender.values, color='g', alpha=0.5, label='Survived')
plt.bar(dead_gender.index, dead_gender.values, bottom=survived_gender.values, color='r', alpha=0.5, label='Dead')
plt.title('Survivors by Gender')
plt.xlabel('Gender')
plt.ylabel('Number of Passengers')
plt.legend()
plt.show()
출력
시계열 데이터
- 일정 시간 간격으로 측정된 데이터
ex) 매일 측정된 주식 시장의 주가, 1시간 간격으로 기록된 기온, 5초 간격으로 기록된 심전도 데이터...
- 시간에 따른 패턴이나 추세, 주기성 등을 파악하고 예측하는 것이 중요함
- 시계열 분해, 이동평균, 지수 평활법, ARIMA 등이 있음
- 최근에는 LSTM 과 RNN 을 사용하여 시계열 데이터를 예측 하는 방법이 있음
lab04
KOSPI 데이터를 활용한 시계열 데이터 시각화
import pandas as pd
import matplotlib.pyplot as plt
# 데이터 불러오기
data=pd.read_csv('../data/kospi.csv')
# Date 컬럼을 datetime 형식으로 변환하여 인덱스로 설정
data['Date']=pd.to_datetime(data['Date'])
data.set_index('Date',inplace=True)
print(data)
출력
Open High Low Close Adj Close \
Date
1997-07-01 744.979980 760.520020 744.669983 758.030029 758.030029
1997-07-02 763.390015 777.289978 763.390015 777.289978 777.289978
1997-07-03 778.820007 782.169983 773.270020 775.260010 775.260010
1997-07-04 776.020020 783.239990 773.900024 781.700012 781.700012
1997-07-07 781.500000 783.109985 772.140015 773.510010 773.510010
... ... ... ... ... ...
2017-06-28 2382.909912 2390.889893 2380.750000 2382.560059 2382.560059
2017-06-29 2396.810059 2402.800049 2393.570068 2395.659912 2395.659912
2017-07-03 2397.659912 2399.899902 2384.550049 2394.479980 2394.479980
2017-07-04 2395.239990 2398.020020 2376.409912 2380.520020 2380.520020
2017-07-07 2376.290039 2385.020020 2376.290039 2379.719971 2379.719971
Volume
Date
1997-07-01 0
1997-07-02 0
1997-07-03 0
1997-07-04 0
1997-07-07 0
... ...
2017-06-28 361200
2017-06-29 445100
2017-07-03 311000
2017-07-04 411800
2017-07-07 141728
[4938 rows x 6 columns]
데이터 시각화
# 그래프 그리기
plt.figure(figsize=(10, 6))
plt.plot(data.index, data['Close'])
plt.title('KOSPI Index')
plt.xlabel('Year')
plt.ylabel('Index')
plt.show()
출력
- x축에 년도, y축에는 KOSPI 지수가 나타나며 KOSPI 지수가 시간에 따라 어떻게 변화하는지 알 수 있음
KOSPI Close 데이터의 분포를 나타내는 히스토그램 그래프
import seaborn as sns
plt.figure(figsize=(16,8))
sns.histplot(data=data , x='Close')
plt.xlabel("Price")
plt.ylabel('Count')
plt.show()
출력
- x축은 종가(Close), y축은 해당 가격대에 해당하는 종가 데이터의 개수
공간 데이터
- 지리정보와 관련된 데이터, 지도상의 위치 정보를 가지고 있는 데이터
- 가장 일반적인 형태는 포인트 형식으로 위도와 경도 등의 좌표 정보를 가지고 있는 데이터 형태임
- 라인 형식으로는 도로나 하천과 같이 길이와 방향이 있는 데이터가 있음
- 폴리곤 형식으로는 도시나 지역과 같이 면적이 있는 데이터가 있음
- 공간 데이터를 분석하려면 공간 데이터 베이스와 같은 특별한 도구나 프로그램을 사용하여 데이터를 저장하고 분석
ex) 지리 정보를 이용하여 건물 가격을 예측하는 모델, 지진 발생 가능성을 예측하는 모델 등이 있음
GeoJSON
- 지리 정보를 다루는 JSON형식의 데이터 교환 형식
- 공간 데이터를 표현하기 위한 포맷으로서 지리적 좌표 및 속성 데이터를 특정 구조로 표현하고 이를 다른 소프트웨어나 서비스 에서 사용 할 수 있게 함
- 일반적으로 웹 기반 지도 서비스에서 자주 사용되는 데이터 형식 중 하나임
lab05
서울시 행정구역 경계 데이터
import geopandas as gpd
import matplotlib.pyplot as plt
# 서울시 행정구역 경계 데이터 읽기
seoul_gdf=gpd.read_file('../data/seoul_municipalities_geo_simple.shp')
print(seoul_gdf)
출력
code name name_eng base_year \
0 11250 ??? Gangdong-gu 2013
1 11240 ??? Songpa-gu 2013
2 11230 ??? Gangnam-gu 2013
3 11220 ??? Seocho-gu 2013
4 11210 ??? Gwanak-gu 2013
5 11200 ??? Dongjak-gu 2013
6 11190 ???? Yeongdeungpo-gu 2013
7 11180 ??? Geumcheon-gu 2013
8 11170 ??? Guro-gu 2013
9 11160 ??? Gangseo-gu 2013
10 11150 ??? Yangcheon-gu 2013
11 11140 ??? Mapo-gu 2013
12 11130 ???? Seodaemun-gu 2013
13 11120 ??? Eunpyeong-gu 2013
14 11110 ??? Nowon-gu 2013
15 11100 ??? Dobong-gu 2013
16 11090 ??? Gangbuk-gu 2013
17 11080 ??? Seongbuk-gu 2013
18 11070 ??? Jungnang-gu 2013
19 11060 ???? Dongdaemun-gu 2013
20 11050 ??? Gwangjin-gu 2013
21 11040 ??? Seongdong-gu 2013
22 11030 ??? Yongsan-gu 2013
23 11020 ?? Jung-gu 2013
24 11010 ??? Jongno-gu 2013
geometry
0 POLYGON ((127.11520 37.55753, 127.11880 37.557...
1 POLYGON ((127.06907 37.52228, 127.07496 37.520...
2 POLYGON ((127.05867 37.52630, 127.06907 37.522...
3 POLYGON ((127.01397 37.52504, 127.01918 37.520...
4 POLYGON ((126.98368 37.47386, 126.98464 37.469...
5 POLYGON ((126.98224 37.50931, 126.98242 37.501...
6 POLYGON ((126.89185 37.54737, 126.90281 37.541...
7 POLYGON ((126.90156 37.47754, 126.90277 37.476...
8 POLYGON ((126.82688 37.50549, 126.83122 37.505...
9 POLYGON ((126.85984 37.57185, 126.85950 37.568...
10 POLYGON ((126.82423 37.53788, 126.82890 37.539...
11 POLYGON ((126.90522 37.57410, 126.90370 37.572...
12 POLYGON ((126.95248 37.60509, 126.95481 37.603...
13 POLYGON ((126.97389 37.62950, 126.97135 37.627...
14 POLYGON ((127.10782 37.61804, 127.10362 37.617...
15 POLYGON ((127.05288 37.68424, 127.05403 37.682...
16 POLYGON ((127.01040 37.68189, 127.01073 37.676...
17 POLYGON ((126.97718 37.62860, 126.97941 37.630...
18 POLYGON ((127.07351 37.61284, 127.08325 37.616...
19 POLYGON ((127.02527 37.57525, 127.03122 37.579...
20 POLYGON ((127.08069 37.56906, 127.08553 37.568...
21 POLYGON ((127.02547 37.56894, 127.03182 37.567...
22 POLYGON ((127.01071 37.54118, 127.01044 37.539...
23 POLYGON ((127.02547 37.56894, 127.02572 37.562...
24 POLYGON ((126.97389 37.62950, 126.97718 37.628...
- 이 데이터는 서울시 25개 구를 나타내며 각 구는 Feature 객체로 표현됨
Type
- 객체의 유형을 나타내는 문자열. Feature로 설정됨
Geometry
- 이 속성은 type과 coordinates 속성으로 구성됨
- type은 지오메트리의 유형(점,선,면)을 나타내는 문자열
Properties
- 객체에 대한 추가 정보를 포함하는 객체
- 각 구의 name_eng과 name_kor 속성을 포함하고 있음
- 이 외에도 id, code, name 등의 속성 정보를 포함할 수 있음
시각화
# 그래프 크기 설정
plt.figure(figsize=(10, 10))
# 서울시 행정구역 경계 데이터 시각화
seoul_gdf.plot()
# 그래프 타이틀 설정
plt.title('Seoul Municipalities')
# x, y 축 라벨 설정
plt.xlabel('Longitude')
plt.ylabel('Latitude')
# 그래프 표시
plt.show()
출력