python数据分析综合实践

注: 请各位参考的时候积极发挥主观能动性,尽量以参考思想为核心,不要囿于本代码的细节,要围绕中心思想逻辑展开,创作出具有个人特色和高辨识度的优秀代码。提高个人逻辑思维与代码创作水平,才是本文的根本目的,望知之。

一、数据分布

1、根据最新的数据,将统计数据划分为:(0, 1000]、(1000, 5000]、(5000,10000]、(10000,50000]、(50000, 100000]、(100000,200000]、(200000,500000]、(500000,1000000]、(1000000,5000000]等若干个区间,分别统计各个区间的Country/Region数目。

import pandas as pd
raw_data = pd.read_csv('time_series_covid19_confirmed_global.csv',na_values='NULL')  # 设定'NULL'为缺失值
data = raw_data.drop(['Province/State','Lat','Long',],axis=1)  # 删除无用属性列
fill_na = lambda col:col.fillna('unknow')  # 填充缺失值为unknow
fill_data = data.apply(fill_na, axis=0)
fill_data.isnull().any()  # 检查是否填充成功
data_bin = [0, 1000, 5000, 10000, 50000, 100000, 200000, 500000, 1000000, 5000000]  # 自定义区间边界
data_label = [1, 2, 3, 4, 5, 6, 7, 8, 9]
fill_data["data_range"] = pd.cut(fill_data["6/2/20"], bins=data_bin, labels=data_label, right=True, retbins=False)  # 自定义区间分割并标引
y = []
for i in range(1, 10):
    list_a = []
    for j in range(0, 266):
        if fill_data["data_range"].loc[j] == i:  # 识别标引
            list_a.append(fill_data["Country/Region"].loc[j])  # 按照索引取出对应的Country/Region值
        else:
            continue
    set_a = set(list_a)
    list_b = list(set_a)  # 利用集合的特性去重
    a = len(list_b)
    y.append(a)  # 录入去接分层数据
    print("区间%d的Country/Region数目为%d" %(i, a))

2、绘制上面区间的统计数据分布图(条形图)。

import numpy as np
import matplotlib.pyplot as plt
x = [5,10,15,20,25,30,35,40,45]
change_x = ["(0, 1000]","(1000, 5000]","(5000,10000]","(10000,50000]","(50000, 100000]","(100000,200000]","(200000,500000]","(500000,1000000]","(1000000,5000000]"]
plt.xticks(x, labels=change_x, rotation=20)
plt.bar(x,y,color='b',width=4,label="Figure")
plt.title("COVID-19感染人数区间容量", fontfamily="SimHei")
plt.legend()
plt.savefig('图1.jpg')
plt.show()

二、数据转换

1、找到最新数据排名前15的国家。

sort_data = fill_data.sort_values(by = "6/2/20", ascending = False)
sort_data.index = range(len(sort_data))
sort_data[0:15]

2、构建一个新的DataFrame对象(16 rows,命名为top15_others),包含排名前1515国家的每日数据、及其余国家(其余国家命名为'Others')每日数据的总和。

top_15_others = sort_data.iloc[0:15,0:134]  # 前15行中的数据,除了最后一行的范围标引
a = list(sort_data.iloc[16:267,1:134].sum(axis=0))  # 对2到135列,从第16行到第267行分别求和形成列表
b = ["others"]
others = b + a  # 也可以用insert插入第一个位置
top_15_others.loc[len(top_15_others.index)] = others  # 向dataframe中追加一行数据
top_15_others.index = range(len(top_15_others))  # 重置索引
top_15_others

3、构建一个新的DataFrame(16 rows,命名为increment),包含前1515国家及其余国家(其余国家命名为'Others')的每日增量。

increment = pd.DataFrame(columns=('Country/Region',"第2天增量","第3天增量","第4天增量","第5天增量","第6天增量","第7天增量","第8天增量","第9天增量","第10天增量","第11天增量","第12天增量","第13天增量","第14天增量","第15天增量","第16天增量","第17天增量","第18天增量","第19天增量","第20天增量","第21天增量","第22天增量","第23天增量","第24天增量","第25天增量","第26天增量","第27天增量","第28天增量","第29天增量","第30天增量","第31天增量","第32天增量","第33天增量","第34天增量","第35天增量","第36天增量","第37天增量","第38天增量","第39天增量","第40天增量","第41天增量","第42天增量","第43天增量","第44天增量","第45天增量","第46天增量","第47天增量","第48天增量","第49天增量","第50天增量","第51天增量","第52天增量","第53天增量","第54天增量","第55天增量","第56天增量","第57天增量","第58天增量","第59天增量","第60天增量","第61天增量","第62天增量","第63天增量","第64天增量","第65天增量","第66天增量","第67天增量","第68天增量","第69天增量","第70天增量","第71天增量","第72天增量","第73天增量","第74天增量",	"第75天增量","第76天增量","第77天增量","第78天增量","第79天增量","第80天增量","第81天增量","第82天增量","第83天增量","第84天增量","第85天增量","第86天增量","第87天增量","第88天增量","第89天增量","第90天增量","第91天增量","第92天增量","第93天增量","第94天增量","第95天增量","第96天增量","第97天增量","第98天增量","第99天增量","第100天增量","第101天增量","第102天增量","第103天增量","第104天增量","第105天增量","第106天增量","第107天增量","第108天增量","第109天增量","第110天增量","第111天增量","第112天增量","第113天增量","第114天增量","第115天增量","第116天增量","第117天增量","第118天增量","第119天增量","第120天增量","第121天增量","第122天增量","第123天增量","第124天增量","第125天增量","第126天增量","第127天增量","第128天增量","第129天增量","第130天增量","第131天增量","第132天增量","第133天增量"))
top_15_others_list = list(np.array(top_15_others))  # 上面那一大串不是手动输入的,是从excel里面生成以后文件读写写入进去的,那段代码不知道为什么和这个不是很兼容,因此就删掉只保留结果了
for i in range(0,16):  # 1到16行
    list_data = []
    increment_data_cr = top_15_others_list[i][0]  # 设好备用的Country/Region值
    for j in range(1,133):  # 2到132列(不包括最后一列,因为要用于运算)
        increment_data = top_15_others_list[i][j+1] - top_15_others_list[i][j]  # 前列减后列
        list_data.append(increment_data)  # 追加入原表
    list_data.insert(0,increment_data_cr)  # 插入之前设好的Country/Region值
    increment.loc[len(increment.index)] = list_data
increment.index = range(len(increment))
increment

三、统计趋势

1、统计排名前1515的国家、及其余国家('Others')最新数据的比例,并绘制饼状图。

list_b = []
list_c = []
for i in range(0,16):
    a = top_15_others_list[i][0]
    b = top_15_others_list[i][133]  # 分别取出数据值和标签
    list_b.append(b)
    c = str(a)+ ":" + str(b)  # 合成标签
    list_c.append(c)
explode = (0.1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)  # 最多的那个突出显示
plt.pie(list_b, explode=explode, labels=list_c, autopct='%1.1f%%', shadow=True,startangle=90)  # 90度起绘,立体有阴影
plt.axis('equal')  # 正圆形
plt.title("前15名与其他国家感人人数占总感染人数比", fontfamily="SimHei")
plt.savefig('图2.jpg')
plt.show()

2、绘制以上增量数据集的趋势图(按时间坐标绘制的折线图)。

increment_list = list(np.array(increment))
plt.title("增量数据集的趋势图", fontfamily="SimHei")
plt.xlabel("时间",fontsize=20, fontfamily="SimHei")
plt.ylabel("增量",fontsize=20, fontfamily="SimHei")
change_x = ["第2天增量","第3天增量","第4天增量","第5天增量","第6天增量","第7天增量","第8天增量","第9天增量","第10天增量","第11天增量","第12天增量","第13天增量","第14天增量","第15天增量","第16天增量","第17天增量","第18天增量","第19天增量","第20天增量","第21天增量","第22天增量","第23天增量","第24天增量","第25天增量","第26天增量","第27天增量","第28天增量","第29天增量","第30天增量","第31天增量","第32天增量","第33天增量","第34天增量","第35天增量","第36天增量","第37天增量","第38天增量","第39天增量","第40天增量","第41天增量","第42天增量","第43天增量","第44天增量","第45天增量","第46天增量","第47天增量","第48天增量","第49天增量","第50天增量","第51天增量","第52天增量","第53天增量","第54天增量","第55天增量","第56天增量","第57天增量","第58天增量","第59天增量","第60天增量","第61天增量","第62天增量","第63天增量","第64天增量","第65天增量","第66天增量","第67天增量","第68天增量","第69天增量","第70天增量","第71天增量","第72天增量","第73天增量","第74天增量",	"第75天增量","第76天增量","第77天增量","第78天增量","第79天增量","第80天增量","第81天增量","第82天增量","第83天增量","第84天增量","第85天增量","第86天增量","第87天增量","第88天增量","第89天增量","第90天增量","第91天增量","第92天增量","第93天增量","第94天增量","第95天增量","第96天增量","第97天增量","第98天增量","第99天增量","第100天增量","第101天增量","第102天增量","第103天增量","第104天增量","第105天增量","第106天增量","第107天增量","第108天增量","第109天增量","第110天增量","第111天增量","第112天增量","第113天增量","第114天增量","第115天增量","第116天增量","第117天增量","第118天增量","第119天增量","第120天增量","第121天增量","第122天增量","第123天增量","第124天增量","第125天增量","第126天增量","第127天增量","第128天增量","第129天增量","第130天增量","第131天增量","第132天增量","第133天增量"]
x = []
for i in range(1, 133):
    x.append(i)
plt.xticks(x, labels=change_x, fontsize=2, rotation=90, fontfamily="SimHei")  # x轴纵向显示
y1 = increment_list[0][1:133]
y2 = increment_list[1][1:133]
y3 = increment_list[2][1:133]
y4 = increment_list[3][1:133]
y5 = increment_list[4][1:133]
y6 = increment_list[5][1:133]
y7 = increment_list[6][1:133]
y8 = increment_list[7][1:133]
y9 = increment_list[8][1:133]
y10 = increment_list[9][1:133]
y11 = increment_list[10][1:133]
y12 = increment_list[11][1:133]
y13 = increment_list[12][1:133]
y14 = increment_list[13][1:133]
y15 = increment_list[14][1:133]
y16 = increment_list[15][1:133]  # 把值取出来
plt.plot(x,y1,linestyle="--",linewidth=1.0,color="r",marker='*')
plt.plot(x,y2,linestyle="--",linewidth=1.0,color="b",marker='*')
plt.plot(x,y3,linestyle="--",linewidth=1.0,color="g",marker='*')
plt.plot(x,y4,linestyle="--",linewidth=1.0,color="k",marker='*')
plt.plot(x,y5,linestyle="--",linewidth=1.0,color="y",marker='*')
plt.plot(x,y6,linestyle="--",linewidth=1.0,color="peru",marker='*')
plt.plot(x,y7,linestyle="--",linewidth=1.0,color="c",marker='*')
plt.plot(x,y8,linestyle="--",linewidth=1.0,color="m",marker='*')
plt.plot(x,y9,linestyle="-.",linewidth=1.0,color="r",marker='*')
plt.plot(x,y10,linestyle="-.",linewidth=1.0,color="b",marker='*')
plt.plot(x,y11,linestyle="-.",linewidth=1.0,color="g",marker='*')
plt.plot(x,y12,linestyle="-.",linewidth=1.0,color="k",marker='*')
plt.plot(x,y13,linestyle="-.",linewidth=1.0,color="y",marker='*')
plt.plot(x,y14,linestyle="-.",linewidth=1.0,color="peru",marker='*')
plt.plot(x,y15,linestyle="-.",linewidth=1.0,color="c",marker='*')
plt.plot(x,y16,linestyle="-.",linewidth=1.0,color="m",marker='*')  #绘图
list_legend1 = []
for i in range(0, 16):
    legend1 = increment_list[i][0]
    list_legend1.append(legend1)  # 生成图例列表
plt.legend(list_legend1, loc=1, frameon=True)  #创建图例
plt.savefig('图3.jpg')
plt.show()

(开头的注释说人话就是:这段代码得作为实验上交,大家懂的都懂。见谅!)

  • 13
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山河之书Liu_Zixin

不要打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值