공부/Python

[핸즈온 머신러닝] Ch.2 머신러닝 프로젝트 처음부터 끝까지 - 2(2.4)

tea_pixel 2024. 9. 5. 12:00
반응형

3. 데이터 이해를 위한 탐색과 시각화

3.1 지리적 데이터 시각화
# 지리 정보를 반영한 산점도 그리기

housing.plot(kind="scatter", x="longitude", y="latitude", grid=True, alpha=0.2)
save_fig("better_visualization_plot")
plt.show()

 

alpha값을 바꿔가면서 가공한 데이터, 왼쪽부터 default, 0.5, 0.2

 

지리 정보(위도와 경도)로 만든 산점도

# 지리 정보에 주택 가격 정보까지 반영

housing.plot(kind="scatter", x="longitude", y="latitude", grid=True,	# 기본적인 그래프
             s=housing["population"] / 100, label="population",		# 점의 크기를 인구 비율로 할당함
             c="median_house_value", cmap="jet", colorbar=True,		
             	# 점의 색상을 중위 주택 가격으로 하고, 색상맵(cmap) 및 색상 막대(colobar=True)을 활성화
                # cmap=jet은 빨간색(높은값)에서 파란색(낮은값)으로 색이 변하는 색상 스펙트럼을 제공
             legend=True, figsize=(10, 7))				# 범례 및 그래프 크기 설정
save_fig("housing_prices_scatterplot")  # extra code
plt.show()

# 추가 코드 (배경에 캘리포니아 이미지를 넣음)

#  캘리포니아 이미지를 다운로드합니다
filename = "california.png"
if not (IMAGES_PATH / filename).is_file():
    homl3_root = "https://github.com/ageron/handson-ml3/raw/main/"
    url = homl3_root + "images/end_to_end_project/" + filename
    print("Downloading", filename)
    urllib.request.urlretrieve(url, IMAGES_PATH / filename)

housing_renamed = housing.rename(columns={
    "latitude": "Latitude", "longitude": "Longitude",
    "population": "Population",
    "median_house_value": "Median house value (ᴜsᴅ)"})
housing_renamed.plot(
             kind="scatter", x="Longitude", y="Latitude",
             s=housing_renamed["Population"] / 100, label="Population",
             c="Median house value (ᴜsᴅ)", cmap="jet", colorbar=True,
             legend=True, figsize=(10, 7))

california_img = plt.imread(IMAGES_PATH / filename)
axis = -124.55, -113.95, 32.45, 42.05
plt.axis(axis)
plt.imshow(california_img, extent=axis)

save_fig("california_housing_prices_plot")
plt.show()

3.2 상관관계 조사
# 상관 관계 조사

corr_matrix = housing.corr(numeric_only=True)		# corr은 상관관계 분석(-1에서 1까지), 1에 가까울수록 강한 양의 상관관계, numertic_only = 수치형 데이터만 포함하는지 
corr_matrix["median_house_value"].sort_values(ascending=False)	# sort_values = 기본은 오름차순 정렬, False = 내림차순

# 중간 주택 가격과 상관관계가 높은 4가지의 데이터만 plot

from pandas.plotting import scatter_matrix

attributes = ["median_house_value", "median_income", "total_rooms",
              "housing_median_age"]					# 상관 관계를 보기 때문에, x축 y축을 따로 구분하지 않음
scatter_matrix(housing[attributes], figsize=(12, 8))
save_fig("scatter_matrix_plot")  # 추가 코드
plt.show()

 

# 주택 가격을 예측하는데, 중간 소득이 가장 유용해보이므로 이 산점도만 따로 그림.

housing.plot(kind="scatter", x="median_income", y="median_house_value",
             alpha=0.1, grid=True)
save_fig("income_vs_house_value_scatterplot")  # e추가 코드
plt.show()

# 여러가지 특성 조합으로 상관 관계 찾기.

housing["rooms_per_house"] = housing["total_rooms"] / housing["households"]
housing["bedrooms_ratio"] = housing["total_bedrooms"] / housing["total_rooms"]
housing["people_per_house"] = housing["population"] / housing["households"]

corr_matrix = housing.corr(numeric_only=True)
corr_matrix["median_house_value"].sort_values(ascending=False)

housing 데이터에 방 개수, 침실/방 비율, 가구당 인원 등의 특성을 만들어서 상관관계 비교.

방 개수(rooms_per_house)의 경우, 방 개수에 따라서 집값은 올라가는 것이 일반적이므로  양의 상관관계(0.14)를 보이지만 강하진 않음.

침실/방 비율(bedrooms_ratio)이 낮은 집(음의 상관관계, -0.25)이 집값이 높은 경향이 있음.

가구당 인원(people_per_house)도 낮을수록(음의 상관관계, -0.04) 집값이 높은 경향이 있음

 

 

 

 

Ref

 

핸즈온 머신러닝 3판 사이킷런, 케라스, 텐서플로 2로 완벽 이해하는 머신러닝, 딥러닝 이론 & 실무

728x90