devs_df['Currency'].value_counts()
devs_df['CompTotal'].describe()
devs_df['Currency'] = devs_df['Currency'].str.slice(start=0,stop=3)
devs_df['Currency'].value_counts().head(10)
devs_df['Currency'].isin(['KRW']).value_counts()
import pickle
with open('./data/forex.pkl', 'rb') as file:
forex = pickle.load(file)
display(forex)
currencies = list(forex['results'].keys())
devs_df_comp = devs_df[devs_df['Currency'].isin(currencies)].copy()
devs_df_comp = devs_df_comp.dropna(subset=['Currency','CompTotal'])
devs_df_comp.info()
pd.options.display.float_format = '{:,.5f}'.format
devs_df_comp['ExchangeRateToKrw'] = devs_df_comp['Currency'].map(forex['results'])
devs_df_comp.head()
devs_df_comp['CompTotalKrw(만원)'] = devs_df_comp['CompTotal'] / devs_df_comp['ExchangeRateToKrw'] // 10000
devs_df_comp.head()
devs_df_comp.describe()
devs_df_comp['CompTotalKrw(만원)'].sort_values(ascending=False).head(20)
fakeDataId = devs_df_comp[devs_df_comp['CompTotalKrw(만원)'] > 5000000]['ResponseId']
devs_df_comp = devs_df_comp[~devs_df_comp['ResponseId'].isin(fakeDataId)]
devs_df_comp['CompTotalKrw(만원)'].describe()
zeroCompId = devs_df_comp[devs_df_comp['CompTotalKrw(만원)']==0]['ResponseId']
devs_df_comp = devs_df_comp[~devs_df_comp['ResponseId'].isin(zeroCompId)]
devs_df_comp['CompTotalKrw(만원)'].describe()
devs_df = devs_df[~devs_df['ResponseId'].isin(fakeDataId)]
devs_df.info()
devs_df['LanguageHaveWorkedWith'].value_counts()
flattened_lang_list = get_flattened_list(devs_df['LanguageHaveWorkedWith'])
language_sr = pd.Series(flattened_lang_list)
language_sr.value_counts()
flattened_prf_lang_list = get_flattened_list(devs_df['LanguageWantToWorkWith'])
language_prf_sr = pd.Series(flattened_prf_lang_list)
language_prf_sr.value_counts(normalize=True)
devs_lang_df = devs_df.copy()
devs_lang_df['LanguageHaveWorkedWith'] = devs_lang_df['LanguageHaveWorkedWith'].str.split(';')
devs_lang_df = devs_lang_df.explode('LanguageHaveWorkedWith')
devs_lang_df.info()
devs_lang_df.head()
lang_by_devtype = devs_lang_df.groupby(['DevType','LanguageHaveWorkedWith'])['ResponseId'].count().reset_index(name='Count')
lang_by_devtype.head()
lang_by_devtype.sort_values(by="Count",ascending=False)
lang_by_devtype['DevType'].unique()
lang_by_data_devs = lang_by_devtype[lang_by_devtype['DevType'].isin(DATA_DEVS)].copy()
lang_by_data_devs.sort_values(by=["DevType","Count"], ascending=False)
for dev in DATA_DEVS:
top5_lang = lang_by_data_devs[lang_by_data_devs['DevType']==dev].sort_values(by="Count", ascending=False)[:5]
display(top5_lang)
devs_prflang_df = devs_df.copy()
devs_prflang_df['LanguageWantToWorkWith'] = devs_prflang_df['LanguageWantToWorkWith'].str.split(';')
devs_prflang_df = devs_prflang_df.explode('LanguageWantToWorkWith')
devs_prflang_df.info()
devs_df['WorkExp'].value_counts(dropna=False,normalize=True)
devs_df['WorkExp'].describe()
devs_df['Industry'].value_counts(dropna=False,normalize=True)
devs_df.to_csv('./data/preprocessed_survey_full.csv',index=False)
devs_df_comp.to_csv('./data/preprocessed_survey_comp.csv',index=False)
devs_lang_df.to_csv('./data/preprocessed_lang_exploded.csv',index=False)
devs_prflang_df.to_csv('./data/preprocessed_prflang_exploded.csv',index=False)
lang_frequency = lang_df['LanguageHaveWorkedWith'].value_counts(ascending=True)
standard_figsize = (10,10)
plt.figure(figsize=standard_figsize)
plt.barh(width=lang_frequency.values, y=lang_frequency.index)
plt.title('언어별 사용자 수',fontsize=15,fontweight='bold')
plt.ylabel('개발언어',fontweight='bold')
plt.xlabel('사용자 수',fontweight='bold')
plt.xticks(np.arange(0,lang_frequency.values.max()+2000,2000),rotation=45)
plt.grid(axis='x',linestyle='--', alpha=0.7)
plt.show()
top10_lang = lang_frequency.nlargest(10).sort_values(ascending=True)
total_respondents = lang_df['ResponseId'].nunique()
top10_lang_percentage = (top10_lang / total_respondents) * 100
plt.figure(figsize=standard_figsize)
lang_bars = plt.barh(width=top10_lang.values, y=top10_lang.index)
for bar,percentage in zip(lang_bars, top10_lang_percentage):
plt.text(x=bar.get_width() - top10_lang.values.max()*0.1,y=bar.get_y() + bar.get_height()/2,s=f'{percentage:.2f}%',
color='white', fontweight='bold',fontsize=15, va='center',ha='center')
plt.title('개발자들이 가장 많이 사용하는 개발언어 10위 (전체 응답자 비율 %)',fontsize=15,fontweight='bold')
plt.ylabel('개발언어',fontweight='bold')
plt.xlabel('사용자 수',fontweight='bold')
plt.xticks(np.arange(0,top10_lang.values.max()+5000,5000))
plt.yticks(rotation=45)
plt.grid(axis='x',linestyle='--', alpha=0.7)
plt.show()
prflang_frequency = prflang_df['LanguageWantToWorkWith'].value_counts(ascending=True)
plt.figure(figsize=standard_figsize)
plt.barh(width=prflang_frequency.values, y=prflang_frequency.index, color='salmon')
plt.title('언어별 사용을 희망한 응답자 수', fontsize=15, fontweight='bold')
plt.xlabel('응답자 수',fontweight='bold')
plt.ylabel('개발언어',fontweight='bold')
plt.xticks(np.arange(0,prflang_frequency.values.max()+2000,2000),rotation=45)
plt.grid(axis='x',linestyle='--',alpha=0.7)
plt.show()
top10_prflang = prflang_frequency.nlargest(10).sort_values(ascending=True)
total_prfrespondents = prflang_df['ResponseId'].nunique()
top10_prflang_percentage = (top10_prflang / total_prfrespondents) * 100
plt.figure(figsize=standard_figsize)
prflang_bars = plt.barh(width=top10_prflang.values,y=top10_prflang.index,color='salmon')
plt.title('개발자들이 가장 많이 사용하고 싶어하는 개발언어 10위 (전체 응답자 비율 %)',fontsize=15,fontweight='bold')
plt.ylabel('개발언어', fontweight='bold')
plt.xlabel('사용자 수',fontweight='bold')
plt.xticks(np.arange(0,top10_prflang.values.max()+5000,5000))
for bar, percentage in zip(prflang_bars,top10_prflang_percentage):
plt.text(bar.get_width()-(top10_prflang.values.max() * 0.1),bar.get_y()+bar.get_height()/2,f'{percentage:.2f}%',
color='white',fontsize=15,fontweight='bold',ha='center',va='center')
plt.grid(axis='x',linestyle='--', alpha=0.7)
plt.show()
plt.figure(figsize=(20,10))
plt.subplot(1,2,1)
lang_bars = plt.barh(width=top10_lang.values, y=top10_lang.index)
for bar,percentage in zip(lang_bars, top10_lang_percentage):
plt.text(x=bar.get_width() - top10_lang.values.max()*0.1,y=bar.get_y() + bar.get_height()/2,s=f'{percentage:.2f}%',
color='white', fontweight='bold',fontsize=15, va='center',ha='center')
plt.title('개발자들이 가장 많이 사용하는 개발언어 10위 (전체 응답자 비율 %)',fontsize=15,fontweight='bold')
plt.ylabel('개발언어',fontweight='bold')
plt.xlabel('사용자 수',fontweight='bold')
plt.xticks(np.arange(0,top10_lang.values.max()+5000,5000))
plt.yticks(rotation=45)
plt.grid(axis='x',linestyle='--', alpha=0.7)
plt.subplot(1,2,2)
prflang_bars = plt.barh(width=top10_prflang.values,y=top10_prflang.index,color='salmon')
plt.title('개발자들이 가장 많이 사용하고 싶어하는 개발언어 10위 (전체 응답자 비율 %)',fontsize=15,fontweight='bold')
plt.ylabel('개발언어', fontweight='bold')
plt.xlabel('사용자 수',fontweight='bold')
plt.xticks(np.arange(0,top10_prflang.values.max()+5000,5000))
for bar, percentage in zip(prflang_bars,top10_prflang_percentage):
plt.text(bar.get_width()-(top10_prflang.values.max() * 0.1),bar.get_y()+bar.get_height()/2,f'{percentage:.2f}%',
color='white',fontsize=15,fontweight='bold',ha='center',va='center')
plt.grid(axis='x',linestyle='--', alpha=0.7)
plt.tight_layout()
plt.show()
////////////////////////////////////////////////////////////////////////
plt.figure(figsize=standard_figsize)
plt.barh(width=lang_frequency.values,
y=np.arange(len(lang_frequency)),
tick_label=lang_frequency.index,
alpha=0.6)
for idx, lang in enumerate(lang_frequency.index):
prflang_count = prflang_frequency.loc[lang]
plt.barh(y=idx,width=prflang_count,color='salmon',alpha=0.6)
plt.title('언어별 사용자 수 vs 사용 희망자 수',fontsize=15,fontweight='bold')
plt.ylabel('개발언어', fontweight='bold')
plt.xlabel('응답자 수',fontweight='bold')
plt.xticks(np.arange(0,max(lang_frequency.values.max(),prflang_frequency.values.max())+2000,2000),rotation=45)
plt.grid(axis='x',linestyle='--',alpha=0.7)
plt.legend(["현재 사용하는 언어","사용을 희망하는 언어"],loc='lower right')
plt.show()
data_lang_df = lang_df[lang_df['DevType'].isin(DATA_DEVS)]
data_prflang_df = prflang_df[prflang_df['DevType'].isin(DATA_DEVS)]
data_lang_frequency = data_lang_df['LanguageHaveWorkedWith'].value_counts(ascending=True)
data_prflang_frequency = data_prflang_df['LanguageWantToWorkWith'].value_counts(ascending=True)
data_top10_lang = data_lang_frequency.nlargest(10).sort_values(ascending=True)
data_top10_prflang = data_prflang_frequency.nlargest(10).sort_values(ascending=True)
fig,axes = plt.subplots(1,2,figsize=(20,10))
axes[0].barh(width=data_top10_lang.values,y=data_top10_lang.index)
axes[0].set_title('데이터 관련 직군 - 가장 인기 있는 개발 언어 10위 (현재 사용)',fontsize=15,fontweight='bold')
axes[0].set_xlabel('응답자 수',fontweight='bold')
axes[0].set_ylabel('개발언어',fontweight='bold')
axes[0].grid(axis='x',linestyle='--',alpha=0.7)
axes[1].barh(width=data_top10_prflang.values,y=data_top10_prflang.index, color='salmon')
axes[1].set_title('데이터 관련 직군 - 가장 인기 있는 개발 언어 10위 (사용 희망)',fontsize=15,fontweight='bold')
axes[1].set_xlabel('응답자 수',fontweight='bold')
axes[1].set_ylabel('개발언어',fontweight='bold')
axes[1].grid(axis='x',linestyle='--',alpha=0.7)
plt.tight_layout()
plt.show()