1.查看2015-2017年每年幸福指数Happiness Rank排名前5和后5的国家
所用的数据集2015、2016、2017.csv文件可以去百度,3个文件存放在4个代码所在目录code的同级目录data下
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']='SimHei'
plt.rcParams['axes.unicode_minus']=False
#1.查看2015-2017年每年幸福指数Happiness Rank排名前5和后5的国家
def Happiness_Rank_5(year):
if (2017==year):
#2017年指标命名不同于其他2年
columns=['Country','Happiness.Rank','Happiness.Score']
load_data=pd.read_csv("../data/{}.csv".format(year))[columns]
y1=load_data['Happiness.Score'][:5]
y2=load_data['Happiness.Score'][-5:]
else:
#2015年和2016年
columns=['Country','Happiness Rank','Happiness Score']
load_data=pd.read_csv("../data/{}.csv".format(year))[columns]
y1=load_data['Happiness Score'][:5]
y2=load_data['Happiness Score'][-5:]
data1_5=load_data[:5]
data5_1=load_data[-5:]
#可视化:幸福指数排名前5国家数据
plt.figure(figsize=(15,6))
ax=plt.subplot(1,2,1)
plt.xlabel('Country',fontsize=20)
plt.ylabel('Happiness Score',fontsize=20)
plt.xticks(range(5),data1_5.Country,fontsize=15)
plt.yticks(fontsize=15)
plt.ylim((6,7.6))
plt.bar(range(5),y1,width=0.5)
plt.title('{}年幸福指数排名前5国家'.format(year),color='red',fontsize=20)
plt.show()
print("{}年幸福指数排名前5国家数据:\n".format(year),data1_5)
#可视化:幸福指数排名后5国家数据
p=plt.figure(figsize=(15,6))
ax=plt.subplot(1,2,2)
plt.xlabel('Country',fontsize=20)
plt.ylabel('Happiness Score',fontsize=20)
plt.xticks(range(5),data5_1.Country,fontsize=15)
plt.yticks(fontsize=15)
plt.ylim((2,3.6))
plt.bar(range(5),y2,width=0.5,color='red')
plt.title('{}年幸福指数排名后5国家'.format(year),color='green',fontsize=20)
plt.show()
print("{}年幸福指数排名后5国家数据:\n".format(year),data5_1)
#2015年前5和后5国家
Happiness_Rank_5(2015)
#2016年前5和后5国家
Happiness_Rank_5(2016)
#2017年前5和后5国家
Happiness_Rank_5(2017)






2.统计2015-2016年某区域区域幸福指标数据(可以传各个列名参数进行统计,不只限于幸福指数)
#2.统计2015-2016年某区域区域幸福指标数据(可以传各个列名参数进行统计,不只限于幸福指数)
def region_Happiness(year,name,area):
if (2017==year):
#2017年没有分区域,用国家先与2016年数据关联,这样就有了区域
columns=['Country','Happiness.Score','Economy..GDP.per.Capita.','Family',\
'Health..Life.Expectancy.','Freedom','Trust..Government.Corruption.','Generosity']
data=pd.read_csv('../data/{}.csv'.format(year))[columns]
columns2=['Country','Region','Happiness Score','Economy (GDP per Capita)','Family',\
'Health (Life Expectancy)','Freedom','Trust (Government Corruption)','Generosity']
data2=pd.read_csv('../data/2016.csv')[columns2]
#将2017年与2016年合并,data2为2016年,相同列名会变成column_x和column_y
data=pd.merge(data2,data,how='left',on='Country')
#更改2017年的column_y为column
data=data.rename(columns={'Family_y':'Family','Freedom_y':'Freedom','Generosity_y':'Generosity'})
else:
columns=['Country','Region','Happiness Score','Economy (GDP per Capita)','Family',\
'Health (Life Expectancy)','Freedom','Trust (Government Corruption)','Generosity']
data=pd.read_csv('../data/{}.csv'.format(year))[columns]
#可视化:某区域幸福指标数据
plt.figure(figsize=(45,15))
data=data[data['Region']==area]
plt.xlabel('Country',fontsize=50)
plt.ylabel(name,fontsize=50)
plt.xticks(range(data.shape[0]),data.Country,fontsize=40,rotation='vertical')#让横轴的国家名竖着显示
plt.yticks(fontsize=40)
#这个y轴取值范围只针对Happiness Score,对于其他列不合适
plt.ylim((4.5,7.75))
plt.bar(range(data.shape[0]),data[name],width=0.5)
plt.title('{}年{}的{}指标统计图'.format(year,area,name),color='red',fontsize=50)
plt.show()
#文字只输出国家、区域、指标数据
columns3=['Country','Region',name]
data=data[columns3]
print("{}年{}的{}指标数据为:\n".format(year,area,name),data)
#统计2015年某区域幸福指标数据
year=2015
area='Western Europe'
region_Happiness(year,'Happiness Score',area)
#region_Happiness(year,'Economy (GDP per Capita)',area)
#region_Happiness(year,'Family',area)
#region_Happiness(year,'Health (Life Expectancy)',area)
#region_Happiness(year,'Freedom',area)
#region_Happiness(year,'Trust (Government Corruption)',area)
#region_Happiness(year,'Generosity',area)
#统计2016年某区域幸福指标数据
year=2016
area='Western Europe'
region_Happiness(year,'Happiness Score',area)
#region_Happiness(year,'Economy (GDP per Capita)',area)
#region_Happiness(year,'Family',area)
#region_Happiness(year,'Health (Life Expectancy)',area)
#region_Happiness(year,'Freedom',area)
#region_Happiness(year,'Trust (Government Corruption)',area)
#region_Happiness(year,'Generosity',area)
#统计2017年某区域幸福指标数据
year=2017
area='Western Europe'
region_Happiness(year,'Happiness.Score',area)
#region_Happiness(year,'Economy..GDP.per.Capita.',area)
#region_Happiness(year,'Family',area)
#region_Happiness(year,'Health..Life.Expectancy.',area)
#region_Happiness(year,'Freedom',area)
#region_Happiness(year,'Trust..Government.Corruption.',area)
#region_Happiness(year,'Generosity',area)






3.2015-2016年幸福指数上升最快和下降最快的国家
#3.2015-2016年幸福指数上升最快和下降最快的国家
columns=['Country','Region','Happiness Rank','Happiness Score','Economy (GDP per Capita)','Family',\
'Health (Life Expectancy)','Freedom','Trust (Government Corruption)','Generosity']
data_2015=pd.read_csv('../data/2015.csv')[columns]
data_2016=pd.read_csv('../data/2016.csv')[columns]
#将2015年与2016年合并,相同列名会变成column_x和column_y
data=pd.merge(data_2015,data_2016,how='left',on='Country')
#将2年的排名差放在Happiness Rank_x
data['Happiness Rank_x']=data['Happiness Rank_y']-data['Happiness Rank_x']
#找到差最大和最小的行
data1=data[data['Happiness Rank_x']==max(data['Happiness Rank_x'])]
data2=data[data['Happiness Rank_x']==min(data['Happiness Rank_x'])]
#输出国家、排名差
print("2015-2016年上升最快的是:\n{}\n上升了{}名".format(data1['Country'],max(data['Happiness Rank_x'])))
print("2015-2016年下降最快的是:\n{}\n下降了{}名".format(data2['Country'],min(data['Happiness Rank_x'])))
#可视化:2015-2016年所有国家排名差数据
name='Happiness Rank_x'
plt.figure(figsize=(40,15))
plt.xlabel('Country',fontsize=50)
plt.ylabel(name,fontsize=50)
plt.xticks(range(data.shape[0]),data.Country,fontsize=20,rotation='vertical')
plt.yticks(fontsize=40)
plt.bar(range(data.shape[0]),data[name],width=0.5,color='red')
plt.title('2015-2016年幸福指数排名差图(以2015年索引为准)',color='green',fontsize=50)
plt.show()
#可视化:2015-2016年所有区域排名差
columns3=['Country','Region_x','Happiness Rank_x']
data2= data[columns3]
areas=set(data2['Region_x'])
for area in areas:
plt.figure(figsize=(20,8))
data3=data2[data2['Region_x'] == area]
plt.bar(data3['Country'],data3['Happiness Rank_x'])
plt.xticks(fontsize=15,rotation='vertical')
plt.yticks(fontsize=15)
plt.ylabel("Happiness Rank_x",fontsize=20)
plt.xlabel("Country",fontsize=20)
plt.title('2015-2016年{}的国家幸福指数排名差图'.format(area),color='red',fontsize=20)
plt.show()
#2016-2017幸福指数上升最快和下降最快的国家
columns2=['Country','Happiness.Rank','Happiness.Score','Economy..GDP.per.Capita.','Family',\
'Health..Life.Expectancy.','Freedom','Trust..Government.Corruption.','Generosity']
data_2017=pd.read_csv('../data/2017.csv')[columns2]
#将2016年与2017年合并,相同列名会变成column_x和column_y
data=pd.merge(data_2016,data_2017,how='left',on='Country')
#将2年的排名差放在Happiness Rank
data['Happiness Rank']=data['Happiness.Rank']-data['Happiness Rank']
#找到差最大和最小的行
data1=data[data['Happiness Rank']==max(data['Happiness Rank'])]
data2=data[data['Happiness Rank']==min(data['Happiness Rank'])]
#输出国家、排名差
print("\n2016-2017年上升最快的是:\n{}\n上升了{}名".format(data1['Country'],max(data['Happiness Rank'])))
print("2016-2017年下降最快的是:\n{}\n下降了{}名".format(data2['Country'],min(data['Happiness Rank'])))
#可视化:2016-2017年所有国家排名差数据
name='Happiness Rank'
plt.figure(figsize=(40,15))
plt.xlabel('Country',fontsize=50)
plt.ylabel(name,fontsize=50)
plt.xticks(range(data.shape[0]),data.Country,fontsize=20,rotation='vertical')
plt.yticks(fontsize=40)
plt.bar(range(data.shape[0]),data[name],width=0.5,color='red')
plt.title('2016-2017年幸福指数排名差图(以2016年索引为准)',color='green',fontsize=50)
plt.show()
#可视化:2016-2017年所有区域排名差
columns3=['Country','Region','Happiness Rank']
data2= data[columns3]
areas=set(data2['Region'])
for area in areas:
plt.figure(figsize=(20,8))
data3=data2[data2['Region'] == area]
plt.bar(data3['Country'],data3['Happiness Rank'])
plt.xticks(fontsize=15,rotation='vertical')
plt.yticks(fontsize=15)
plt.ylabel("Happiness Rank",fontsize=20)
plt.xlabel("Country",fontsize=20)
plt.title('2016-2017年{}的国家幸福指数排名差图'.format(area),color='red',fontsize=20)
plt.show()

最后的图太多了,就不复制了
4.中国3年的幸福指数变化
#4.中国3年的幸福指数变化
def China_Happiness():
columns=['Country','Region','Happiness Score','Economy (GDP per Capita)','Family',\
'Health (Life Expectancy)','Freedom','Trust (Government Corruption)','Generosity']
columns2=['Country','Happiness.Score','Economy..GDP.per.Capita.','Family',\
'Health..Life.Expectancy.','Freedom','Trust..Government.Corruption.','Generosity']
data_2015=pd.read_csv("../data/2015.csv")[columns]
data_2016=pd.read_csv("../data/2016.csv")[columns]
data_2017=pd.read_csv("../data/2017.csv")[columns2]
data_2015=data_2015[data_2015['Country']=='China']
data_2016=data_2016[data_2016['Country']=='China']
data_2017=data_2017[data_2017['Country']=='China']
#将Happiness.Score改为Happiness Score,方便之后的数据堆叠
data_2017=data_2017.rename(columns={'Happiness.Score':'Happiness Score'})
columns=[ 'Country','Happiness Score' ]
data_2015=data_2015[columns]
data_2016=data_2016[columns]
data_2017=data_2017[columns]
#将3年China的数据堆叠
data=pd.concat([data_2015,data_2016,data_2017])
print("2015-2017年China的幸福指数:\n",data)
plt.figure(figsize=(10,7))
plt.xlabel('Happiness Score',fontsize=20)
plt.ylabel('China',fontsize=20)
plt.ylim((4.5,5.5))
plt.xticks(range(data.shape[0]),['2015','2016','2017'],fontsize=15)
plt.yticks(fontsize=15)
plt.bar(range(data.shape[0]),data['Happiness Score'],width=0.3,color='red')
plt.title('2015-2017年China幸福指数变化图',fontsize=20,color='green')
plt.show()
China_Happiness()

337

被折叠的 条评论
为什么被折叠?



