《利用Python进行数据分析》笔记---第2章--1880-2010年间全美婴儿姓名
2017-08-01 10:16
316 查看
写在前面的话:
实例中的所有数据都是在GitHub上下载的,打包下载即可。地址是:http://github.com/pydata/pydata-book
还有一定要说明的:
我使用的是Python2.7,书中的代码有一些有错误,我使用自己的2.7版本调通。# coding: utf-8 import pandas as pd import numpy as np names1880 = pd.read_csv('D:\Source Code\pydata-book-master\ch02\\names\yob1880.txt', names=['name','sex','births']) names1880 names1880.groupby('sex').births.sum() years = range(1880, 2011) pieces = [] columns = ['name','sex','births'] for year in years: path = 'D:\Source Code\pydata-book-master\ch02\\names\yob%d.txt' %year frame = pd.read_csv(path, names=columns) frame['year'] = year pieces.append(frame) names = pd.concat(pieces,ignore_index=True) names total_births = names.pivot_table('births', index='year', columns='sex', aggfunc=sum) total_births.tail() total_births.plot(title='Total births by sex and year') def add_group(group): births = group.births.astype(float) group['prop'] = births / births.sum() return group names = names.groupby(['year','sex']).apply(add_group) names np.allclose(names.groupby(['year','sex']).prop.sum(),1) def get_top1000(group): return group.sort_index(by='births',ascending=False)[:1000] grouped = names.groupby(['year','sex']) top1000 = grouped.apply(get_top1000) top1000 boys = top1000[top1000.sex == 'M'] girls = top1000[top1000.sex == 'F'] total_births = top1000.pivot_table('births', index='year', columns='name', aggfunc=sum) total_births subset = total_births[['John','Harry','Mary','Marilyn']] subset.plot(subplots=True,figsize=(12,10),grid=False,title="Number of births per year") table = top1000.pivot_table('prop',index='year',columns='sex',aggfunc=sum) table.plot(title='sum of table1000.prop by year and sex',yticks=np.linspace(0,1.2,13),xticks=range(1880,2020,10)) df = boys[boys.year == 2010] df prop_cumsum = df.sort_index(by='prop', ascending=False).prop.cumsum() prop_cumsum[:10] prop_cumsum.searchsorted(0.5) df = boys[boys.year == 1900] in1900 = df.sort_index(by='prop', ascending=False).prop.cumsum() in1900.searchsorted(0.5)+1 def get_quantile_count(group, q=0.5): group = group.sort_index(by='prop',ascending=False) return group.prop.cumsum().searchsorted(q)+1 diversity = top1000.groupby(['year','sex']).apply(get_quantile_count) diversity = diversity.unstack('sex') diversity.head() get_last_letter = lambda x:x[-1] last_letter = names.name.map(get_last_letter) last_letter.name = 'last_letter' table = names.pivot_table('births', index=last_letter, columns=['sex','year'], aggfunc=sum) subtable = table.reindex(columns=[1910,1960,2010], level='year') subtable.head() subtable.sum() letter_prop = subtable / subtable.sum().astype(float) import matplotlib.pyplot as plt fig,axex = plt.subplots(2,1,figsize=(10,8)) letter_prop['M'].plot(kind='bar',rot=0,ax=axex[0],title='Male') letter_prop['F'].plot(kind='bar',rot=0,ax=axex[1],title='Female',legend=False) letter_prop = table / table.sum().astype(float) dny_ts = letter_prop.ix[['d','n','y'],'M'].T dny_ts.head() dny_ts.plot() all_names = top1000.name.unique() mask = np.array(['lesl' in x.lower() for x in all_names]) lesley_like = all_names[mask] lesley_like filtered = top1000[top1000.name.isin(lesley_like)] filtered.groupby('name').births.sum() table = filtered.pivot_table('births', index='year', columns='sex', aggfunc = 'sum') table = table.div(table.sum(1), axis = 0) table.tail() table.plot(style={'M':'k-','F':'k--'})
相关文章推荐
- ch02-1880-2010年间全美婴儿姓名
- 数据分析:1880 —— 2020全美婴儿姓名
- 《利用Python进行数据分析》笔记---第2章--来自bit.ly的1.usa.gov数据
- 利用python进入数据分析之全美婴儿姓名分析
- 《利用Python进行数据分析》笔记---第2章--MovieLens 1M数据集
- 学习JAVA多线程编程 --- 《JAVA多线程编程核心技术》第2章 对象及变量的并发访问 笔记
- [Effective JavaScript 笔记]第2章:变量作用域--个人总结
- 快学Scala第2章–控制结构和函数 笔记
- 【C++ Primer学习笔记】第2章:变量和基本类型
- 山东中医药大学计算机科学与技术2班王鑫童数据结构第2章笔记总结
- 浪潮优派培训Java笔记:第2章 数据类型
- 阅读徐宜生《Android群英传》的笔记——第2章 Android开发工具新接触
- 《UNIX环境高级编程》笔记:第2章 UNIX标准及实现
- 《利用Python进行数据分析》笔记---第6章数据加载、存储与文件格式
- 【笔记】《WebGL编程指南》学习-第2章WebGL入门(5-通过鼠标点击画点)
- 笔记:《C++ Primer》第1章和第2章
- 《利用Python进行数据分析》笔记及案例
- C# 2010 从入门到精通 学习笔记1 第2章 使用变量、操作符和表达式
- 数据集合与分组运算 《利用python进行数据分析》笔记,第9章
- 高性能JavaScript 笔记之 第2章 数据访问