본문 바로가기

데이터 청년 캠퍼스(경남대학교)/스터디

2021 - 06 - 30

데이터 프레임

for row in df['평균']:
    if (raw >= 90):
        df['합격'] = '합격'
    else:
        df['합격'] = '불합격'

전체 열이 불합격으로 출력

 

가장 간단한 방법은 리스트에 넣어서 추가하는 방법

grades = []

for raw in df['평균']:
    if raw>=90:
        grades.append('합격')
    else:
        grades.append('불합격')
        
df['성적'] = grades

시도별 전출입 인구수1

수업시간 예제는 서울 -> 경기

 

부산 -> 경남으로 복습하기

#파일 읽기
df = pd.read_excel('시도별 전출입 인구수.xlsx')

#비어있는 값에 바로 이전의(위에있는) 값 넣기
df =df. fillna(method = 'ffill')

mask = (df['전출지별'] == '부산광역시')&(df['전입지별'] != '부산광역시') # mask = 부산광역시에서 나가고 부산광역시가 아닌 지역으로 들어가는 자료들
df_busan = df[mask] #새로운 데이터프레임 생성
df_busan = df_busan.drop(['전출지별'],axis = 1) #전출지별 열 삭제
df_busan.rename({'전입지별':'전입지',}, axis=1, inplace=True) #전입지별 -> 전입지 변경
df_busan.set_index('전입지', inplace=True)
#경상남도 행만 따로 저장
sr_one = df_busan.loc['경상남도']


plt.plot(sr_one.index, sr_one.values) #이 줄이랑
plt.plot(sr_one)#이 줄이랑 출력 값이 같음
plt.show()
# matplotlib 한글 폰트 오류 문제 해결
from matplotlib import font_manager, rc
font_path = "c:/Windows/Fonts/malgun.ttf" #폰트파일의 위치
font_name = font_manager.FontProperties(fname=font_path).get_name()
rc('font', family=font_name)
plt.figure(figsize=(20,5)) #그래프 크기 조절?

plt.plot(sr_one) # 판다스 객체를 plot 함수에 입력

# 차트 제목 추가
plt.title('부산 -> 경상남도 인구 이동') 

# 축이름 추가
plt.xlabel('기간')
plt.ylabel('이동 인구수')
plt.show() # 변경사항 저장하고 그래프 출력
sr_one = df_busan.loc['경상남도']

plt.style.use('ggplot') # 스타일 서식 지정

plt.figure(figsize=(14, 5))

plt.xticks(size=10, rotation='vertical')

# 마커 표시 추가
plt.plot(sr_one, marker='o', markersize=10)

plt.title('부산 -> 경남 인구 이동', size=30) #차트 제목
plt.xlabel('기간', size=20) #x축 이름
plt.ylabel('이동 인구수', size=20) #y축 이름

plt.legend(labels=['부산 -> 경남'], loc='best', fontsize=15)



# y축 범위 지정 (최소값, 최대값)
plt.ylim(50000, 160000)

# 주석 표시 - 화살표
plt.annotate('',
    xy=(20, 120000), #화살표의 머리 부분(끝점)
    xytext=(2, 80000), #화살표의 꼬리 부분(시작점)
    xycoords='data', #좌표체계
    arrowprops=dict(arrowstyle='->', color='skyblue', lw=5), #화살표서식
    )

plt.annotate('',
    xy=(47, 70000), #화살표의 머리 부분(끝점)
    xytext=(22, 120000), #화살표의 꼬리 부분(시작점)
    xycoords='data', #좌표체계
    arrowprops=dict(arrowstyle='->', color='olive', lw=5), #화살표서식
    )

# 주석 표시 - 텍스트
plt.annotate('인구이동 증가(1970-1992)', #텍스트 입력
    xy=(10, 110000), #텍스트 위치 기준점
    rotation=20, #텍스트 회전각도
    va='baseline', #텍스트 상하 정렬
    ha='center', #텍스트 좌우 정렬
    fontsize=15, #텍스트 크기
    )

plt.annotate('인구이동 감소(1992-2017)', #텍스트 입력
    xy=(35, 110000), #텍스트 위치 기준점
    rotation=-11, #텍스트 회전각도
    va='baseline', #텍스트 상하 정렬
    ha='center', #텍스트 좌우 정렬
    fontsize=15, #텍스트 크기
    )


plt.show() # 변경사항 저장하고 그래프 출력

타이타닉

 

df_ti = pd.read_csv('titanic.csv')

파일 불러오기

 

Age 열의 결측값 처리는 어떻게?

#mean1 = Survived 값이 1인 사람들의 나이 평균
mean1 = df_ti[df_ti['Survived'] == 1]['Age'].mean()
#mean0 = Survived 값이 0인 사람들의 나이 평균
mean0 = df_ti[df_ti['Survived'] == 0]['Age'].mean()
import numpy as np
df_ti['Age'] = np.where((df_ti['Survived'] == 1)&(df_ti['Age'].isnull()), mean1, mean0)

위의 코드처럼 사용하게 되면 Survived값이 1인 결측값에는 mean1의 값이 들어가지만 그 외의 모든 값에 mean0의 값이 들어가게 됨(기존의 값들도 모두 바뀌게 됨)

 

df_ti.loc[df_ti['Survived'] == 1, 'Age'] = df_ti[df_ti['Survived'] == 1]['Age'].fillna(mean1)
df_ti.loc[df_ti['Survived'] == 0, 'Age'] = df_ti[df_ti['Survived'] == 0]['Age'].fillna(mean0)

loc과 fillna를 사용해서 위의 코드와 같이 넣어줘야함


시도별 전출입 인구수2

'-'값 처리하기

그래서 울산 -> 강원 데이터 알아보기!

 

mask = (df['전출지별'] == '울산광역시')&(df['전입지별'] != '울산광역시')
df_ulsan = df[mask]
df_ulsan = df_ulsan.drop(['전출지별'],axis = 1)
df_ulsan.rename({'전입지별':'전입지',}, axis=1, inplace=True)
df_ulsan.set_index('전입지', inplace=True)
sr_one = df_ulsan.loc['강원도']

'-' 값이 있어서 그래프 출력 불가! 그래서 데이터타입의 변환이 필요함

sr_one.loc[(sr_one=='-')] = 0
print(sr_one.dtypes)

 

'-'를 0으로 바꿔주고

 

sr_one = sr_one.astype('int')

데이터타입 변환하기

 

# matplotlib 한글 폰트 오류 문제 해결
from matplotlib import font_manager, rc
font_path = "c:/Windows/Fonts/malgun.ttf" #폰트파일의 위치
font_name = font_manager.FontProperties(fname=font_path).get_name()
rc('font', family=font_name)
df_ultokang = sr_one['1997':'2017']
#이 과정을 넣는거였으면 앞에서 데이터타입 변환을 안했어도 됐을까?

0값이 아닌 열들만 출력해서 새로운 데이터 만들기

 

plt.figure(figsize=(20,5))

plt.plot(df_ultokang) # 판다스 객체를 plot 함수에 입력

# 차트 제목 추가
plt.title('울산 -> 강원도 인구 이동')

# 축이름 추가
plt.xlabel('기간')
plt.ylabel('이동 인구수')
plt.show() # 변경사항 저장하고 그래프 출력
plt.style.use('ggplot') # 스타일 서식 지정

plt.figure(figsize=(14, 5))

plt.xticks(size=10, rotation='vertical')

# 마커 표시 추가
plt.plot(df_ultokang, marker='o', markersize=10)

plt.title('울산 -> 강원 인구 이동', size=30) #차트 제목
plt.xlabel('기간', size=20) #x축 이름
plt.ylabel('이동 인구수', size=20) #y축 이름

plt.legend(labels=['울산 -> 강원'], loc='best', fontsize=15)



# y축 범위 지정 (최소값, 최대값)
plt.ylim(500, 2600)

# 주석 표시 - 화살표
plt.annotate('',
    xy=(20, 1200), #화살표의 머리 부분(끝점)
    xytext=(1,2200), #화살표의 꼬리 부분(시작점)
    xycoords='data', #좌표체계
    arrowprops=dict(arrowstyle='->', color='skyblue', lw=5), #화살표서식
    )


# 주석 표시 - 텍스트
plt.annotate('인구이동 감소', #텍스트 입력
    xy=(10, 1800), #텍스트 위치 기준점
    rotation=-13, #텍스트 회전각도
    va='baseline', #텍스트 상하 정렬
    ha='center', #텍스트 좌우 정렬
    fontsize=15, #텍스트 크기
    )



plt.show() # 변경사항 저장하고 그래프 출력

'데이터 청년 캠퍼스(경남대학교) > 스터디' 카테고리의 다른 글

2021-07-12  (0) 2021.07.12
2021 - 07 - 07  (0) 2021.07.07
2021-07-06  (0) 2021.07.06
2021-07-05  (0) 2021.07.05
2021-07-01  (0) 2021.07.02