Stack Overflow Data를 사용한 연습
폰트 설정
# 설치한 폰트 설정 저 파일 위치의 폰트들을 확인해서 긁어옴.
import matplotlib as mpl
import matplotlib.pyplot as plt
import matplotlib.font_manager as font_manager
%matplotlib inline
# Add every font at the specified location
font_dir = ['C:\\\\Chang_git\\\\python_basic\\\\fonts']
for font in font_manager.findSystemFonts(fontpaths=font_dir):
print(mpl.font_manager.FontProperties(fname=font).get_name())
font_manager.fontManager.addfont(font)
# Set font family globally
mpl.rcParams['font.family'] = 'LINE Seed Sans KR'
print(mpl.rcParams['font.family'])
mpl.rcParams['axes.unicode_minus'] = False
import seaborn as sns
sns.set_theme(style = 'white')
sns.set_context('paper')
mpl.rcParams['font.size'] = 14
mpl.rcParams['figure.figsize'] = (9,5)
mpl.rcParams['figure.facecolor'] = '#00000000'
plt.style.use('seaborn-white')# 주어진 style로 바꿔라.
# axes만 색상 변경하는 법
# plt.style.use("default") 로 변경해줘야 함(style이 먼저 적용되기 때문임.)
#mpl.rcParams["axes.facecolor"] = "white"
import pandas as pd
import numpy as np
survey_raw_df = pd.read_csv('C:/Chang_git/Data/survey_results_public.csv',index_col = 'ResponseId') # ResponseId를 index로 하여 csv파일을 가져온다.
qname을 idnex로 받고, question을 value로 받는 Series형태의 데이터를 schema_raw에 저장한다.
schema_raw = pd.read_csv('C:/Chang_git/Data/survey_results_schema.csv',index_col = 'qname')['question']
survey_raw_df.columns
schema_raw.index
# 데이터의 전체 컬럼 중 CompTotal 이란 항목에 대한 질문이 궁금하면 아래와 같이 조회할 수 있다.
schema_raw['CompFreq']
# 해당 데이터는 78개의 column을 가진다.(큰 데이터구먼)
survey_raw_df.info()
너무 큰 데이터를 표시하기 위한 방법
- 78개의 column은 너무 크기 때문에 한 화면에 안 보이게 된다. 이를 위한 설정이 필요하다
pd.set_option('display.max_columns',78) # 조회해보면 이전과 다르게 다 보이더라
pd.set_option('display.max_rows',78)
- 매우 많은 column이 존재하는데 이 중 일부만 발췌하여 사용한다.
selected_columns = [
#인구 통계
'Country',
'Age',
'Gender',
'EdLevel',
#프로그래밍 경험
'YearsCode',
'YearsCodePro',
'LanguageHaveWorkedWith',
'LanguageWantToWorkWith',
'LearnCodeCoursesCert',
'ProfessionalTech',
'SOAccount',
#고용 관련 정보
'Employment',
'DevType',
'WorkExp'
]
survey_df = survey_raw_df[selected_columns].copy()
#survey_df
survey_df.info()
survey_df['YearsCode'].value_counts() # 문자열 2개가 포함되어 있어서 불편한 점이 있다.
# series 값을 받아서 nan값이 몇개 있는지 보여라.
def count_nan(column):
print(column.isna().sum())
count_nan(survey_df['YearsCode'])
- pandas.Series.replace(변경 전 값, 변경 후 값, inplcae = True)를 사용하여 값을 원하는 것으로 바꿀 수 있다.
- replace를 사용하여 아까 불편했던 문자열 값을 숫자값으로 변경 후 타입도 변경해 보는 예제
survey_df['YearsCode'].replace('Less than 1 year', 0 , inplace = True)
survey_df['YearsCode'].replace('More than 50 years', 51 , inplace = True)
survey_df['YearsCode']= survey_df['YearsCode'].astype('float64') # float로 바뀐것을 확인하기 위해 info를 확인해보면 된다.
survey_df['YearsCode'].value_counts()
count_nan(survey_df['YearsCodePro'])
survey_df['YearsCodePro'].replace('Less than 1 year', 0 , inplace = True)
survey_df['YearsCodePro'].replace('More than 50 years', 51 , inplace = True)
survey_df['YearsCodePro']= survey_df['YearsCodePro'].astype('float64')
survey_df['YearsCodePro'].value_counts()
survey_df.info()
survey_df.describe() # 값의 분포를 확인하는 method
# 범위마다 표현되는 값이 정수이다 보니 데이터 값이 정수 값을 갖는 것을 짐작해볼 수 있다.
- YearsCode, YearsCodePro 를 수치 자료형으로 바꿨다.
- 만약 이 값들을 수치로 변경하다 에러를 만나면 NaN으로 처리하고자 한다면 아래 함수를 사용하면 된다.
- pandas.to_numeric(해당되는 열, errors = ‘coerce’)
- errors = ‘coerce’ = 파싱하다 error가 발생하면 NaN으로 처리해라
- errors = ‘raise’ = 에러가 발생된다.
- errors = ‘ignore’ = 에러 발생시 input이 발생한다.(입력받나 봄)
survey_df['Yearscode'] = pd.to_numeric(survey_df['YearsCode'], errors='coerce' )
survey_df['YearscodePro'] = pd.to_numeric(survey_df['YearsCodePro'], errors='coerce' )
# Gender는 둘 이상의 데이터를 선택할 수 있어서 아래처럼 목록이 많아졌다.
survey_df['Gender'].value_counts()
- gender의 분류가 너무 많아서 ;이 들어가면 중복 선택이므로 ;이 없는 값들만 처리하고 나머지는 NaN처리해야 한다.
- pandas.Series.str.contains(‘;’, na = False ) = ; 가 포함되어 있는지 확인할 수 있는 메서드
- na를 지정해 줌으로 써 ; 가 있는 애들은 True를 넣어라 라는 뜻이다. 포함하지 않는 값은 False를 담아준다.
- na 지정하지 않는다면 ;를 포함하면 NaN으로 초기화된다.
- pandas.DataFrame.where(condition, False이면 바꿀 값, inplace = True) = condition이 False인 애들을 대체하는 함수이다.
survey_df.where(~(survey_df['Gender'].str.contains(';',na = True)),np.nan,inplace=True) # ; 포함한다면 nan을 넣어라
survey_df['Gender'].value_counts()
schema_raw['Country']
survey_df['Country'].unique()
country에 대한 유일한 값의 개수를 확인한다 NaN값은 count에 포함하지 않는다.
survey_df['Country'].nunique()
df = survey_df['Country'].value_counts().head(15)
시각화 부분은 다음 페이지에서 이어집니다
'파이썬 > 응용' 카테고리의 다른 글
Stack Overflow Data를 사용한 연습 - 2 (0) | 2023.05.03 |
---|