apply(func, axis = 0): 시리즈와, 판다스에서 적용이 어려운 함수를 적용시켜줌
pandas 문자열 함수
- str.contains(r' 'cat|dog') # r 정규표현식, 고양이나 강아지 포함하는 행 반환, 없을 시 NaN
- str.split('-')[index] # -하이폰 기준 구분
- str.extract('(cat)') #괄호 두 번 사용 없을 시 NaN반환
pandas 시리즈를 숫자형 자료형 변환
- pd.to_numeric(arg, errors='', downcast=None) #arg: 스칼라 혹은 1차원, erros(raise, coerce, ignore)
- ex) df1.apply(pd.to_numeric, errors = 'coerce') #데이터프레임에 apply 적용
소상공인상권정보 데이터로 국내에 있는 음식점 현황 및 트렌드를 파악해봅시다.¶
[데이터 링크] https://www.data.go.kr/data/15083033/fileData.do
- 한식 / 일식 / 중식 음식점 비율 찾기
- 각 지역별 음식점 비율 계산해보기
- 한식 음식점들이 많이 사용하는 단어 찾아보기
In [2]:
# 텍스트 분석에 필요한 라이브러리 설치하기
!pip install pecab wordcloud
In [3]:
# 필요한 라이브러리를 불러옵니다.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from glob import glob
from tqdm.auto import tqdm #progress bar
In [4]:
# 데이터들을 불러와봅시다.
#함수의 파라미터로 파일 이름 규칙을 주면 규칙에 해당하는 파일 이름을 모두 가져오는 함수
file_list = glob('./data/상가(상권)정보_20230630/*csv')
data = pd.DataFrame()
for file in tqdm(file_list):
temp = pd.read_csv(file, encoding = 'utf-8')
data = pd.concat([data, temp ], axis = 0)
#pd.read_csv('./data/상가(상권)정보_20230630/소상공인시장진흥공단_상가(상권)정보_서울_202306.csv')
In [5]:
data.columns
Out[5]:
Index(['상가업소번호', '상호명', '지점명', '상권업종대분류코드', '상권업종대분류명', '상권업종중분류코드',
'상권업종중분류명', '상권업종소분류코드', '상권업종소분류명', '표준산업분류코드', '표준산업분류명', '시도코드',
'시도명', '시군구코드', '시군구명', '행정동코드', '행정동명', '법정동코드', '법정동명', '지번코드',
'대지구분코드', '대지구분명', '지번본번지', '지번부번지', '지번주소', '도로명코드', '도로명', '건물본번지',
'건물부번지', '건물관리번호', '건물명', '도로명주소', '구우편번호', '신우편번호', '동정보', '층정보',
'호정보', '경도', '위도'],
dtype='object')
In [6]:
#사용할 컬럼을 찾기 위해 데이터 일부만 사용
df = data[:10000]
df = data.sample(n=10000, random_state=42)
In [7]:
df.iloc[:, 1:11]
df.iloc[:, 11:15]
Out[7]:
시도코드 | 시도명 | 시군구코드 | 시군구명 | |
---|---|---|---|---|
101226 | 48 | 경상남도 | 48890 | 합천군 |
41200 | 29 | 광주광역시 | 29140 | 서구 |
146236 | 41 | 경기도 | 41171 | 안양시 만안구 |
105044 | 27 | 대구광역시 | 27290 | 달서구 |
24645 | 44 | 충청남도 | 44131 | 천안시 동남구 |
... | ... | ... | ... | ... |
33418 | 46 | 전라남도 | 46130 | 여수시 |
435394 | 11 | 서울특별시 | 11530 | 구로구 |
52418 | 44 | 충청남도 | 44131 | 천안시 동남구 |
221968 | 41 | 경기도 | 41271 | 안산시 상록구 |
39987 | 48 | 경상남도 | 48740 | 창녕군 |
10000 rows × 4 columns
In [8]:
data1 = data[['상호명','상권업종대분류명','상권업종중분류명', '시도명']]
data1
Out[8]:
상호명 | 상권업종대분류명 | 상권업종중분류명 | 시도명 | |
---|---|---|---|---|
0 | 금강산노래광장 | 음식 | 주점 | 강원특별자치도 |
1 | 에이치속눈썹수강아카데미 | 수리·개인 | 이용·미용 | 강원특별자치도 |
2 | 엔젤 | 음식 | 한식 | 강원특별자치도 |
3 | 누베헤어 | 수리·개인 | 이용·미용 | 강원특별자치도 |
4 | 공차 | 음식 | 비알코올 | 강원특별자치도 |
... | ... | ... | ... | ... |
81718 | 꽃개 | 소매 | 애완동물·용품 소매 | 충청북도 |
81719 | 만두를빚다 | 음식 | 기타 간이 | 충청북도 |
81720 | 골목식당 | 음식 | 한식 | 충청북도 |
81721 | 씨유옥천청산점 | 소매 | 종합 소매 | 충청북도 |
81722 | 카페지아니 | 음식 | 비알코올 | 충청북도 |
2417759 rows × 4 columns
In [9]:
import gc #필요없는 메모리를 다시 가져옴(메모리 청소)
gc.collect()
Out[9]:
19
In [10]:
#len(data[data['상권업종중분류명'].str.contains('한식', regex=False)]) / len(data)
한식 = data1.loc[data['상권업종중분류명'] == '한식']
중식 = data1.loc[data['상권업종중분류명'] == '중식']
일식 = data1.loc[data['상권업종중분류명'] == '일식']
음식점 = data1.loc[data['상권업종대분류명'] == '음식']
print("한식 비율 : %.2f%%" % (len(한식) / len(data) * 100))
print("중식 비율 : %.2f%%" % (len(중식) / len(data) * 100))
print("일식 비율 : %.2f%%" % (len(일식) / len(data) * 100))
print("음식점 비율 : %.2f%%" % (len(음식점) / len(data) * 100))
한식 비율 : 13.35%
중식 비율 : 1.23%
일식 비율 : 0.86%
음식점 비율 : 32.69%
In [11]:
시도명 = data['시도명'].unique()
for 시도 in 시도명:
sido = data.loc[data['시도명'] == 시도]
sido_hansik = sido.loc[sido['상권업종중분류명'] == '한식']
print(f'{시도} 한식 비율: {(len(sido_hansik)/len(sido)*100):.2f}%')
강원특별자치도 한식 비율: 18.13%
경기도 한식 비율: 12.02%
경상남도 한식 비율: 16.86%
경상북도 한식 비율: 17.25%
광주광역시 한식 비율: 11.45%
대구광역시 한식 비율: 13.23%
대전광역시 한식 비율: 13.12%
부산광역시 한식 비율: 13.77%
서울특별시 한식 비율: 9.66%
세종특별자치시 한식 비율: 13.82%
울산광역시 한식 비율: 15.91%
인천광역시 한식 비율: 13.12%
전라남도 한식 비율: 16.07%
전라북도 한식 비율: 13.76%
제주특별자치도 한식 비율: 14.78%
충청남도 한식 비율: 16.08%
충청북도 한식 비율: 16.42%
In [12]:
data.iloc[:,10:19 ]
Out[12]:
표준산업분류명 | 시도코드 | 시도명 | 시군구코드 | 시군구명 | 행정동코드 | 행정동명 | 법정동코드 | 법정동명 | |
---|---|---|---|---|---|---|---|---|---|
0 | 일반 유흥 주점업 | 51 | 강원특별자치도 | 51170 | 동해시 | 51170520 | 송정동 | 5117010300 | 송정동 |
1 | 피부 미용업 | 51 | 강원특별자치도 | 51110 | 춘천시 | 51110390 | 동내면 | 5111039021 | 동내면 |
2 | 기타 일반 및 생활 숙박시설 운영업 | 51 | 강원특별자치도 | 51770 | 정선군 | 51770320 | 남면 | 5177032022 | 남면 |
3 | 두발 미용업 | 51 | 강원특별자치도 | 51110 | 춘천시 | 51110675 | 강남동 | 5111012500 | 삼천동 |
4 | 기타 비알코올 음료점업 | 51 | 강원특별자치도 | 51130 | 원주시 | 51130330 | 지정면 | 5113033023 | 지정면 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
81718 | 애완용 동물 및 관련용품 소매업 | 43 | 충청북도 | 43770 | 음성군 | 43770330 | 맹동면 | 4377033021 | 맹동면 |
81719 | 한식 일반 음식점업 | 43 | 충청북도 | 43111 | 청주시 상당구 | 43111525 | 중앙동 | 4311110300 | 북문로2가 |
81720 | 한식 일반 음식점업 | 43 | 충청북도 | 43750 | 진천군 | 43750250 | 진천읍 | 4375025024 | 진천읍 |
81721 | 체인화 편의점 | 43 | 충청북도 | 43730 | 옥천군 | 43730350 | 청산면 | 4373035021 | 청산면 |
81722 | 커피 전문점 | 43 | 충청북도 | 43745 | 증평군 | 43745250 | 증평읍 | 4374525028 | 증평읍 |
2417759 rows × 9 columns
In [13]:
data.시군구명.unique
Out[13]:
<bound method Series.unique of 0 동해시
1 춘천시
2 정선군
3 춘천시
4 원주시
...
81718 음성군
81719 청주시 상당구
81720 진천군
81721 옥천군
81722 증평군
Name: 시군구명, Length: 2417759, dtype: object>
In [14]:
시군구명 = data.시군구명.unique()
비율 = []
지역구명 = []
for 시군구 in 시군구명:
sigun = data.loc[data['시군구명'] == 시군구]
지역구명.append(시군구)
sigun_alchol = sigun.loc[sigun['상권업종중분류명'] == '주점']
비율.append(len(sigun_alchol)/len(sigun)*100)
#비율.append(pd.Series(len(sigun_alchol)/len(sigun)*100), ignore_index = True)
#print(비율.append(pd.Series(len(sigun_alchol)/len(sigun)*100), ignore_index = True))
#print(f'{시군구} 주점 비율: {(len(sigun_alchol)/len(sigun)*100):.2f}%')
In [15]:
지역구명1 = pd.DataFrame(지역구명)
비율1 = pd.DataFrame(비율)
dt =pd.concat([지역구명1, 비율1], axis = 1)
dt.columns =['지역구명', '비율']
dt.sort_values(by = '비율', ascending=False)
Out[15]:
지역구명 | 비율 | |
---|---|---|
63 | 창원시 마산합포구 | 8.781087 |
168 | 광양시 | 8.552545 |
163 | 여수시 | 8.389475 |
70 | 통영시 | 8.299959 |
159 | 목포시 | 8.178700 |
... | ... | ... |
190 | 진안군 | 1.528777 |
171 | 장성군 | 1.473684 |
169 | 담양군 | 1.370432 |
113 | 군위군 | 1.248885 |
58 | 과천시 | 0.808489 |
228 rows × 2 columns
한식 음식점들이 많이 사용하는 단어 찾기¶
- 빈도분석(word frequency analysis)
- corpus 정의(수집) -> text cleaning(불용어 제거) -> tokenization(분석 단위 결정) -> 모델링, 시각화
In [16]:
corpus = data.loc[data['상권업종중분류명'] == '한식', '상호명']
corpus
Out[16]:
2 엔젤
10 태능갈비
12 박차닭갈비
14 남경막국수
27 먹자골
...
81700 다정정육식당
81710 충남순대
81711 장어92번지
81717 일등식당
81720 골목식당
Name: 상호명, Length: 322709, dtype: object
In [20]:
# text cleaning -> 정규표현식
# tokenization -> 형태소 분석
from pecab import PeCab
pecab = PeCab()
pecab.morphs('아버지가방에들어가신다') # 주어진 문장을 형태소 단위로 구분
pecab.nouns('아버지가방에들어가신다') # 주어진 문장에서 명사만 추출
pecab.pos('아버지가방에들어가신다') # 품사 분석
Out[20]:
[('아버지', 'NNG'),
('가', 'JKS'),
('방', 'NNG'),
('에', 'JKB'),
('들어가', 'VV'),
('신다', 'EP+EC')]
In [21]:
tokenized_corpus = []
for doc in tqdm(corpus):
tokenized_corpus.append(pecab.morphs(doc))
0%| | 0/322709 [00:00<?, ?it/s]
In [23]:
#모델링
from collections import Counter
total_tokens = []
for tokens in tokenized_corpus:
total_tokens = total_tokens + tokens # concatenation
counter = Counter(total_tokens) # 닭 100 갈비 350 etc
counter.most_common(30) # 빈도가 높은 30개 출력
Out[23]:
[('식당', 32712),
('네', 14171),
('이', 12901),
('집', 12727),
('가', 9457),
('한', 8696),
('점', 7228),
('족발', 7024),
('당', 6404),
('칼국수', 6333),
('갈비', 5983),
('찜', 5969),
('횟집', 5370),
('푸드', 5214),
('삼', 4952),
('곱창', 4833),
('국밥', 4758),
('돈', 4289),
('밥', 4200),
('고기', 4148),
('돼지', 3898),
('는', 3807),
('닭', 3792),
('의', 3629),
('국수', 3608),
('감자탕', 3501),
('밥상', 3497),
('&', 3481),
('구이', 3435),
('해장국', 3435)]
In [24]:
# 폰트 설정 방법
import matplotlib
import matplotlib.font_manager as fm
#plt.rc('font',family='AppleGothic')
font_location = 'C:/Windows/Fonts/Malgun.ttf'
# # font_location = 'C:/Windows/Fonts/Malgun.ttf' # For Windows
font_name = fm.FontProperties(fname=font_location).get_name()
print(font_name)
matplotlib.rc('font', family=font_name)
Malgun Gothic
In [29]:
from wordcloud import WordCloud
wc = WordCloud(font_path = font_location, #사용하는 글꼴 경로
max_words=100, #최대 몇개의 단어를 사용할 지(빈도순)
width=1920, #가로 길이
height=1080, #세로 길이
random_state=42, #for reproducing
background_color='white', #배경색, 기본 검정
colormap='viridis', #칼러 팔레트
).generate_from_frequencies(counter)
plt.axis('off') # 축을 출력하지 않음
plt.savefig('./wordcloud.png')
plt.imshow(wc)
Out[29]:
<matplotlib.image.AxesImage at 0x24c8f1c0450>
타이타닉 데이터로 생존자 예측을 위한 EDA¶
In [40]:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
# train.csv 파일 불러오기
titanic = pd.read_csv('./data/titanic/train.csv')
titanic
Out[40]:
PassengerId | Survived | Pclass | Name | Sex | Age | SibSp | Parch | Ticket | Fare | Cabin | Embarked | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 0 | 3 | Braund, Mr. Owen Harris | male | 22.0 | 1 | 0 | A/5 21171 | 7.2500 | NaN | S |
1 | 2 | 1 | 1 | Cumings, Mrs. John Bradley (Florence Briggs Th... | female | 38.0 | 1 | 0 | PC 17599 | 71.2833 | C85 | C |
2 | 3 | 1 | 3 | Heikkinen, Miss. Laina | female | 26.0 | 0 | 0 | STON/O2. 3101282 | 7.9250 | NaN | S |
3 | 4 | 1 | 1 | Futrelle, Mrs. Jacques Heath (Lily May Peel) | female | 35.0 | 1 | 0 | 113803 | 53.1000 | C123 | S |
4 | 5 | 0 | 3 | Allen, Mr. William Henry | male | 35.0 | 0 | 0 | 373450 | 8.0500 | NaN | S |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
886 | 887 | 0 | 2 | Montvila, Rev. Juozas | male | 27.0 | 0 | 0 | 211536 | 13.0000 | NaN | S |
887 | 888 | 1 | 1 | Graham, Miss. Margaret Edith | female | 19.0 | 0 | 0 | 112053 | 30.0000 | B42 | S |
888 | 889 | 0 | 3 | Johnston, Miss. Catherine Helen "Carrie" | female | NaN | 1 | 2 | W./C. 6607 | 23.4500 | NaN | S |
889 | 890 | 1 | 1 | Behr, Mr. Karl Howell | male | 26.0 | 0 | 0 | 111369 | 30.0000 | C148 | C |
890 | 891 | 0 | 3 | Dooley, Mr. Patrick | male | 32.0 | 0 | 0 | 370376 | 7.7500 | NaN | Q |
891 rows × 12 columns
In [41]:
# Q1. 데이터에서 남녀 성비를 구해주세요. 577 : 314
titanic['Sex'].value_counts()
# Q2. 데이터에서 여성 승객들의 평균 fare를 구해주세요.
titanic[titanic['Sex'] == 'female']['Fare'].mean()
## Q3. 이름에 Mr.가 포함된 사람이 몇명인지 구해주세요.
# regex = True -> 글자 따로, 숫자 따로, 특수문자 따로 매칭.
# regex = False -> exact matching.
titanic[titanic.Name.str.contains('Mr.', regex=False)]
Out[41]:
PassengerId | Survived | Pclass | Name | Sex | Age | SibSp | Parch | Ticket | Fare | Cabin | Embarked | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 0 | 3 | Braund, Mr. Owen Harris | male | 22.0 | 1 | 0 | A/5 21171 | 7.2500 | NaN | S |
4 | 5 | 0 | 3 | Allen, Mr. William Henry | male | 35.0 | 0 | 0 | 373450 | 8.0500 | NaN | S |
5 | 6 | 0 | 3 | Moran, Mr. James | male | NaN | 0 | 0 | 330877 | 8.4583 | NaN | Q |
6 | 7 | 0 | 1 | McCarthy, Mr. Timothy J | male | 54.0 | 0 | 0 | 17463 | 51.8625 | E46 | S |
12 | 13 | 0 | 3 | Saundercock, Mr. William Henry | male | 20.0 | 0 | 0 | A/5. 2151 | 8.0500 | NaN | S |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
881 | 882 | 0 | 3 | Markun, Mr. Johann | male | 33.0 | 0 | 0 | 349257 | 7.8958 | NaN | S |
883 | 884 | 0 | 2 | Banfield, Mr. Frederick James | male | 28.0 | 0 | 0 | C.A./SOTON 34068 | 10.5000 | NaN | S |
884 | 885 | 0 | 3 | Sutehall, Mr. Henry Jr | male | 25.0 | 0 | 0 | SOTON/OQ 392076 | 7.0500 | NaN | S |
889 | 890 | 1 | 1 | Behr, Mr. Karl Howell | male | 26.0 | 0 | 0 | 111369 | 30.0000 | C148 | C |
890 | 891 | 0 | 3 | Dooley, Mr. Patrick | male | 32.0 | 0 | 0 | 370376 | 7.7500 | NaN | Q |
517 rows × 12 columns
In [42]:
# 1. 결측치를 하나라도 포함하고 있는 데이터가 몇개나 있는지 확인.
titanic.isnull().sum()
#titanic.isnull().any(axis =0)
# 2. dtype이 object인 col이 있는지
titanic.columns[titanic.dtypes == 'object']
# 3. target value(에측 대상)의 분포가 어떻게 되는지
titanic.Survived.value_counts()
sns.countplot(data = titanic, x = 'Survived')
Out[42]:
<Axes: xlabel='Survived', ylabel='count'>
In [43]:
# 4. correlation matrix heatmap
corr = titanic.corr()
sns.heatmap(data = corr, annot=True, fmt='.3f', cmap = 'Blues')
C:\Users\user\AppData\Local\Temp\ipykernel_4216\282101803.py:2: FutureWarning: The default value of numeric_only in DataFrame.corr is deprecated. In a future version, it will default to False. Select only valid columns or specify the value of numeric_only to silence this warning.
corr = titanic.corr()
Out[43]:
<Axes: >
2.5. Pivot Table을 이용하여 데이터 살펴보기¶
- pivot table이란 기존 테이블 구조를 특정 column을 기준으로 재구조화한 테이블을 말합니다.
- 특정 column을 기준으로 pivot하기 때문에, 어떤 column에 어떤 연산을 하느냐에 따라서 만들어지는 결과가 바뀝니다.
- 주로 어떤 column을 기준으로 데이터를 해석하고 싶을 때 사용합니다.
In [44]:
# 성별을 기준으로 생존률 파악 --> Mean vs Sum
titanic.pivot_table(titanic, 'Sex', 'Survived', aggfunc = sum)
C:\Users\user\AppData\Local\Temp\ipykernel_4216\2800019717.py:2: FutureWarning: The operation <built-in function sum> failed on a column. If any error is raised, this will raise an exception in a future version of pandas. Drop these columns to avoid this warning.
titanic.pivot_table(titanic, 'Sex', 'Survived', aggfunc = sum)
Out[44]:
Age | Fare | Parch | PassengerId | Pclass | SibSp | |||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
Survived | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 |
Sex | ||||||||||||
female | 1603.0 | 5683.00 | 1864.9752 | 12101.6876 | 84 | 120 | 35223 | 100120 | 231 | 447 | 98 | 120 |
male | 11382.5 | 2536.67 | 10277.7447 | 4449.5418 | 97 | 39 | 210189 | 51854 | 1159 | 220 | 206 | 42 |
In [45]:
# 사회 계급을 기준으로 생존률 파악
type(titanic['Name'])
Out[45]:
pandas.core.series.Series
In [46]:
#결측치에 대한 eda, cabin col에 대한 분석
# cabin -> is_cabin / Age -> Age mean 대체 / Embarked -> drop
#cabin = titanic.loc[titanic.Cabin.notnull()]
#cabin = titanic.loc[-titanic.Cabin.isnull()]
#cabin_nan = cabin = titanic.loc[titanic.Cabin.isnull()]
#display(cabin_nan.describe()) #display on 주피터노트북
#cabin_nan.describe()
titanic['is_cabin'] = -titanic.Cabin.isnull() * 1
titanic.Age = titanic.Age.fillna(titanic.Age.mean())
titanic = titanic.drop(columns=['PassengerId', 'Name', 'Ticket', 'Cabin'])
titanic = titanic.dropna()
titanic
Out[46]:
Survived | Pclass | Sex | Age | SibSp | Parch | Fare | Embarked | is_cabin | |
---|---|---|---|---|---|---|---|---|---|
0 | 0 | 3 | male | 22.000000 | 1 | 0 | 7.2500 | S | 0 |
1 | 1 | 1 | female | 38.000000 | 1 | 0 | 71.2833 | C | 1 |
2 | 1 | 3 | female | 26.000000 | 0 | 0 | 7.9250 | S | 0 |
3 | 1 | 1 | female | 35.000000 | 1 | 0 | 53.1000 | S | 1 |
4 | 0 | 3 | male | 35.000000 | 0 | 0 | 8.0500 | S | 0 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
886 | 0 | 2 | male | 27.000000 | 0 | 0 | 13.0000 | S | 0 |
887 | 1 | 1 | female | 19.000000 | 0 | 0 | 30.0000 | S | 1 |
888 | 0 | 3 | female | 29.699118 | 1 | 2 | 23.4500 | S | 0 |
889 | 1 | 1 | male | 26.000000 | 0 | 0 | 30.0000 | C | 1 |
890 | 0 | 3 | male | 32.000000 | 0 | 0 | 7.7500 | Q | 0 |
889 rows × 9 columns
In [55]:
# dtype이 object인 col에 대한 전처리 : Ordinal Encoding(숫자 변환)
titanic.Sex = pd.factorize(titanic.Sex)[0]
titanic.Embarked = pd.factorize(titanic.Embarked)[0]
In [60]:
#training
from sklearn.linear_model import LogisticRegression
X = titanic.drop(columns=['Survived']) # define feature
y = titanic.Survived
clf = LogisticRegression() # define model
clf.fit(X,y) # fitting(training)
clf.score(X,y) # get score
C:\Users\user\anaconda3\Lib\site-packages\sklearn\linear_model\_logistic.py:458: ConvergenceWarning: lbfgs failed to converge (status=1):
STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.
Increase the number of iterations (max_iter) or scale the data as shown in:
https://scikit-learn.org/stable/modules/preprocessing.html
Please also refer to the documentation for alternative solver options:
https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression
n_iter_i = _check_optimize_result(
Out[60]:
0.8042744656917885
반응형
'국비지원교육 > 교육일지' 카테고리의 다른 글
7주차 교육일지: 머신러닝 (0) | 2023.09.20 |
---|---|
6주차 교육일지: 코딩 테스트 주요 개념, Git 설정, 마크다운 (0) | 2023.09.11 |
4주차 교육일지: SQL / Numpy, Pandas (0) | 2023.08.12 |
3주차 교육일지: 파이썬 기초, 선형대수, 웹크롤링 (0) | 2023.07.31 |
2주차 교육일지: 파이썬 기초, 선형대수, 웹 크롤링 (0) | 2023.07.24 |