人口收入普查数据分析(练习)

一、预览数据集

import warnings
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
warnings.filterwarnings('ignore')
data = pd.read_csv(
    'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
data.head()#查看前五行数据

二、数据处理与分析

1、查看数据集中有多少男性和女性

data['sex'].value_counts()

 

2、数据集中女性的平均年龄是多少?

data[data['sex'] == 'Female']['age'].mean()

 

3、数据集中德国公民的比例是多少?

float((data['native-country'] == 'Germany').sum()) / data.shape[0]

 

4、年收入超过 50K 和低于 50K 人群年龄的平均值和标准差是多少?

ages1 = data[data['salary'] == '>50K']['age']
ages2 = data[data['salary'] == '<=50K']['age']
print("The average age of the rich: {0} +- {1} years, poor - {2} +- {3} years.".format(
    round(ages1.mean()), round(ages1.std(), 1),
    round(ages2.mean()), round(ages2.std(), 1)))

 

5、年收入超过 50K 的人群是否都接受过高中以上教育

data[data['salary'] == '>50K']['education'].unique()  # No

 

6、使用 groupby 和 describe 统计不同种族和性别人群的年龄分布数据。

for (race, sex), sub_df in data.groupby(['race', 'sex']):
    print("Race: {0}, sex: {1}".format(race, sex))
    print(sub_df['age'].describe())

 

7、统计男性高收入人群中已婚和未婚(包含离婚和分居)人群各自所占数量。

data[(data['sex'] == 'Male') &
     (data['marital-status'].isin(['Never-married',
     'Separated', 'Divorced']))]['salary'].value_counts()
data[(data['sex'] == 'Male') &
     (data['marital-status'].str.startswith('Married'))]['salary'].value_counts()
data['marital-status'].value_counts()

 

8、 统计数据集中最长周工作小时数及对应的人数,并计算该群体中收入超过 50K 的比例

max_load = data['hours-per-week'].max()
print("Max time - {0} hours./week.".format(max_load))

num_workaholics = data[data['hours-per-week'] == max_load].shape[0]
print("Total number of such hard workers {0}".format(num_workaholics))

rich_share = float(data[(data['hours-per-week'] == max_load)
                        & (data['salary'] == '>50K')].shape[0]) / num_workaholics
print("Percentage of rich among them {0}%".format(int(100 * rich_share)))

 

9、计算各国超过和低于 50K 人群各自的平均周工作时长

for (country, salary), sub_df in data.groupby(['native-country', 'salary']):
    print(country, salary, round(sub_df['hours-per-week'].mean(), 2))
#方法二
pd.crosstab(data['native-country'], data['salary'],
            values=data['hours-per-week'], aggfunc=np.mean).T

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值