データサイエンスの実践者がPython言語分析を調査
データの説明
2017年8月26日、世界最大のデータサイエンスコミュニティであるKaggleは、データサイエンス/機械学習業界の現状を業界全体で調査するためのデータセットをリリースしました。アンケートデータは、2017年8月7日から8月25日まで収集されました。インタビュー対象者には、50か国以上からの16,716人以上の開業医が含まれていました。Kaggleアンケートデータセットによると、いくつかの栄養情報を掘り下げています。
変数選択
合計228の変数があり、分析したい質問のいくつかを選択します。変数の説明表は次のとおりです。
データの前処理
地域の台湾のデータを中国のデータに計算し、変数記述テーブルを生成します
data = pd.read_csv('multipleChoiceResponses.csv', encoding="unicode_escape")
data.shape
data.info()
col_name =list( data.columns )
data['Country']=['China' if i=='People \'s Republic of China' or
i=='Republic of China' else i for i in data['Country'] ]
# 选中感兴趣的变量
df = data[[
'Age', 'Country', 'CurrentJobTitleSelect','MLToolNextYearSelect',
'MLMethodNextYearSelect', 'EmploymentStatus', 'FormalEducation',
'CoursePlatformSelect', 'FirstTrainingSelect', 'Tenure','JobSatisfaction',
'LanguageRecommendationSelect', 'JobSkillImportancePython',
'JobSkillImportanceR', 'JobSkillImportanceSQL', 'JobSkillImportanceBigData'
]]
v_illustration = pd.DataFrame({
'变量名':df.columns,
'类型':[type(df.iat[1,i]) for i,col in enumerate(df.columns)],
'缺失量':[sum(df.iloc[:,i].isnull()) for i,col in enumerate(df.columns)]})
v_illustration.to_csv('v_illustration.csv',encoding='utf-8-sig')
単変量分析
タイプ別の変数分布表示
水平バーを描画するプロセスは、再利用を容易にする関数として記述されています。
def type_to_bar(type_obj):
'''输入pd.Series(),输出水平的条形图'''
count = type_obj.value_counts()
if len(count)>10 :
count = count[:10] # 只要前十个
count = count[::-1] # 第一放在上面
position = range(len(count))
color = color_list[:len(count)]
plt.barh(y=position, width=count, color = color[::-1] )
# plt.title(type_obj.name)
plt.yticks(ticks=position, labels=count.index)
z = zip(count.values,position)
for i,j in z:
print(i,j)
plt.text(i,j,s=str(int(i)),ha='right',va='center',color='white')
国別の回答者の分布を表示する
fig = plt.figure(dpi=140)
type_obj= df['Country']
type_to_bar(type_obj)
回答者の位置分布
# 受访者职位分布
fig = plt.figure(dpi=140)
type_obj= df['CurrentJobTitleSelect']
type_to_bar(type_obj)
回答者が来年学習する機械学習ツール
# 受访者下一年准备学习的机器学习工具
fig = plt.figure(dpi=140)
type_obj= df['MLToolNextYearSelect']
type_to_bar(type_obj)
残りの変数
残りのサブタイプ変数は同じメソッドを持ち、一緒に描画できるため、ここでは示しません。
for i in df.columns:
fig = plt.figure(dpi=140)
type_obj= df[i]
type_to_bar(type_obj)
数値変数分布表示
回答者の年齢分布
# 单变量年龄分布
# 画出一条垂线标明均值
fig = plt.figure(figsize=(10,6),dpi=200)
sns.kdeplot(df['Age'], shade=True, alpha=.7,)
plt.suptitle('年龄分布')
x=df['Age'].mean()
plt.axvline(x,color='red')
plt.text(x,0.04,'年龄均值32',size =15)
plt.show()
二変量解析
数値変数に対するサブタイプ変数の影響
さまざまな国の年齢差を例にとり、横棒グラフを使用してさまざまな国の平均年齢を示します
# 双变量关系分析, 国家对年龄的影响. 分类型——数值型
# 水平条形图
def num_to_bar(num, label):
'''输入pd.dataframe(),一列为数字型,一列为标签,
输出各类别均值直方图'''
cla = label.value_counts().index
count = []
for lab in cla:
count.append(num[label==lab].mean())
count = pd.Series(count, index = cla)
count.sort_values(ascending=False,inplace=True)
if len(count)>10 :
count = count[:10] # 只要前十个
count = count[::-1] # 第一放在上面
position = range(len(count))
color = color_list[:len(count)]
plt.barh(y=position, width=count, color = color[::-1] )
plt.title(num.name)
plt.yticks(ticks=position, labels=count.index)
z = zip(count.values,position)
for i,j in z:
# print(i,j)
plt.text(i,j,s=str(int(i)),
ha='right',va='center',color='white')
# 各国家受访者年龄对比
fig = plt.figure(dpi=140)
num = df['Age']; label=df['Country']
num_to_bar(num, label)
各国の求人データ実務者満足度の比較
# 各国家受访者满意度对比
def trans_jbsatisfy(x):
if x=='10 - Highly Satisfied':
y=10
elif x=='1 - Highly Dissatisfied':
y=1
elif x=='I prefer not to share':
y= np.NaN
elif isinstance(x, float):
y=x
elif isinstance(int(x), int):
y=int(x)
else : print(x)
return y
df['JobSatisfaction']=df['JobSatisfaction'].apply(trans_jbsatisfy)
fig = plt.figure(dpi=140)
num = df['JobSatisfaction']; label=df['Country']
num_to_bar(num, label)
plt.title("工作满意度最高的是瑞士")
サブタイプ変数がサブタイプ変数に与える影響
例として、優先プログラミング言語に対する国の影響を取り上げます
fig = plt.figure(figsize=(10,6),dpi=140)
plt.subplot(1,2,1)
type_to_bar(df.loc[df['Country']=='China','LanguageRecommendationSelect'])
plt.title('China')
plt.subplot(1,2,2)
type_obj=df.loc[df['Country']=='United States','LanguageRecommendationSelect']
type_to_bar(type_obj)
plt.title('America')