# data[].attributes.body
▶방법 1 : 파이썬 + cmd 모듈

▶방법 2 : 아나콘다 + Jupytor

▶방법 3 : 코랩

# data[].attributes.headline
파이썬 홈페이지 다운로드

# data[].attributes.subject
파이썬 홈페이지 다운로드

# data[].attributes.attachment_link.keywords[]
python programming language object oriented web free open source software license documentation download community

# data[].attributes.attachment_link.description
The official home of the Python Programming Language

# data[].attributes.attachment_link.description
Anaconda’s open-source Distribution is the easiest way to perform Python/R data science and machine learning on a single machine.

# data[].attributes.headline
1.1. 인천택배 위치데이터로 물류센터 최적화 프로젝트의 개요

# data[].attributes.subject
1.1. 인천택배 위치데이터로 물류센터 최적화 프로젝트의 개요

# data[].attributes.body
스스로 해결하고 싶은 주제를 선택하고 계획을 설계합니다.

1. 제목 : 학번 +이름

2. 내용 : 주제 설명하기

# data[].attributes.headline
1.2. 택배 시스템 최적화를 위한 사이킷런 필요 모듈 불러오기

# data[].attributes.subject
1.2. 택배 시스템 최적화를 위한 사이킷런 필요 모듈 불러오기

# data[].attributes.body
import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

%matplotlib inline

# ML 알고리즘 중 k-평균 군집화 알고리즘을 사용하기 위한 모듈

from sklearn.cluster import KMeans

# 원본 데이터에서 학습 데이터와 테스트 데이터를 분리하기 위한 모듈

from sklearn.model_selection import train_test_split

# 클러스터 모델 성능 평가를 위해 필요합니다. 즉 실루엣 분석 metric 값을 구하기 위한 모듈

from sklearn.metrics import silhouette_samples, silhouette_score

# seaborn으로 그래프를 표현하기 위해 seaborn의 라이브러리를 불러옵니다.

import seaborn as sns

# 한글폰트 사용을 위해 matplotlib의 pyplot을 plt라는 별칭으로 불러옵니다.

import matplotlib.pyplot as plt

# plt.rc("font", family="AppleGothic")

# plt.rc("font", family="Malgun Gothic")

plt.rc("font", family="NanumGothic")

# 축에 마이너스 값을 표현하기 위해 필요합니다.

plt.rc("axes", unicode_minus=False)

# data[].attributes.headline
1.3. 인천택배 위치데이터 파일(delivery.csv) 불러온 후 샘플 5개를 출력하기

# data[].attributes.subject
1.3. 인천택배 위치데이터 파일(delivery.csv) 불러온 후 샘플 5개를 출력하기

# data[].attributes.body
df = pd.read_csv('data/delivery.csv',encoding="UTF-8")

df.head()

# data[].attributes.headline
1.4. 데이터 프레임의 컬럼명, 데이터 개수, Null 개수, 데이터 타입등의 요약 정보 확인하기

# data[].attributes.subject
1.4. 데이터 프레임의 컬럼명, 데이터 개수, Null 개수, 데이터 타입등의 요약 정보 확인하기

# data[].attributes.body
df.info()

# data[].attributes.headline
1.5. 피처 데이터 지정하기

# data[].attributes.subject
1.5. 피처 데이터 지정하기

# data[].attributes.body
df_feature = df.iloc[:, 1:]

# data[].attributes.headline
1.6. ML 알고리즘 중 k-평균 군집화 알고리즘 사용하기

# data[].attributes.subject
1.6. ML 알고리즘 중 k-평균 군집화 알고리즘 사용하기

# data[].attributes.body
kmeans = KMeans(n_clusters=4, init='k-means++', max_iter=1000, verbose=1, random_state=0)

# data[].attributes.headline
1.7. fit 함수를 사용하여 피처 데이터로 학습(Train, 군집화) 수행하기

# data[].attributes.subject
1.7. fit 함수를 사용하여 피처 데이터로 학습(Train, 군집화) 수행하기

# data[].attributes.body
kmeans.fit(df_feature)

# data[].attributes.headline
1.8. predict함수를 사용하여 피처 데이터로 예측(Predict) 수행하기

# data[].attributes.subject
1.8. predict함수를 사용하여 피처 데이터로 예측(Predict) 수행하기

# data[].attributes.body
pred = kmeans.predict(df_feature)

print(pred)

# data[].attributes.headline
1.9. 군집화한 군집 중심점 좌표 결과 확인하기

# data[].attributes.subject
1.9. 군집화한 군집 중심점 좌표 결과 확인하기

# data[].attributes.body
center = kmeans.cluster_centers_ # 언더바는 예약어

center

print(center[0,0])

# data[].attributes.headline
1.10. 피처 데이터에 예측을 수행한 군집화된 결과값을 cluster_df 변수에 저장한 후 샘플 5개를 출력하기

# data[].attributes.subject
1.10. 피처 데이터에 예측을 수행한 군집화된 결과값을 cluster_df 변수에 저장한 후 샘플 5개를 출력하기

# data[].attributes.body
cluster_df = df_feature

cluster_df['cluster'] = pred

cluster_df.head()

# data[].attributes.headline
1.11. 인천택배 위치데이터에 4개의 군집점을 scatterplot 함수로 시각화하기

# data[].attributes.subject
1.11. 인천택배 위치데이터에 4개의 군집점을 scatterplot 함수로 시각화하기

# data[].attributes.body
lat = df['Latitude']

lon = df['Longitude']

plt.title("Latitude & Longitude")

plt.xlabel("Longitude")

plt.ylabel("Latitude")

plt.scatter(lon, lat, c='blue', s=10, label="location")

plt.scatter(center[0,1], center[0,0], marker="*", c='red', s=100, label="centroids")

plt.scatter(center[1,1], center[1,0], marker="*", c='red', s=100, label="centroids")

plt.scatter(center[2,1], center[2,0], marker="*", c='red', s=100, label="centroids")

plt.scatter(center[3,1], center[3,0], marker="*", c='red', s=100, label="centroids")

plt.legend(loc="best")

plt.grid()

plt.show()

# data[].attributes.headline
1.12. 인천택배 위치데이터에 군집화된 결과값을 scatterplot 함수로 시각화하기

# data[].attributes.subject
1.12. 인천택배 위치데이터에 군집화된 결과값을 scatterplot 함수로 시각화하기

# data[].attributes.body
import matplotlib.pyplot as plt

sns.scatterplot(data=cluster_df, x='Longitude', y='Latitude', hue='cluster')

plt.show()

# data[].attributes.headline
1.13. 클러스터별 평균 실루엣 계수의 시각화를 통한 클러스터 개수 최적화 방법 확인을 위한 함수 정의

# data[].attributes.subject
1.13. 클러스터별 평균 실루엣 계수의 시각화를 통한 클러스터 개수 최적화 방법 확인을 위한 함수 정의

# data[].attributes.body
import matplotlib.cm as cm

### 여러개의 클러스터링 갯수를 List로 입력 받아 각각의 실루엣 계수를 면적으로 시각화한 함수 작성

def visualize_silhouette(cluster_lists, X_features):

# 입력값으로 클러스터링 갯수들을 리스트로 받아서, 각 갯수별로 클러스터링을 적용하고 실루엣 개수를 구함

n_cols = len(cluster_lists)

# plt.subplots()으로 리스트에 기재된 클러스터링 수만큼의 sub figures를 가지는 axs 생성

fig, axs = plt.subplots(figsize=(4*n_cols, 4), nrows=1, ncols=n_cols)

# 리스트에 기재된 클러스터링 갯수들을 차례로 iteration 수행하면서 실루엣 개수 시각화

for ind, n_cluster in enumerate(cluster_lists):

# KMeans 클러스터링 수행하고, 실루엣 스코어와 개별 데이터의 실루엣 값 계산.

clusterer = KMeans(n_clusters = n_cluster, max_iter=500, random_state=0)

cluster_labels = clusterer.fit_predict(X_features)

sil_avg = silhouette_score(X_features, cluster_labels)

sil_values = silhouette_samples(X_features, cluster_labels)

y_lower = 10

axs[ind].set_title('Number of Cluster : '+ str(n_cluster)+'\n' \

'Silhouette Score :' + str(round(sil_avg,3)) )

axs[ind].set_xlabel("The silhouette coefficient values")

axs[ind].set_ylabel("Cluster label")

axs[ind].set_xlim([-0.1, 1])

axs[ind].set_ylim([0, len(X_features) + (n_cluster + 1) * 10])

axs[ind].set_yticks([]) # Clear the yaxis labels / ticks

axs[ind].set_xticks([0, 0.2, 0.4, 0.6, 0.8, 1])

# 클러스터링 갯수별로 fill_betweenx( )형태의 막대 그래프 표현.

for i in range(n_cluster):

ith_cluster_sil_values = sil_values[cluster_labels==i]

ith_cluster_sil_values.sort()

size_cluster_i = ith_cluster_sil_values.shape[0]

y_upper = y_lower + size_cluster_i

color = cm.nipy_spectral(float(i) / n_cluster)

axs[ind].fill_betweenx(np.arange(y_lower, y_upper), 0, ith_cluster_sil_values, \

facecolor=color, edgecolor=color, alpha=0.7)

axs[ind].text(-0.05, y_lower + 0.5 * size_cluster_i, str(i))

y_lower = y_upper + 10

axs[ind].axvline(x=sil_avg, color="red", linestyle="--")

# data[].attributes.headline
1.14. cluster 개수를 2개, 3개, 4개, 5개, 6개 일때의 클러스터별 평균 실루엣 계수값을 시각화하기

# data[].attributes.subject
1.14. cluster 개수를 2개, 3개, 4개, 5개, 6개 일때의 클러스터별 평균 실루엣 계수값을 시각화하기

# data[].attributes.body
visualize_silhouette([ 2, 3, 4, 5, 6 ], cluster_df) ##클러스너4번이 좋다

plt.show()

# data[].attributes.body
set OMP_NUM_THREADS=2

# data[].attributes.body
cluster_df.head()

cluster_df.info()

# data[].attributes.headline
1.15.1. 지도의 중심을 지정하기 위해 위도와 경도의 평균 구하기

# data[].attributes.subject
1.15.1. 지도의 중심을 지정하기 위해 위도와 경도의 평균 구하기

# data[].attributes.body
lat = cluster_df["Latitude"].mean()

long = cluster_df["Longitude"].mean()

lat, long

# data[].attributes.body
import folium

m = folium.Map([lat, long], tiles="OpenStreetMap", zoom_start=11)

for i in cluster_df.index:

sub_lat = cluster_df.loc[i, "Latitude"]

sub_long = cluster_df.loc[i, "Longitude"]

title = cluster_df.loc[i, "cluster"]

icon_color = "blue"

if cluster_df.loc[i, "cluster"] == 1:

icon_color = "purple"

elif cluster_df.loc[i, "cluster"] == 2:

icon_color = "green"

elif cluster_df.loc[i, "cluster"] == 3:

icon_color = "orange"

folium.CircleMarker([sub_lat,sub_long ], radius=3, color=icon_color, popup=f'<i>{title}</i>', tooltip=title).add_to(m)

m.save('index1.html')

m

# data[].attributes.headline
1.15.3. 인천택배 위치데이터, 4개의 군집점, 4개의 군집점을 중심으로한 반경 150을 CircleMarker로 표현하기

# data[].attributes.subject
1.15.3. 인천택배 위치데이터, 4개의 군집점, 4개의 군집점을 중심으로한 반경 150을 CircleMarker로 표현하기

# data[].attributes.body
m = folium.Map([lat, long], tiles="OpenStreetMap", zoom_start=11)

for i in cluster_df.index:

sub_lat = cluster_df.loc[i, "Latitude"]

sub_long = cluster_df.loc[i, "Longitude"]

title = cluster_df.loc[i, "cluster"]

icon_color = "blue"

if cluster_df.loc[i, "cluster"] == 1:

icon_color = "purple"

elif cluster_df.loc[i, "cluster"] == 2:

icon_color = "green"

elif cluster_df.loc[i, "cluster"] == 3:

icon_color = "orange"

folium.CircleMarker([sub_lat,sub_long ], radius=3, color=icon_color, popup=f'<i>{title}</i>', tooltip=title).add_to(m)

for i in range(len(center)):

center_lat = center[i, 0]

center_long = center[i, 1]

folium.CircleMarker([center_lat,center_long ], color='black', popup='centroids', tooltip='centroids').add_to(m)

folium.CircleMarker([center_lat,center_long ], radius=150, color='red', fill='red', popup='KMeans Circle', tooltip='KMeans Circle').add_to(m)

m.save('index2.html')

m

# data[].attributes.headline
노인요양시설 위치데이터에 4개의 군집점을 scatterplot 함수로 시각화 결과 이미지 업로드 (Matplotlib 활용)

# data[].attributes.subject
노인요양시설 위치데이터에 4개의 군집점을 scatterplot 함수로 시각화 결과 이미지 업로드 (Matplotlib 활용)

# data[].attributes.body
1. 제목 : 학번+이름

2. 내용 : 시각화 이미지 스샷

# data[].attributes.headline
노인요양시설 위치데이터에 군집화된 결과값을 scatterplot 함수로 시각화 결과 이미지 업로드 (Seaborn 활용)

# data[].attributes.subject
노인요양시설 위치데이터에 군집화된 결과값을 scatterplot 함수로 시각화 결과 이미지 업로드 (Seaborn 활용)

# data[].attributes.body
1. 제목 : 학번+이름

2. 내용 : 시각화 이미지 스샷

# data[].attributes.headline
cluster 개수를 2개, 3개, 4개, 5개, 6개 일때의 클러스터별 평균 실루엣 계수값을 시각화 이미지 업로드

# data[].attributes.subject
cluster 개수를 2개, 3개, 4개, 5개, 6개 일때의 클러스터별 평균 실루엣 계수값을 시각화 이미지 업로드

# data[].attributes.body
1. 제목 : 학번+이름

2. 내용 : 시각화 이미지 스샷

# data[].attributes.headline
Folium 지도로 시각화 이미지 업로드

# data[].attributes.subject
Folium 지도로 시각화 이미지 업로드

# data[].attributes.body
1. 제목 : 학번+이름

2. 내용 : 시각화 이미지 스샷

# data[].attributes.headline
노인요양시설 위치데이터를 Folium 지도 CircleMarker로 표현한 이미지 업로드

# data[].attributes.subject
노인요양시설 위치데이터를 Folium 지도 CircleMarker로 표현한 이미지 업로드

# data[].attributes.body
1. 제목 : 학번+이름

2. 내용 : 시각화 이미지 스샷

# data[].attributes.headline
1.1. 부산 노인요양시설 주소정보를 위도,경도 찾기를 위한 사이킷런 필요 모듈 불러오기

# data[].attributes.subject
1.1. 부산 노인요양시설 주소정보를 위도,경도 찾기를 위한 사이킷런 필요 모듈 불러오기

# data[].attributes.body
import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

%matplotlib inline

# ML 알고리즘 중 k-평균 군집화 알고리즘을 사용하기 위한 모듈

from sklearn.cluster import KMeans

# 원본 데이터에서 학습 데이터와 테스트 데이터를 분리하기 위한 모듈

from sklearn.model_selection import train_test_split

# 클러스터 모델 성능 평가를 위해 필요합니다. 즉 실루엣 분석 metric 값을 구하기 위한 모듈

from sklearn.metrics import silhouette_samples, silhouette_score

# seaborn으로 그래프를 표현하기 위해 seaborn의 라이브러리를 불러옵니다.

import seaborn as sns

# 한글폰트 사용을 위해 matplotlib의 pyplot을 plt라는 별칭으로 불러옵니다.

import matplotlib.pyplot as plt

# plt.rc("font", family="AppleGothic")

# plt.rc("font", family="Malgun Gothic")

plt.rc("font", family="NanumGothic")

# 축에 마이너스 값을 표현하기 위해 필요합니다.

plt.rc("axes", unicode_minus=False)

# data[].attributes.headline
1.2. 부산 노인요양시설 주소 데이터 파일(부산노인요양시설주소.csv) 불러온 후 샘플 5개를 출력하기

# data[].attributes.subject
1.2. 부산 노인요양시설 주소 데이터 파일(부산노인요양시설주소.csv) 불러온 후 샘플 5개를 출력하기

# data[].attributes.body
df = pd.read_csv('data/부산노인요양시설주소.csv', encoding="euc-kr")

df.head()

# data[].attributes.headline
1.3. 데이터 프레임의 컬럼명, 데이터 개수, Null 개수, 데이터 타입등의 요약 정보 확인하기

# data[].attributes.subject
1.3. 데이터 프레임의 컬럼명, 데이터 개수, Null 개수, 데이터 타입등의 요약 정보 확인하기

# data[].attributes.body
df.info()

# data[].attributes.body
# 라이브러리 설치

!pip install geopy

# import 라이브러리

from geopy.geocoders import Nominatim

# data[].attributes.headline
2.2. Nominatim의 경우 전체 도로명 주소를 제대로 받아들이지 못하기 때문에 일부 도로명 주소로 추출하기

# data[].attributes.subject
2.2. Nominatim의 경우 전체 도로명 주소를 제대로 받아들이지 못하기 때문에 일부 도로명 주소로 추출하기

# data[].attributes.body
df.head()

df["새주소"] = df["주소"].str.split("(", expand=True)[0]

df.head(3)

# data[].attributes.headline
2.3. 주소를 입력 받으면 위도, 경도를 반환하는 함수 정의하기

# data[].attributes.subject
2.3. 주소를 입력 받으면 위도, 경도를 반환하는 함수 정의하기

# data[].attributes.body
def geocoding(address):

try:

geo_local = Nominatim(user_agent='South Korea') #지역설정

location = geo_local.geocode(address)

geo = [location.latitude, location.longitude]

return geo

except:

return [0,0]

# data[].attributes.headline
2.4. 정의한 함수를 실행하여 Latitude, Longitude 컬럼명에 변환된 위도, 경도 좌표값을 저장하기

# data[].attributes.subject
2.4. 정의한 함수를 실행하여 Latitude, Longitude 컬럼명에 변환된 위도, 경도 좌표값을 저장하기

# data[].attributes.body
for id, addr in enumerate(df.새주소):

df.loc[id,'Latitude'] = geocoding(addr)[0]

df.loc[id,'Longitude'] = geocoding(addr)[1]

df.head()

# data[].attributes.headline
3. drop()로 데이터 프레임의 데이터 삭제하기

# data[].attributes.subject
3. drop()로 데이터 프레임의 데이터 삭제하기

# data[].attributes.body
drop_result = df.drop(['구군', '장기요양기관', '주소', '새주소'], axis=1, inplace=True)

df.head(3)

# data[].attributes.headline
지구표면온도(기후변화) 데이터에 있는 위도, 경도를 10진법으로 변환하기

# data[].attributes.subject
지구표면온도(기후변화) 데이터에 있는 위도, 경도를 10진법으로 변환하기

# data[].attributes.body
import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

%matplotlib inline

# ML 알고리즘 중 k-평균 군집화 알고리즘을 사용하기 위한 모듈

from sklearn.cluster import KMeans

# 원본 데이터에서 학습 데이터와 테스트 데이터를 분리하기 위한 모듈

from sklearn.model_selection import train_test_split

# 클러스터 모델 성능 평가를 위해 필요합니다. 즉 실루엣 분석 metric 값을 구하기 위한 모듈

from sklearn.metrics import silhouette_samples, silhouette_score

# seaborn으로 그래프를 표현하기 위해 seaborn의 라이브러리를 불러옵니다.

import seaborn as sns

# 한글폰트 사용을 위해 matplotlib의 pyplot을 plt라는 별칭으로 불러옵니다.

import matplotlib.pyplot as plt

# plt.rc("font", family="AppleGothic")

# plt.rc("font", family="Malgun Gothic")

plt.rc("font", family="NanumGothic")

# 축에 마이너스 값을 표현하기 위해 필요합니다.

plt.rc("axes", unicode_minus=False)

# data[].attributes.headline
지구표면온도(기후변화) 데이터 파일 불러온 후 샘플 3개를 출력하기

# data[].attributes.subject
지구표면온도(기후변화) 데이터 파일 불러온 후 샘플 3개를 출력하기

# data[].attributes.body
# 파일을 불러와 df 라는 변수에 담습니다.

df = pd.read_csv("GlobalLandTemperaturesByCity.csv")

df.head(3)

# data[].attributes.headline
데이터 프레임의 컬럼명, 데이터 개수, Null 개수, 데이터 타입등의 요약 정보 확인하기

# data[].attributes.subject
데이터 프레임의 컬럼명, 데이터 개수, Null 개수, 데이터 타입등의 요약 정보 확인하기

# data[].attributes.body
df.info()

# data[].attributes.headline
컬럼별 결측치 개수 출력하기

# data[].attributes.subject
컬럼별 결측치 개수 출력하기

# data[].attributes.body
df.isnull().sum()

# data[].attributes.headline
dropna함수로 결측치가 포함된 행 삭제한 후 확인하기

# data[].attributes.subject
dropna함수로 결측치가 포함된 행 삭제한 후 확인하기

# data[].attributes.body
df = df.dropna()

df.isnull().sum()

# data[].attributes.headline
위도, 경도를 10진법으로 변환하기

# data[].attributes.subject
위도, 경도를 10진법으로 변환하기

# data[].attributes.body
df.head()

# data[].attributes.headline
Latitude(위도)값 중 N는 양의 실수형, S는 음의 실수형으로 변환해서 저장하기

# data[].attributes.subject
Latitude(위도)값 중 N는 양의 실수형, S는 음의 실수형으로 변환해서 저장하기

# data[].attributes.body
df["Latitude"].unique()

df["위도"] = df["Latitude"].str.replace("N", "+")

df["위도"] = df["위도"].str.replace("S", "-")

df.head()

df["위도"].unique()

m1 = df["위도"].str.endswith('-')

m2 = df["위도"].str[:-1].astype(float)

df["위도"] = np.where(m1, -m2, m2)

df["위도"].unique()

# data[].attributes.headline
Longitude(경도)값 중 E는 양의 실수형, W는 음의 실수형으로 변환해서 저장하기

# data[].attributes.subject
Longitude(경도)값 중 E는 양의 실수형, W는 음의 실수형으로 변환해서 저장하기

# data[].attributes.body
df["Longitude"].unique()

df["경도"] = df["Longitude"].str.replace("E", "+")

df["경도"] = df["경도"].str.replace("W", "-")

df.head()

df["경도"].unique()

m1 = df["경도"].str.endswith('-')

m2 = df["경도"].str[:-1].astype(float)

df["경도"] = np.where(m1, -m2, m2)

df["경도"].unique()

df.head()

# data[].attributes.body
python --version

pip install notebook

# data[].attributes.body
conda install -c conda-forge jupyterlab

pip install jupyterlab

jupyter lab

# data[].attributes.body
corbel.ttf

# data[].attributes.body
1. 제목 : 팀 이름

2. 내용 : 팀 구성원 명단

3. 구성원의 역할 분담 : 각 구성원별 역할 배정

# data[].attributes.headline
디싹 중고등 사전 설문조사

# data[].attributes.subject
디싹 중고등 사전 설문조사

# data[].attributes.attachment_link.description
빠르고 쉬운 폼빌더, 왈라

# data[].attributes.headline
디싹 중고등 사후 설문조사

# data[].attributes.subject
디싹 중고등 사후 설문조사

# data[].attributes.attachment_link.description
빠르고 쉬운 폼빌더, 왈라

# data[].attributes.headline
디싹 중고등 사전 설문조사

# data[].attributes.subject
디싹 중고등 사전 설문조사

# data[].attributes.headline
디싹 중고등 사후 설문조사

# data[].attributes.subject
디싹 중고등 사후 설문조사