python数据分析案例报告(python数据分析案例详解)

http://www.itjxue.com  2023-03-30 14:10  来源:未知  点击次数: 

标普100案例分析 —— 带着Python玩金融(5)

本文将带着你使用Python对标普100数据进行简单的分析,你会学到:

标准普尔100指数 用来衡量大公司的股票表现,它由多个行业的100家主要公司构成。2017年标普100在各行业的比例如下图所示。

本文将要分析的数据如下表所示,它由四列数据构成,分别是公司名(Name),行业(Sector),股价(Price)和每股盈余(EPS)。

我们将这四列数据分别存储在四个Python列表中。

先来用切片的方法观察下数据。比如查看前四家公司的名称。

或者输出最后一家公司的所有信息。

市盈率 (Price to Earnings ratio),也称股价收益比率,由股价除以每年度每股盈余(EPS)得到,它是用来衡量股价水平是否合理的指标之一。

为了方便计算市盈率,我们首先将数据从Python列表类型转换为NumPy数组。

NumPy数组的优势是它可以直接对数组进行运算,而这一点Python列表是做不到的。比如计算市盈率 pe ,我们可以直接将数组 prices 除以数组 earnings 。

接下来我们就具体行业来进行分析,比如对于IT行业,我们首先需要筛选出哪些公司属于这一行业。

用同样的方法,筛选出必需消费品行业的公司和市盈率。

筛选出IT和必需消费品行业的数据后,我们来计算这两个行业市盈率的均值和标准差。

首先用散点图来观察这两个行业中每一家公司的市盈率。这里使用Python中常用的绘图工具包 matplotlib 。

我们注意到,上图的右上角有一IT公司的市盈率特别高。若某股票的市盈率高于同类股票,往往意味着该股有较高的增长预期。所以让我们进一步来观察IT行业的市盈率分布,在这里直方图可以用来查看数据的分布情况。

现在可以更直观的看到在直方图的右侧有一离群值,它具有很高的市盈率。我们可以使用布尔索引找到这家市盈率很高的公司。

注:本文是 DataCamp 课程 Intro to Python for Finance 的学习笔记。

Python数据分析(八):农粮组织数据集探索性分析(EDA)

这里我们用 FAO(Food and Agriculture Organization) 组织提供的数据集,练习一下如何利用python进行探索性数据分析。

我们先导入需要用到的包

接下来,加载数据集

看一下数据量,

看一下数据的信息,

我们先来看一下variable,variable_full这两列的信息,

看一下统计了多少国家,

看一下有多少个时间周期,

看一下时间周期有哪些,

我们看一下某一列某个指标的缺失值的个数,比如variable是total_area时缺失值的个数,

我们通过几个维度来进行数据的分析:

我们按照上面的处理继续,现在我们想统计一下对于一个时间周期来说,不同国家在这个周期内的变化情况,

我们也可以按照国家分类,查看某个国家在不同时期的变化,

我们还可以根据属性,查看不同国家在不同周期内的变化情况,

我们还可以给定国家和指标,查看这个国家在这个指标上的变化情况,

我们还有region(区域)没有查看,我们来看一下:

通过上图可以看出,区域太多,不便于观察,我们可以将一些区域进行合并。减少区域数量有助于模型评估,可以创建一个字典来查找新的,更简单的区域(亚洲,北美洲,南美洲,大洋洲)

我们来看一下数据变化,

紧接着上面的数据处理,我们重新导入一下包,这次有一些新包,

我们看一下水资源的情况,

通过上图可以看出只有一小部分国家报告了可利用的水资源总量,这些国家中只有极少数国家拥有最近一段时间的数据,我们将删除变量,因为这么少的数据点会导致很多问题。

接下来我们看一下全国降雨指数,

全国降雨在2002年以后不再报到,所以我们也删除这个数据,

我们单独拿出一个洲来进行分析,举例南美洲,我们来看一下数据的完整性,

我们也可以指定不同的指标,

接下来,我们使用 pandas_profiling 来对单变量以及多变量之间的关系进行统计一下,

这里我们要计算的是,比如

我们按照 rural_pop 从小到大进行排序,发现的确有几个国家的农村人口是负数,

人口数目是不可能小于0,所以这说明数据有问题,存在脏数据,如果做分析预测时,要注意将这些脏数据处理一下。

接下来我们看一下偏度,我们规定,

正态分布的偏度应为零,负偏度表示左偏,正偏表示右偏。

偏度计算完后,我们计算一下峰度, 峰度也是一个正态分布,峰度不能为负,只能是正数 ,越大说明越陡峭,

接下来我们看一下,如果数据分布非常不均匀该怎么办呢,

上图是2013-2017年国家总人数的分布,通过上图我们发现,人口量少于200000(不考虑单位)的国家非常多,人口大于1200000的国家非常少,如果我们需要建模的话,这种数据我们是不能要的。这个时候我们应该怎么办呢?

通常,遇到这种情况,使用 log变换 将其变为正常。 对数变换 是数据变换的一种常用方式,数据变换的目的在于使数据的呈现方式接近我们所希望的前提假设,从而更好的进行统计推断。

接下来,我们用log转换一下,并看一下它的偏度和峰值,

可以看出偏度下降了很多,减少了倾斜。

可以发现峰度也下降了,接下来我们看一下经过log转换后的数据分布,

虽然数据还有一些偏度,但是明显好了很多,呈现的分布也比较标准。

首先我们先来看一下美国的人口总数随时间的变化,

接下来,我们查看北美洲每个国家人口总数随着时间的变化,

这个时候我们发现,一些国家由于人口数量本身就少,所以整个图像显示的不明显,我们可以改变一下参照指标,那我们通过什么标准化?我们可以选择一个国家的最小、平均、中位数、最大值...或任何其他位置。那我们选择最小值,这样我们就能看到每个国家的起始人口上的增长。

我们也可以用热度图来展示,用颜色的深浅来比较大小关系,

接下来我们分析一下水资源的分布情况,

我们可以进行一下log转换,

我们用热度图画一下,

连续值可以画成散点图,方便观看,

我们来看一下随着季节变化,人均GDP的变化情况,

相关程度:

相关度量两个变量之间的线性关系的强度,我们可以用相关性来识别变量。

现在我们单独拿出来一个指标分析是什么因素与人均GDP的变化有关系,正相关就是积极影响,负相关就是消极影响。

当我们在画图的时候也可以考虑一下利用bined设置一下区间,比如说连续值我们可以分成几个区间进行分析,这里我们以人均GDP的数量来进行分析,我们可以将人均GDP的数据映射到不同的区间,比如人均GDP比较低,比较落后的国家,以及人均GDP比较高,比较发达的国家,这个也是我们经常需要的操作,

做一下log变换,这里是25个bin

我们指定一下分割的标准,

我们还可以看一下人均GDP较低,落后国家的内部数据,下面我们看一下内部数据分布情况,用boxplot进行画图,

对于这部分的分布,我们还可以统计看一下其他指标,如下图所示,我们还可以看一下洪水的统计信息,

2020年世界各国总人口数据分析(python)

学习python尝试的第一个分析项目,分析思路还是有些初级,重点在对工具的练习上吧~

练习了数据分析维度的思考,熟悉了数据清洗方法、数据分析方法及可视化等内容。

源数据中的数据说明如下:

●Country (or dependency)-包含其他国家/地区的名称(235个国家/地区)

●Population (2020)-包含不同国家的人口

●Yearly Change-每年的人口变化

●Net Change-人口的净变化

●Density (P/Km2)-人口密度

●Land Area (Km2)-以平方公里为单位的土地面积

●Migrants (net)-表国家的移民

●Fert. Rate-各个国家的生育率或增长率

●Med. Age-该国家的平均年龄(中年或平均年龄)寿命

●Urban Pop %-城市人口比例

●World Share-各个国家对世界份额贡献的人口

2、提供分析思路如下:

观察到列标签名比较乱(包括一些小括号、空格、百分号),重命名调整下~

--》查看字段属性

根据info和describe方法返回的结果,意识到很多数据列没有返回结果,原因是字段类型不为数值型,且存在“脏数据”,需解决的脏数据问题如下:

①字段值中的“%”及“N.A.”符号需去掉;

②Migrants列存在值缺失;

④“YearlyChange”?、“Fert.Rate?”、“Med.Age”、“UrbanPop”、“WorldShare”字段属性均不为数值型,需要转换;

--》处理百分号:

查看含有“N.A.”的列,这里利用“df==“N.A.”返回一个值都为bool类型的dataframe,用describe方法可以观察出包含特定值字段的列标签;

通过观察得出,“Fert.Rate?”、“Med.Age”、“UrbanPop” 三列值中含有“N.A.”字符;

此案例中的的“N.A.”字符串均考虑用0替换;

--》处理“N.A.”字符:

检查结果显示清洗成功;

--》接下来处理“Migrants”列的缺失值(用0值填充):

--》完成数据类型转换:

至此数据清洗完成~

按照三部分展开:

①人口总数分析

分析方向:考察国家人口总数前10名及倒数10名的国家排名情况,考察前十名国家人口和国土面积与各自全球总数的占比情况

--》绘图准备

--》准备人口总数前10及倒数10名国家的数据,并分别绘制条形图

生成的排名结果如上图;

可以看到前10名国家中:有5个(China、India、Indonesia、Bangladesh、Pakistan)来自亚洲,2个(United States、Mexico)来自北美,1个(Brazil)来自南美,一个(Russia)来自欧洲,一个(Nigeria)来自非洲

针对人口总数前10名的国家,分别统计人口总数和陆地总面积占全球总数的比例

绘图结果如下:

●由此可见,这10个国家的陆地总面积占总数的40%,却居住着世界60%的人口;

②人口变化率分析

分析方向:观察各国人口增长率分布情况,以及人口增长率前5名及倒数5名的国家分布情况

--》先观察下各国人口增长率的分布?

?●绝大部分国家的人口增长率在0~3%之间,少数国家的人口增长率属于负值;

--》接下来提取人口增长率前5名和倒数5名的国家,绘制条形图:

?●可以看到人口增长率最高的5个国家里,有4个属于非洲,另外1个在亚洲;人口增长率最低的5个国家,有3个在欧洲地区,另外2个则处于大洋洲和美洲地区;

③各国人口密度分析

分析方向:考察各国人口密度前10名的国家,并且按照人口密度划分等级,考察不同等级的分布情况;

--》绘制人口密度前10名的国家如下:

●上图可知,人口密度国家最高的国家为摩纳哥,其次为中国澳门、新加坡;

把人口密度划分为4个等级:

level_1 人口密集区 >100人/平方千米

level_2? 人口中等区 25~100人/平方千米

level_3? 人口稀少区 1~25人/平方千米

level_4? 人口极稀区 <1人/平方千米

--》按照以上等级规则对人口密度数据进行分区,并新增人口密度等级标签,完成后绘制柱形图;

●由上图可知,绝大部分国家处于人口中等区和人口密集区;

分析方向:考察净移民总数最多的5名国家

--》绘制净移民总数前5名的国家如下:

●前五个国家除了土耳其,都是高度发达的国家;由于美国强大的综合实力,毫无悬念地成为了人们心目中移民的第一选择。

分析方向:

①老龄化程度通常可以用年龄中位数来衡量,考察老龄化程度最高的5个国家

②分析老龄化和城市人口比例的相关性

--》绘制老龄化程度最高的5个国家如下:

●日本、马提尼克、意大利、葡萄牙、希腊为老龄化程度最高的五个国家;

-》接下来考察国家的城市人口比例和年龄中位数的相关性,这里采用一元回归模型进行分析;

-》绘制出来的线性关系如下:

●可以看出国家城市人口比例与老龄化程度存在一定的正相关;

由以上一些简单的分析,可总结出以下结论:

①相比较其他地区,亚非地区的人口数量更多,整体来看人口数量的国家分布非常不平衡,人口数量前10名的国家已经占了全球总人数的60%;

②80%以上国家人口的增长率在0~3%之间,大约10%的国家的人口增长率为负;亚非地区的人口增长率整体偏高;

③80%以上国家均属于人口中等区和人口密集区,即人口密度大于25人/平方千米;

④移民群众倾向于选择美国和其他一些欧洲的发达国家作为移民对象;

⑤国家城市人口比例与老龄化程度存在一定的正相关;

(责任编辑:IT教学网)

更多

推荐思科认证文章