1. EDA 기본
1-1 데이터 읽어오기
이곳에서 데이터를 다운받아 읽어오는 코드를 작성해주세요.
- 파일을 받아보시면, CSV 파일이 여러개가 존재합니다. 이 파일들을 1개의 Data Frame으로 만드는 것이 목표입니다.
- 단, 만들어진 최종 Data Frame의 index에 주의해주세요! (단순 concat을 시키면 index가... 어떻게 되었죠?)
**import** pandas **as** pd
**from** glob **import** glob
**import** warnings
warnings**.**filterwarnings('ignore') *# 경고 메세지를 출력 안 하는 코드입니다.*
base_dir **=** "HERE YOUR DIR!" *# 알집 풀어주신 곳 폴더를 넣으시면 됩니다.*
file_lst **=** glob(base_dir **+** "*.csv")
**>** HERE YOUR CODE!!
concat_df
검색 힌트 : pandas concat, pandas read csv, how to use glob python, pandas concat, pandas reset index
import pandas as pd
from glob import glob
import warnings
warnings.filterwarnings('ignore')# 경고 메세지를 출력 안 하는 코드입니다.
base_dir = "" # 알집 풀어주신 곳 폴더를 넣으시면 됩니다.
file_lst = glob(base_dir + "*.csv")
df = pd.DataFrame()
for i in file_lst:
data = pd.read_csv(i)
df = pd.concat([df,data])
df = df.reset_index(drop = True)
1-2 카페만 조회하기
1-1에서 만든 Data Frame에서 상권업종중분류명
이 커피점/카페
인 데이터들만 조회하는 코드를 작성해주세요.
"""~ Codes from 1-1"""
concat_df **=** **>** HERE YOUR CODE!!
concat_df **=** concat_df**.**reset_index(drop**=True**) *# inplace 쓰셔도 됩니다~*concat_df
검색 힌트 : pandas indexing, pandas fency indexing
import pandas as pd
from glob import glob
import warnings
warnings.filterwarnings('ignore')# 경고 메세지를 출력 안 하는 코드입니다.
base_dir = "" # 알집 풀어주신 곳 폴더를 넣으시면 됩니다.
file_lst = glob(base_dir + "*.csv")
df = pd.DataFrame()
for i in file_lst:
data = pd.read_csv(i)
df = pd.concat([df,data])
df = df.reset_index(drop = True)
df_cafe = df[df['상권업종중분류명'] == '커피점/카페']
df_cafe
1-3 특정한 카페만 조회하기
1-2에서 만든 Data Frame에서 우리는 전국 카페의 정보를 얻어냈습니다. 이제 이중에서 마포구
에 위치한 스타벅스
의 데이터만 조회하는 코드를 작성해주세요.
- 가만 데이터를 살펴보니 상호명이 순수하게
스타벅스
인 곳만 있는 게 아니라스타벅스 ~~점
처럼 지점 이름이 포함된 곳도 있습니다. 이런 스타벅스도 조회하려면 어떻게 해야할까요?
"""~ Codes from 1-2"""
concat_df **=** **>** HERE YOUR CODE!!
concat_df **=** concat_df**.**reset_index(drop**=True**) *# inplace 쓰셔도 됩니다~*concat_df
검색 힌트 : pandas indexing, pandas fency indexing, python str contains, python str startswith
import pandas as pd
from glob import glob
import warnings
warnings.filterwarnings('ignore')# 경고 메세지를 출력 안 하는 코드입니다.
base_dir = "" # 알집 풀어주신 곳 폴더를 넣으시면 됩니다.
file_lst = glob(base_dir + "*.csv")
df = pd.DataFrame()
for i in file_lst:
data = pd.read_csv(i)
df = pd.concat([df,data])
df = df.reset_index(drop = True)
df_cafe = df[df['상권업종중분류명'] == '커피점/카페']
df_mp = df_cafe[df_cafe['시군구명'] == '마포구']
df_sb = df_mp[df_mp['상호명'].str.startswith('스타벅스') == True]
df_sb
1-4 프렌차이즈 카페 조회해보기
마포구에 있는 스타벅스의 데이터를 모두 조회해봤습니다. 이제 스타벅스 뿐만 아니라, 투썸
, 이디야
, 할리스
, 메가커피
, 커피빈
에 대한 정보도 한번 가져와봅시다!위에서 명시된 프렌차이즈 카페(스타벅스 포함)들의 마포구 내의 점포 수와, 입점 비율 정보가 담겨있는 Data Frame을 생성하는 코드를 작성해주세요.
- 각 카페의 상호명은 아래
cafe_lst
변수의 이름이 포함되어 있는 것을 기준으로 합니다.- ex) 스타벅스홍대T동점 -> O , Starbucks홍대T동점 -> X
"""from 1-1 code's Data Frame!!"""
mapo_cafes **=** ori_df[(ori_df['시군구명'] **==** "마포구") **&** (ori_df['상권업종중분류명'] **==** "커피점/카페")]**.**reset_index(drop**=True**)
tot_cafes **=** len(mapo_cafes)
cafe_lst **=** ['스타벅스', "투썸플레이스", "이디야", "할리스", "메가커피", "커피빈"]
nums **=** []
ratio **=** []
**>** HERE YOUR CODE!!
mapo_cafe_info
검색 힌트 : pandas indexing, pandas fency indexing, python str contains, python str startswith, python f-string, python string format
ori_df = df
mapo_cafes = ori_df[(ori_df['시군구명'] == "마포구") & (ori_df['상권업종중분류명'] == "커피점/카페")].reset_index(drop=True)
tot_cafes = len(mapo_cafes)
cafe_lst = ['스타벅스', "투썸플레이스", "이디야", "할리스", "메가커피", "커피빈"]
nums = []
ratio = []
sums = 0
for cafe in cafe_lst:
df_tmp = mapo_cafes[mapo_cafes['상호명'].str.startswith(cafe) == True]
nums.append(len(df_tmp))
for i in range(0,6):
ratio.append(nums[i]/len(df_mp))
mapo_cafe_info = pd.DataFrame({
'프랜차이즈' : cafe_lst,
'점포수' : nums,
'입점 비율' : ratio
})
pd.options.display.float_format = '{:.2%}'.format
mapo_cafe_info
1-5 시각화하기
데이터프레임으로만 나타내면 읽을 수는 있겠지만, 너무 오래 보면 눈이 피곤할 것같습니다. 1-4에서 얻어낸 입점 비율을 간단하게 시각화하는 코드를 작성해주세요.단, 입점비율이 가장 높은 프렌차이즈는 강조해서 표시해주세요.
- 본 문제는 여러분이 배웠던 시각화 스킬 중에 가장 적절하다고 판단되는 방법을 사용해주세요.
bar plot
도 좋고,pie chart
도 좋습니다 :)
**import** matplotlib.pyplot **as** plt
**import** seaborn **as** sns
**>** HERE YOUR FREE CODE!!
plt**.**show()
검색 힌트 : matplotlib bar plot, matplotlib pie chart, matplotlib color
import matplotlib.pyplot as plt
import seaborn as sns
from matplotlib import rc
rc('font', family='AppleGothic')
plt.rcParams['axes.unicode_minus'] = False
fig, ax = plt.subplots()
ax.bar(cafe_lst, ratio)
ax.patches[0].set_color('red')
ax.set_xlabel('프랜차이즈',labelpad = 12, fontsize = 14)
ax.set_ylabel('입점 비율',labelpad = 12, fontsize = 14)
1-7 인사이트
우리는 간단한 데이터로, 간단한 EDA를 진행해봤습니다. 여러분은 어떤 인사이트를 얻어냈나요? 우리는 마포구의 카페 정보만 알아봤지만, 여러분이 살고 계시는 지역의 카페, 카페가 아니더라도 음식점의 입점 비율을 확인해보든가도 가능할 것같습니다.
여러분이 알고 싶은 정보를 뽑아내기 위해, 지역이나 업종을 달리해서 알아내보세요! 이런 걸 시도해볼 수 있을 거 같아요 :)
- 서울시에서 스타벅스가 가장 많은 구는 어디인가요?
- 서울시를 제외한 지역에서 가장 인기가 많은 프렌차이즈는 어디일까요?
- 본인이 사는 혹은 고향의 상권 정보도 위의 과정으로 한번 알아볼까요?
2. 마케팅 데이터 EDA 해보기
2-1 데이터 읽어오기
이곳에서 데이터를 받아 데이터를 읽어오세요. Train Data만 읽어오시면 됩니다.
**import** pandas **as** pd
**>** HERE YOUR CODE!!
df
import pandas as pd
import missingno as msno
df = pd.read_csv('train.csv')
2-2 결측치 확인하기
❗잠깐❗!pip insatll missingno
로 missingno
를 설치해주세요!
불러온 데이터의 Column 별 결측치(Missing Value) 정보를 출력하는 코드와missingno
를 활용하여 결측치를 시각화해보세요.
**import** pandas **as** pd
**import** missingno **as** msno
**>** Codes that print Missing Values
**>** Codes that visualize Missing Values **with** `missingno`
검색 힌트 : python missingno, missingno matrix, missingno bar, pandas isnull()
import pandas as pd
import missingno as msno
train = pd.read_csv('test.csv')
train.isnull().sum()
msno.matrix(df = train.iloc[:,:])
msno.bar(df = train.iloc[:,:])
2-3 Distribution Check
2-1에서 불러온 Data Frame의 Column별 분포를 확인할 수 있는 코드를 작성해주세요.
- 단, 예시 처럼 한 눈에 전체 Column의 분포를 확인할 수 있게 시각화해보세요.
- 데이터의 분포를 확인하는 것만으로도, 이상치를 어떻게 대처해야할지 플랜을 세울 수 있습니다 :)
**import** pandas **as** pd
**import** matploblib.pyplot **as** plt
**import** seaborn **as** sns
**>** HERE YOUR CODE!!
검색 힌트 : seaborn countplot, seaborn distplot seaborn kdeplot, matplotlib for문 여러개 그리기, plt.subplots_adjust, plt.style("ggplot")
train_sp = train['Age']
#plt.subplots(constrained_layout=True)
for i in range(10):
if i != 2:
plt.subplot(3,4,i+1)
sns.set(rc = {'figure.figsize':(20,20)})
sns.countplot(x=train.columns[i], data = train)
plt.xticks(fontsize = 7, rotation=40)
#plt.subplots_adjust(left=0.125, bottom=0.1, right=0.9, top=0.9, wspace=1, hspace=2)
else:
plt.subplot(3,4,i+1)
sns.set(rc = {'figure.figsize':(20,20)})
sns.distplot(train_sp, color = 'r')
#sns.kdeplot(train_sp, fill = True)
plt.xticks(fontsize = 7, rotation=40)
#plt.subplots_adjust(left=0.125, bottom=0.1, right=0.9, top=0.9, wspace=1, hspace=2)
plt.tight_layout()
2-4 Correlation Check
변수간 상관관계가 무엇일까요? 상관관계가 무엇인지 여러분만의 답을 적어주세요.추가적으로, 2-1에서 불러온 Data Frame의 Column 간 상관관계
를 시각화하여 확인할 수 있는 코드를 작성하고, 이를 해석해보세요.
**import** pandas **as** pd
**import** matploblib.pyplot **as** plt
**import** seaborn **as** sns
**>** HERE YOUR CODE!!
검색 힌트 : seaborn heatmap, seaborn heatmap parameters, seaborn mask
for i in range(10):
if i == 3:
continue
else:
train[train.columns[i]] = train[train.columns[i]].astype('category').cat.codes
corr_matrix = train.corr()
mask = np.triu(corr_matrix)
# Create a heatmap
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm', mask = mask)
# Show plot
plt.show()
상관계수는 변수들 간의 관계를 알아볼 때 유용한 개념입니다. 특정 데이터에 대한 상관관계를 볼 수 있습니다. 상관계수는 -1부터 1사이로 구성되고, 0.3부터 0.7 사이면 뚜렷한 양적 선형관계, 0.7 이상이면 강한 양적 상관관계라 할 수 있습니다.
'인공지능 > 인공지능 기초 개념' 카테고리의 다른 글
(2)-2 데이터 시각화 실습 (0) | 2024.03.15 |
---|---|
(1)-2 Pandas 실습 (1) | 2024.03.15 |
(4) EDA 필사 (0) | 2024.03.15 |
(3)EDA (0) | 2024.03.15 |
(2) 데이터 시각화 (1) | 2024.03.14 |