利用python做数据分析(五)-读取合并多个文件

简介: pieces=[]columns=['name','sex','births']for year in range(1880,2011): path=('C:\\Users\\ec...
pieces=[]
columns=['name','sex','births']
for year in range(1880,2011):
    path=('C:\\Users\\ecaoyng\\Desktop\\work space\\Python\\py_for_analysis\\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

names将所有的数据整合到单个DataFrame中
- concat默认将多个DataFrame整合到一起
- ignore_index=True, 因为我们不希望保留read_csv所返回的原始行号
可以得到结果集为:
这里写图片描述
注意index的id,若不加ignore_index,则得到的结果集是
这里写图片描述
看出区别了吧。

利用groupby和pivot_table在sex和year级别上对其进行聚合了

table_births=pd.pivot_table(names,index=['year'],columns='sex',values=['births'],aggfunc=sum)
table_births.tail()

这里写图片描述

作图

table_births.plot(title='Total births by sex and year')

这里写图片描述

下面我们要统计百分比,再来看下原始的names:
这里写图片描述
接着groupby year

names.groupby(['year']).births.sum()[:5]

year
1880 201486
1881 192703
1882 221538
1883 216954
1884 243466
Name: births, dtype: int64

现在想男女分开看:

names.groupby(['year','sex']).births.sum()[:5]

year sex
1880 F 90993
M 110493
1881 F 91955
M 100748
1882 F 107851

下面来计算比例,并增加一列。astype的作用是类型转换。

def add_prop(group):
    births=group.births.astype(float)
    group['prop']=births/births.sum()
    return group
names=names.groupby(['year','sex']).apply(add_prop)
names

这里写图片描述

之后可以进行完整性认证,比如prop的和是否为1

np.allclose(names.groupby(['year','sex']).prop.sum(),1)

返回TRUE


现在我想取一个子集,比如year,sex groupby的头1000个

def get_top1000(group):
    return group.sort_values(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=='M']

制作透视表:

total_birth=pd.pivot_table(top1000,index=['year'],columns='name',values=['births'],aggfunc=sum)

这里写图片描述

total_birth.births['John']

year
1880 9701.0
1881 8795.0
1882 9597.0
1883 8934.0
1884 9427.0
1885 8801.0
1886 9074.0
1887 8165.0
1888 9300.0

total_birth.births['John'].plot(title='John')

这里写图片描述

现在查看这最热的1000个名字所占全部名字的比例

table=pd.pivot_table(top1000,index=['year'],columns='sex',values=['prop'],aggfunc=sum)

这里写图片描述

table.plot(title='Sum of table1000.prob by year and sex', yticks=np.linspace(0,1.2,13),xticks=range(1880,2020,10))

这里写图片描述

df=boys[boys.year==2010]
prop_cumsum=df.sort_values(by='prop',ascending=False).prop.cumsum()

cumsum是计算累计和
261874 0.842953
261875 0.843055
261876 0.843156
Name: prop, dtype: float64

prop_cumsum.searchsorted(0.5)

array([116], dtype=int64),即最终结果是117

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

year sex
1880 F [38]
M [14]
1881 F [38]
M [14]
1882 F [38]
M [15]
1883 F [39]
M [15]

diversity.unstack('sex')

这里写图片描述

目录
相关文章
|
7天前
|
机器学习/深度学习 数据挖掘 计算机视觉
python数据分析工具SciPy
【4月更文挑战第15天】SciPy是Python的开源库,用于数学、科学和工程计算,基于NumPy扩展了优化、线性代数、积分、插值、特殊函数、信号处理、图像处理和常微分方程求解等功能。它包含优化、线性代数、积分、信号和图像处理等多个模块。通过SciPy,可以方便地执行各种科学计算任务。例如,计算高斯分布的PDF,需要结合NumPy使用。要安装SciPy,可以使用`pip install scipy`命令。这个库极大地丰富了Python在科学计算领域的应用。
12 1
|
7天前
|
存储 Python
用Python实现批量下载文件——代理ip排除万难
用Python实现批量下载文件——代理ip排除万难
|
7天前
|
JSON 关系型数据库 数据库
《Python 简易速速上手小册》第6章:Python 文件和数据持久化(2024 最新版)
《Python 简易速速上手小册》第6章:Python 文件和数据持久化(2024 最新版)
34 0
|
7天前
|
数据挖掘 索引 Python
Python 读写 Excel 文件
Python 读写 Excel 文件
12 0
|
7天前
|
数据安全/隐私保护 Python
Python文件与目录操作:面试中的高频考点
【4月更文挑战第15天】本文介绍了Python文件和目录操作的面试重点,包括文件的读写、目录遍历及权限管理。强调了文件关闭、异常处理、特殊文件判断以及权限位和权限字符串的理解。提供了代码示例,如读写文件、遍历目录和更改文件权限,帮助读者在面试中表现出色。掌握这些技能将对编程求职之路大有裨益。
17 0
|
7天前
|
数据可视化 数据挖掘 Python
Python中数据分析工具Matplotlib
【4月更文挑战第14天】Matplotlib是Python的数据可视化库,能生成多种图表,如折线图、柱状图等。以下是一个绘制简单折线图的代码示例: ```python import matplotlib.pyplot as plt x = [1, 2, 3, 4, 5] y = [2, 4, 6, 8, 10] plt.figure() plt.plot(x, y) plt.title('简单折线图') plt.xlabel('X轴') plt.ylabel('Y轴') plt.show() ```
12 1
|
7天前
|
数据采集 SQL 数据可视化
Python数据分析工具Pandas
【4月更文挑战第14天】Pandas是Python的数据分析库,提供Series和DataFrame数据结构,用于高效处理标记数据。它支持从多种数据源加载数据,包括CSV、Excel和SQL。功能包括数据清洗(处理缺失值、异常值)、数据操作(切片、过滤、分组)、时间序列分析及与Matplotlib等库集成进行数据可视化。其高性能底层基于NumPy,适合大型数据集处理。通过加载数据、清洗、分析和可视化,Pandas简化了数据分析流程。广泛的学习资源使其成为数据分析初学者的理想选择。
13 1
|
9天前
|
存储 监控 开发工具
对象存储OSS产品常见问题之python sdk中的append_object方法支持追加上传xls文件如何解决
对象存储OSS是基于互联网的数据存储服务模式,让用户可以安全、可靠地存储大量非结构化数据,如图片、音频、视频、文档等任意类型文件,并通过简单的基于HTTP/HTTPS协议的RESTful API接口进行访问和管理。本帖梳理了用户在实际使用中可能遇到的各种常见问题,涵盖了基础操作、性能优化、安全设置、费用管理、数据备份与恢复、跨区域同步、API接口调用等多个方面。
40 9
|
10天前
|
Python 数据挖掘 存储
Python 数据分析(PYDA)第三版(七)(4)
Python 数据分析(PYDA)第三版(七)
34 1
|
Python Shell 存储
Python 数据分析(PYDA)第三版(七)(3)
Python 数据分析(PYDA)第三版(七)
46 1
Python 数据分析(PYDA)第三版(七)(3)