728x90
오늘코드 - 서울시 코로나19 사이트 Pandas 단 한 줄로 크롤링 하기
영상을 실습한 코드 입니다.
https://www.youtube.com/watch?v=irHfF1ZcuY0
확진일¶
In [118]:
# 날짜별 확진일 빈도 내림차순
df["확진일"].value_counts()
Out[118]:
In [119]:
df["확진일"].head(1)
Out[119]:
In [120]:
# 데이터 타입을 변경해서 날짜로 변환
# 연도 추가하고 , 을 -로 대체
df["확진일자"] = pd.to_datetime("2020-"+df["확진일"].str.replace(".","-"))
df[["확진일","확진일자"]].head()
Out[120]:
In [121]:
# 월만 추출
df["월"] = df["확진일자"].dt.month
df[["확진일","확진일자", "월"]].tail()
Out[121]:
In [122]:
# 해당연도의 몇번째 주인지 추출
df["주"] = df["확진일자"].dt.week
df[["확진일","확진일자", "월", "주"]].head()
Out[122]:
선그래프 그리기¶
In [123]:
# 확진일자로 선그래프 그리기
df["확진일자"].value_counts().sort_index().plot(figsize=(15, 4))
plt.axhline(30, color="red", linestyle=":")
Out[123]:
선그래프에 값 표시하기¶
In [124]:
# value_counts()
# 시리즈의 값이 정수, 문자열, 카테고리 값인 경우에 각각의 값이 나온 횟수를 셀 수 있음
# sort_index()
# 인덱스를 기준으로 값을 정렬
# iloc : 순서를 나타내는 정수 기반의 2차원 인덱싱
# loc : 라벨값 기반의 2차원 인덱싱
# 일자별 확진자수를 선그래프로 그림
# 연도는 모두 2020년이기 때문에 월일만 표기되도록 슬라이싱을 사용해 "월일"컬럼을 만든다
df["월일"] = df["확진일자"].astype(str).map(lambda x : x[-5:])
day_count = df["월일"].value_counts().sort_index()
day_count.iloc[2]
Out[124]:
In [125]:
day_count.head(40)
Out[125]:
In [126]:
for i in range(len(day_count)):
case_count = day_count.iloc[i]
if case_count>20:
print(i, case_count)
In [127]:
g = day_count.plot(figsize = (15,4))
for i in range(len(day_count)):
case_count = day_count.iloc[i]
if case_count>20:
g.text(x=i,y=case_count, s=case_count)
확진자가 가장 많이 나온 날¶
In [128]:
day_count
Out[128]:
In [129]:
# describe를 통해 일자별 확진자 수를 describe를 통해 요약
day_count.describe()
Out[129]:
In [130]:
# 확진자가 가장 많았던 날
day_count[day_count == day_count.max()]
Out[130]:
In [131]:
# 확진자가 가장 많았던 날의 발생이력
df[df["월일"] == "03-10"].head()
Out[131]:
막대그래프 그리기¶
In [132]:
# 선 그래프를 막대그래프로 표현
day_count.plot.bar(figsize = (30,4))
Out[132]:
최근 데이터만 슬라이싱으로 나눠 그리기¶
In [133]:
# 슬라이싱을 통해 최근 데이터만 그립니다.
# 데이터 프레임 정의
g = day_count[-50:].plot.bar(figsize=(15, 4))
# 슬라이싱
g.axhline(day_count.median(), linestyle=":", color="red")
# 텍스트 입력
for i in range(50):
case_count = day_count[-50:].iloc[i]
if case_count > 10:
g.text(x=i-0.5, y=case_count, s=case_count)
월별 확진자 수 그리기¶
In [134]:
# 월별 확진자 수에 대한 빈도수를 구해서 시각화
month_case = df["월"].value_counts().sort_index()
g = month_case.plot.bar(rot=0)
for i in range(len(month_case)):
g.text(x=i-0.2, y=month_case.iloc[i]+10, s=month_case.iloc[i])
주단위 확진자수 그리기¶
In [135]:
# 주별로 빈도수
weekly_case = df["주"].value_counts().sort_index()
weekly_case.plot(figsize=(15, 4))
Out[135]:
In [136]:
# 주 단위 빈도수 막대그래프로 그리기
weekly_case.plot.bar(figsize=(15, 4), rot=0)
Out[136]:
월-주 함께 그리기¶
In [137]:
# 월, 주로 그룹화 하여 빈도수를 계산
month_weekly_case = df.groupby(["월","주"])["연번"].count()
month_weekly_case
Out[137]:
In [138]:
month_weekly_case.plot.bar(figsize=(15,4), rot=30)
Out[138]:
'코딩' 카테고리의 다른 글
| DB (0) | 2020.08.19 |
|---|---|
| [데이터분석/오늘코드] 코로나19 데이터 pandas로 크롤링하기 3 (0) | 2020.08.10 |
| [데이터분석/오늘코드] 코로나19 데이터 pandas 로 크롤링하기 1 (0) | 2020.08.07 |
| [SW Expert Academy/파이썬 프로그래밍 기초(1)] 3. 기초 문법의 이해 강의 내용 정리 (0) | 2020.04.04 |