손코딩을 하면 실력이 항상 될 것 같아서 제가 요즘 즐겨보는 오늘코드님의 유튜브를 보며 따라 적어봤어요.
역시 손코딩을 통해 하니까 비슷한 것은 금방금방 외우게 되네요~
제가 빅데이터에서 중요하게 생각하는 것은 시각화인데 오늘코드님이 간단하게 정리해주셔서 좋습니다!
여러 데이터셋을 바탕으로 하는데 오늘은 통계청에소 검색하여 CSV파일을 받아 활용한 파일이네요.
총 6단계로 정리할수 있어요.
1. 데이터 불러오기
2. 데이터 멜팅
3. 데이터 전처리
4. 판다스를 이용한 시각화
5. 씨본을 이용한 시각화
6. 특정구역을 보는 시각화
아래는 수업에서 나온 코드를 손코딩 한 것입니다~
import pandas as pd
df_kosis = pd.read_csv("data/population_kosis_1997_2018.csv", encoding = "cp949") # cp949는 csv파일에서 한글을 읽을떄 유효
df_kpsis.shape # 행과 열을 파악
pd.options.display.max_columns = 793 #...으로 보여진 영역을 다 보기 위해서
"""
데이터를 어떻게 분석할지 감이 잘오지 않는다
피봇 테이블 형태가 아니라 타이디 데이터 형식으로 만들어줘야 된다.
"""
df_kosis.head() #개략적인 데이터 파악
df = df_kosis.melt(id_vars="시군구별")
df["시군구별"].unique()
df.shape
df[df["시군구별"] != "시군구별"].copy() #df에 뒤집어 씌운다.
df.shape
df.head()
"""
연도, 월, 성별로 나눌거
"""
#expand하면 데이터 프레임 형태로 보여준다
df["연도"] = df["variable"].str.split(".", expand=true)[0]
df["월"] = df["variable"].str.split(".", expand=true)[1]
df["성별"] = df["variable"].str.split(".", expand=true)[2]
df.head()
df["성별"].unique()
df["성별"].nunique() #유니크의 밸류가 몇개인지 셀때 앤유니큐 none은 세지 않는다
df["성별"] = df["성별"].fillna("전체")
df["성별"].unique()
df["성별"] = df["성뵬"].replace("1", "남자").replace("2", "여자") #할당을 해줘야 반영됨
df["성뵬"].unique()
df["성뵬"].value_counts()
df.head()
df = df.rename(columns={"variable": "기간", "value" : "출생아수"})
df.head()
"""
분석 해보자!
"""
df.info()
import numpy as np
df["출생아수"] = df["출생아수"].replace("-", np.nan) #-를 결측치로 바꿔준다
df["출생아수"] = df["출생아수"].astype(float) #결측치로바꿔줘야 평균에 영향을 끼치지 않는다.
df["출생아수"].describe()
df_all = df[(df["시군구별"] == "전국") & (df["성별" == "전체")]
df_all.head(2)
"""
시각화 해보자! 판다스를 통해
"""
df_all = df_all[["연도별","월","출생아수"]].copy()
df_all.head()
import matplotlib.pyplot as plt
plt.rc("font", family = "Malgun Gothic") #폰트가 깨지는 워닝 메시지를 지우기 위해서
df_all.set_index(["연도","월"]).plot(figsizE=(15,4)) #선그래프
df_all.set_index(["연도","월"]).bar(figsizE=(15,4)) #바그래프
df_all[-24:].set_index(["연도","월"]).plot(figsizE=(15,4)) #최근 24개월
"""
시각화를 해보자! 씨본을 통해서
"""
import seaborn as sns
plt,figure(figsize=(15,4)) #그림자가 있다.
sns.lineplot(data=df_all, x="연도", y="출생아수")
plt,figure(figsize=(15,4)) #그림자가 있다.
sns.lineplot(data=df_all, x="연도", y="출생아수", hue="월")
#월별로 추가 할려면 hue, 그라데이션으로 표현한다.
plt.figure(figsize=(15,4)) #막대가 있다.
sns.barplot(data+df_all, x="연도", y="출생아수")
#바플롯에서는 hue를 하면 보기 어렵다.
#월을 넣어주지 않았다. 그림자는 1~12까지의 값의 범위이다. == CI ==신뢰구간
#판다스와 씨본의 차이점은 연산값을 직접 해줘야 하지만, 씨본은 내부적으로 계싼해준다
#이것이 장점.
"""
지역별 출생아수 분석 해보자!
"""
df_local = df[df["시군구별"] != "전국"].copy() #전국이 아닌것만 #copy를 해주면 df값을 안바꾸고 할수 있음
plt.figure(figsize=(15,4))
sns.pointplot(data=df_local, x="연도", y="출생아수",hue="성별") #점을 찍어 연결
df_local_all = df_local[df_local["성별"] == "전체"]
df_local_all.head()
plt.figure(figsize=(15,4))
sns.pointplot(data=df_local_all, x="연도", y="출생아수")
plt.figure(figsize=(15,4))
sns.pointplot(data=df_local_all, x="연도", y="출생아수", hue="시군구별") #시군구별 레전드리가 가운데 있다...
plt.legend(loc="center right", bbox_to_anchor=(1.25, 0.5), ncol=1) #스택오버 플로우에서 찾음, 레저드 밖으로 옮기기
#서울시, 경기도, 세종특별자치시만 따로 보고싶다.
df_local_2 = df_local_all[
df_local_all["시군구별"].isin(
["서울특별시","경기도","세종특별자치시"])]
plt.figure(figsize=(15,4))
sns.pointplot(data=df_local_2, x="연도", y="출생아수", ci=None, hue="시군구별")
#ci=None 한 이유 : 연산을 빠르게 할려고
df_sj = df[df["시군구별"] == "세종특별자치시"]
#기간이 시작되는 곳부터 그리고 싶다.
df_sj = df[df["시군구별"] == "세종특별자치시"].dropna(how="any")
sns.pointplot(data=df_sj, x="duseh", y="출생아수", ci=None)
#다 더해서 표현하고 싶다
import numpy as np
sns.pointplot(data=df_sj, x="duseh", y="출생아수", ci=None, estimator = np.sum)
파이썬을 통해 스스로 데이터를 해석하는 것이 마켓팅의 시장조사 단계에서 유리하다고 생각합니다.
분석된 자료를 통한 것보다 데이터를 직접 만지고 보며 얻는 인사이트를 통해 더욱 값진 도출값을 낼 수 있다고 생각하기 때문이에요!
'마케팅 > 빅데이터' 카테고리의 다른 글
앰플리튜드를 이용한 그로스해킹 | AB180 | 원티드강의 (0) | 2021.04.06 |
---|---|
크롤링과 텍스트 마이닝을 통해 본 만우절 커피 키워드 (0) | 2021.04.04 |
하워드 라인 골드의 Smart Mob | 선과 악의 Mob | 4차 산업에 대한 이해 (0) | 2021.01.28 |
파이썬 티스토리 일괄 수정 (1) | 톤앤 매너 맞추기 (0) | 2021.01.15 |
영화 '머니볼' | 데이터로 야구를 보다. (0) | 2020.12.15 |
댓글