一、预览数据集
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