数据来源1994年美国人口普查数据。

首先在notebook导入包和数据集

#导入数据分析包

import numpy as np

import pandas as pd

import seaborn as sns

import matplotlib.pyplot as plt

%matplotlib inline

#导入数据,并查看数据类型

df =pd.read_csv('adult.csv')

df.head()

看下最后一列收入情况

df['income'].value_counts()

收入大于50K的人数占到76%。

再看下数据总体情况,数据类型,和是否有缺失值。

df.describe()

df.info()

可以看到没有缺失值,如有缺失值需做数据填充。

探索数据

#把字段名字打印出来方便使用

df_list = df.columns.tolist()

print(df_list)

['age', 'workclass', 'fnlwgt', 'education', 'educational-num', 'marital-status', 'occupation', 'relationship', 'race', 'gender', 'capital-gain', 'capital-loss', 'hours-per-week', 'native-country', 'income']

一、首先看下年龄分布

sns.set_style("whitegrid")

plt.subplots(figsize=(15, 8))

s=df['age'].value_counts()

sns.barplot(s.index,s.values)

df.age.mean()

可以看到年龄峰值是在23岁,35、6岁左右,平均年龄是38.6

s=df['age'].value_counts()

k=df['age'][df['income']=='>50K'].value_counts()

sns.set_style("whitegrid")

f, ax = plt.subplots(figsize=(18, 9))

sns.set_color_codes("pastel")

sns.barplot(s.index,s.values,label='total',color="b")

sns.barplot(k.index,k.values,label='income>50K',color="g")

ax.legend(ncol=2, loc="upper left", frameon=True)

可以看到>50K收入的人呈现正态分布。在46岁左右>50K收入人群占比总体数据百分比最高

二、教育水平

plt.subplots(figsize=(15, 6))

s=df['education'].value_counts()

sns.barplot(s.index,s.values)

可以看出高中毕业人数有将近1.6万人,其次是大学肄业,这应该是美国的国情吧。

edu_n=df.groupby(['education','educational-num'])['education'].count()

edu_n

education 和 educational-num 是一一对应关系,做算法模型时可以删除一列。

education是分类变量,educational-num是数值变量,受教育水平是有顺序的,数字大小是有比较意义的,因此保留education-num。

edu_hincome=df['education'][df['income']=='>50K'].value_counts()

edu_lincome=df['education'][df['income']=='<=50K'].value_counts()

edu_high_per =edu_hincome/s

edu_low_per =edu_lincome/s

fig =plt.figure(figsize=(15,6))

sns.barplot(edu_high_per.index,edu_high_per.values,color='red',label='edu_highincome')

sns.barplot(edu_low_per.index,edu_low_per.values,bottom=edu_high_per,color='blue',label='edu_lowincome')

fig.legend(ncol=2, loc="upper center", frameon=True)

可以看到超过50K占比最高依次是,Prof-school,Doctorate,Masters,Bachelors 跟学习年限呈现正相关性。

第三、婚姻状况

f,ax=plt.subplots(figsize=(11, 6))

s=df['marital-status'].value_counts()

sns.barplot(s.index,s.values)

ax.set_xticklabels(ax.get_xticklabels(), rotation=45)

mer_hincome=df['marital-status'][df['income']=='>50K'].value_counts()

mer_lincome=df['marital-status'][df['income']=='<=50K'].value_counts()

f,ax=plt.subplots(figsize=[12,6])

sns.barplot(mer_lincome.index,mer_lincome.values,color='red',order=a,alpha = 0.7,label='mer_low_income')

sns.barplot(mer_hincome.index,mer_hincome.values,color='blue',order=a,alpha=0.5,label='mer_high_income')

ax.legend(ncol=2, loc="upper center", frameon=True)

可以看到已婚和收入高低有正相关性,但还不能说明因此有因果关系。

第四、职业分布以及和收入关系

plt.subplots(figsize=(8, 8))

s=df['occupation'].value_counts()

sns.barplot(y=s.index,x=s.values)

从业人数前三分别是Prof-specialty,Craft-repair,Exec-managerial

occ_hincome=df['occupation'][df['income']=='>50K'].value_counts()

occ_lincome=df['occupation'][df['income']=='<=50K'].value_counts()

f,ax=plt.subplots(figsize=[12,6])

a=s.index

sns.barplot(y=occ_lincome.index,x=occ_lincome.values,color='red',order=a,alpha = 0.7,label='occ_low_income')

sns.barplot(y=occ_hincome.index,x=occ_hincome.values,color='blue',order=a,alpha=0.5,label='occ_high_income')

ax.legend(ncol=2, loc="lower center", frameon=True)

可以看出高收入占比比较高的是Exec-managerial、Prof-specialty,比较低的是Handlers-cleaners、Farming-fishing,比较符合我们的日常认知。

第四、家庭

plt.subplots(figsize=(8, 8))

s=df['relationship'].value_counts()

plt.pie(s.values, labels=s.index, autopct='%1.1f%%')

第五、种族

plt.subplots(figsize=(8, 8))

s=df['relationship'].value_counts()

plt.pie(s.values, labels=s.index, autopct='%1.1f%%')

第六、性别

df['gender'].value_counts()

第七、资本收益和损失

plt.subplots(figsize=(7,5))

sns.distplot(df['capital-loss'][df['capital-loss']!=0])

资本损失密度函数,峰值在2000员左右,呈现正态分布

plt.subplots(figsize=(7,5))

sns.distplot(df['capital-gain'][df['capital-gain']!=0])

收益普遍比较高,在10美金出现很多极值

df['capital-gain'][(df['capital-gain']!=0)|(df['capital-loss']!=0)].agg(['mean','count'])

df['capital-loss'][(df['capital-gain']!=0)|(df['capital-loss']!=0)].agg(['mean','count'])

在有资本收益损失的调查人群6317人中,其中资本获益人均8343,资本损失人均676,看来行情不错。

gain_age=df.groupby(['age'])['capital-gain'].sum()

loss_age=df.groupby(['age'])['capital-loss'].sum()

fig =plt.figure(figsize=(15,6))

sns.barplot(gain_age.index,gain_age.values,color='yellow',alpha=0.7,label='capital_gain')

sns.barplot(loss_age.index,loss_age.values,color='red',alpha = 0.3,label='capital_loss')

fig.legend(ncol=2, loc="upper center", frameon=True)

看下分年龄的资本收入情况对比。

第八、工作时长

plt.subplots(figsize=(9,5))

sns.distplot(df['hours-per-week'])

接近50%的人是每周工作40个小时。

plt.subplots(figsize=(8, 9))

s=df['native-country'][df['native-country']!='United-States'].value_counts()

sns.barplot(y=s.index,x=

s.values)

可以看到前三移民来源国是Mexico,Philippines,Germany

以上是对各个参数做了一个基本的可视化分析。

特征工程

收入更改为0,1,方便建模

df['income'] = df['income'].apply(lambda s:s.strip())

df.loc[df['income']=='>50K','target'] =1

df.loc[df['income']!='>50K','target']= 0

df.drop(columns='income',inplace=True)

#删除

df.drop(columns='income',inplace=True)

特征处理

cat_columns = ['workclass', 'marital-status', 'occupation', 'relationship', 'race',

'gender','native-country']

num_columns = ['age','fnlwgt','educational-num','capital-gain', 'capital-loss', 'hours-per-week']

target_column = "target"

离散特征做one_hot_encode

encode_df= pd.get_dummies(df,columns=cat_columns)

df_x = encode_df.drop(columns=target_column)

df_y = encode_df[target_column]

df_y = df_y.values

连续特征标准化

num_mean = df_x[num_columns].mean()

num_std = df_x[num_columns].std()

num_normal = (df_x[num_columns]-num_mean)/num_std

df_x = df_x.drop(columns=num_columns)

df_x = pd.concat([df_x,num_normal],axis=1)

df_x = df_x.values

数据集划分成训练集和测试集

from sklearn.model_selection import StratifiedShuffleSplit

sss = StratifiedShuffleSplit(n_splits=2,train_size=0.7)

for train_index, test_index in sss.split(df_x,df_y):

trainx,testx =df_x[train_index],df_x[test_index]

trainy,testy = df_y[train_index],df_y[test_index]

构建模型

调用模型随机梯度下降分类器

from sklearn.linear_model import SGDClassifier

lr =SGDClassifier(loss='log',max_iter = 100)

lr.fit(trainx,trainy)

模型在训练集上评估

from sklearn.metrics import roc_auc_score,precision_recall_curve,classification_report,roc_curve

pred =lr.predict_proba(testx)[:,1]

pred_labels = lr.predict(testx)

#ROC

print(roc_auc_score(testy,pred))

#分类报告

print(classification_report(testy,pred_labels))

查看PR曲线和AUC曲线

#precision recall curve

precision,recall,_ =precision_recall_curve(testy,pred)

plt.plot(recall,precision)

精准率和召回率是个trade-off关系,根据业务事情情况做出选择。

fpr,tpr,_ = roc_curve(testy,pred)

plt.plot(fpr,tpr)

显示模型预测效果还可以。

python人口普查数据数据分析_美国人口普查数据可视化探索和收入水平预测建模...相关推荐

  1. python电商项目介绍_电商大数据项目-推荐系统实战(一)

    本项目是基于Spark MLLib的大数据电商推荐系统项目,使用了scala语言和java语言.基于python语言的推荐系统项目会另外写一篇博客.在阅读本博客以前,需要有以下基础: 1.linux的 ...

  2. Python数据处理(一)——以美国各州统计数据为例

    编写本篇文章的目的:了解Python数据处理的基本步骤,计算美国各州的人口密度,数据来源:https://github.com/jakevdp/data-USstates/ ,共3张数据表格:stat ...

  3. 季节性时间序列数据分析_如何指导时间序列数据的探索性数据分析

    季节性时间序列数据分析 为什么要进行探索性数据分析? (Why Exploratory Data Analysis?) You might have heard that before proceed ...

  4. abcd选项后的数据分析_引入新的数据abcs

    abcd选项后的数据分析 In 2020, it's simply not enough to collect data about your company to be "data-dri ...

  5. 人口logistic模型公式_最新人口指数增长模型和logistic模型教学文案

    根据美国人口从1790年到1990年间的人口数据(如下表),确定人口指数增长模型和Logistic 模型中的待定参数,估计出美国2010年的人口,同时画出拟合效果的图形. 表1 美国人口统计数据 指数 ...

  6. python大数据项目_(价值1280)大数据项目实战之Python金融应用编程

    朱彤老师,2009年博士毕业于北京大学光华管理学院金融系,对金融.数据分析与统计有着较为深刻的理解,多年来一直持续跟踪和研究金融量化分析与数据统计相关领域的进展与发展,对概率论.随机过程及其在金融中的 ...

  7. 如何成为python 数据分析师_成为一名数据分析师,应该掌握怎样的技术栈?

    数据分析师是不易被人工智能取代的新兴职业,相比算法工程师.人工智能工程师而言比较好入门.学好数据分析,也可为进一步的数据科学.机器学习打下一定的基础. 最近我知乎了各种如何学习数据分析之类的话题,ge ...

  8. python体测成绩数据分析_【Python数据分析】四级成绩分布 -matplotlib,xlrd 应用

    最近获得了一些四级成绩数据,大概500多个,于是突发奇想是否能够看看这些成绩数据是否满足所谓的正态分布呢?说干就干,于是有了这篇文章. 文章顺带介绍了xlrd模块的一些用法和matplotlib画自定 ...

  9. 用python 入门数据科学_如何高效入门数据科学?

    链接散落的教程文章,做个详细的导读,助你更高效入门数据科学. 问题 2017年6月以来,我陆续在自己的简书专栏<玉树芝兰>里,写了一系列数据科学教程. 这源于一次研究生课编程工作坊尝试.受 ...

  10. python爬取淘宝数据魔方_《淘宝数据魔方技术架构解析》阅读笔记

    淘宝网拥有国内最具商业价值的海量数据.截至当前,每天有超过30亿的店铺.商品浏览记录,10亿在线商品数,上千万的成交.收藏和评价数据.如何从这些数据中挖掘出真正的商业价值,进而帮助淘宝.商家进行企业的 ...

最新文章

  1. apache vhost
  2. 【消息队列】kafka是如何保证消息不被重复消费的
  3. *【计蒜客 - 蓝桥训练】人以群分(二分 + dp)
  4. 想做大数据的,可以看看这个学习路线,超全!
  5. 23种设计模式(十八)状态变化之备忘录
  6. 内存中的 html 网页,网页制作使用html-webpack-plugin'入再内存中生成 html 页面插件...
  7. 【大数据部落】R在GIS中用ggmap地理空间数据分析
  8. Android 四大组件学习之BroadcastReceiver四
  9. 【易实战】Spring Cloud Greenwich Ribbon:负载均衡的服务调用
  10. Python快速入门教材推荐!
  11. pcb小分享——PCB板组成部分有哪些?
  12. C++ std::condition_variable::notify_one()与notify_all()
  13. ubuntu 保存命令行操作记录
  14. PowerDesigner 15及破解补丁下载
  15. 微信小程序大全之100荐:301~400
  16. Unexpected Exception caught setting 异常解决记录
  17. JavaScript写移动端答题网页程序
  18. P3303 [SDOI2013]淘金
  19. Principal Components Regression, Pt.1: The Standard Method
  20. 华为模拟器 eNSP 基本配置命令

热门文章

  1. Fedora 安装 WPS
  2. Android TTS实现简单阅读器(一)
  3. 百度网盘资源搜索网站大全
  4. 微积分中数学符号的由来
  5. 我的世界java 4k_我的世界:原版VS“4K光影”牺牲2块显卡,让你看看差距有多大!...
  6. SSh框架的整合流程
  7. linux opera java,Ubuntu Linux下的 Opera 安装
  8. C4D常用快捷键与自定义快捷键分享
  9. 全球人工智能发展白皮书
  10. ABAQUS后处理常用功能