(一)、选题的背景
近两年来,在新冠状病毒的侵袭下,各国都在面对巨大的挑战,有的采取封国措施,有的国家经济水平下降,但是我们中国不但保持不下降的经济,还可以说有所进步。我想通过进出口贸易总额分析,知道我们国家这两年,面对疫情的困难下,进出口总额与之前对比,通过数据可视化看出我们国家进出口总额的近年来的差别。
(二)、主题式网络爬虫设计方案
1.主题式网络爬虫名称
国内进出口贸易总额爬虫分析
2. 主题式网络爬虫爬取的内容与数据特征分析
爬取该网站的国内进出口贸易总额以及对当月进出口额的金额(亿美元)、同比增长、环比增长以及累计进出口额的金额(亿美元)、同比增长的分析。
3. 主题式网络爬虫设计方案概述(包括实现思路与技术难点)
爬取当前网站的国内进出口贸易总额以及对当月进出口额的金额(亿美元)、同比增长、环比增长以及累计进出口额的金额(亿美元)、同比增长的分析,并找到该标签下的链接进行跳转爬取下一个页面的有关数据,再数据清洗,数据可视化。
在对页面标签的再爬取采取的循化爬取会因为数据的切片问题导致出错、对数据进行清洗和处理、对可用数据的可视化处理。
具体的思路和分析通过下列代码与图片展示。
(三)、主题页面的结构特征分析
1.主题页面的结构与特征分析
2. Htmls 页面解析
在第一个图中我们可以发现我们需要找到进出口贸易总额,然后在往下面找,第二张图片我们可以发现我们所需要爬取的数据位于tobody标签的tr中,前两行是小标题,到第三行开始为2021年11月的具体进出口贸易总额(亿美元)、同比增长、环比增长的数据,以此类推10月9月......
3.节点(标签)查找方法与遍历方法
用双循环遍历tr标签。再遍历tr标签下的td标签取出数据。
(四)、网络爬虫程序设计
爬虫程序主体要包括以下各部分,要附源代码及较详细注释,并在每部分程序后
面提供输出结果的截图。
1.数据爬取与采集
1 from bs4 import BeautifulSoup 2 import requests 3 import matplotlib.pyplot as plt 4 import pandas as pd 5 import csv 6 def getHTMLText(url): 7 try: 8 headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/\ 9 537.36 (KHTML, like Gecko) Chrome/96.0.4664.55 Safari/537.36 Edg/96.0.1054.34"} 10 r=requests.get(url,headers=headers) 11 r.raise_for_status()#如果状态不是200,就会引发HTTPError异常 12 r.encoding = r.apparent_encoding 13 print(r) 14 return r.text 15 except: 16 return "no" 17 18 url="https://market.cnal.com/historical/jck.html" 19 a=getHTMLText(url) 20 soup=BeautifulSoup(a)
2.对数据进行清洗和处理
1 lll=[] 2 for i in soup.find_all("tr")[2:]: 3 zz=[] 4 bb=0 5 for a in i: 6 if bb==1: 7 zz.append(a) 8 elif bb==3: 9 zz.append(a) 10 elif bb==5: 11 zz.append(a) 12 elif bb==7: 13 zz.append(a) 14 elif bb==9: 15 zz.append(a) 16 elif bb==11: 17 zz.append(a) 18 elif bb==13: 19 zz.append(a) 20 elif bb==15: 21 zz.append(a) 22 elif bb==17: 23 zz.append(a) 24 elif bb==19: 25 zz.append(a) 26 elif bb==21: 27 zz.append(a) 28 bb=bb+1 29 lll.append(zz) 30 lll
1 xxx=[] 2 for gtk in lll: 3 hv=[] 4 for i in gtk: 5 hv.append(str(i)[4:-5]) 6 xxx.append(hv) 7 xxx
1 for hji in range(len(df["月份"])): 2 try: 3 df.loc[hji,"金额(亿美元)"]=float(df.loc[hji,"金额(亿美元)"]) 4 except: 5 df.loc[hji,"金额(亿美元)"]=0 6 try: 7 df.loc[hji,"同比增长"]=float(df.loc[hji,"同比增长"][0:-1])/100 8 except: 9 df.loc[hji,"同比增长"]=0 10 try: 11 df.loc[hji,"环比增长"]=float(df.loc[hji,"环比增长"][0:-1])/100 12 except: 13 df.loc[hji,"环比增长"]=0 14 try: 15 df.loc[hji,"金额(亿美元).1"]=float(df.loc[hji,"金额(亿美元).1"]) 16 except: 17 df.loc[hji,"金额(亿美元).1"]=0 18 try: 19 df.loc[hji,"同比增长.1"]=float(df.loc[hji,"同比增长.1"][0:-1])/100 20 except: 21 df.loc[hji,"同比增长.1"]=0 22 try: 23 df.loc[hji,"环比增长.1"]=float(df.loc[hji,"环比增长.1"][0:-1])/100 24 except: 25 df.loc[hji,"环比增长.1"]=0 26 try: 27 df.loc[hji,"金额(亿美元).2"]=float(df.loc[hji,"金额(亿美元).2"]) 28 except: 29 df.loc[hji,"金额(亿美元).2"]=0 30 try: 31 df.loc[hji,"同比增长.2"]=float(df.loc[hji,"同比增长.2"][0:-1])/100 32 except: 33 df.loc[hji,"同比增长.2"]=0 34 try: 35 df.loc[hji,"金额(亿美元).3"]=float(df.loc[hji,"金额(亿美元).3"]) 36 except: 37 df.loc[hji,"金额(亿美元).3"]=0 38 try: 39 df.loc[hji,"同比增长.3"]=float(df.loc[hji,"同比增长.3"][0:-1])/100 40 except: 41 df.loc[hji,"同比增长.3"]=0 42 df
3.数据分析与可视化(例如:数据柱形图、直方图、散点图、盒图、分布图)
1 import requests 2 from bs4 import BeautifulSoup 3 import matplotlib.pyplot as plt 4 import seaborn as sns 5 import pandas as pd 6 #df=pd.read_csv("C:\\Users\\wei\\data.csv") 7 ggf=df.sort_values(by="金额(亿美元)", 8 axis=0, 9 ascending=False,) 10 bk=ggf["金额(亿美元).1"][0:6] 11 dfc=ggf["金额(亿美元)"][0:6] 12 zk=ggf["金额(亿美元).2"][0:6] 13 city_1=ggf["金额(亿美元).3"][0:6] 14 #显示中文标签,处理中文乱码问题 15 plt.rcParams['font.sans-serif']=['Microsoft YaHei'] 16 plt.rcParams['axes.unicode_minus']=False 17 plt.figure(figsize=(10,6)) 18 x=list(range(len(zk))) 19 #给图片设置间距 20 total_width=0.8 21 n=4 22 width=total_width/n 23 for i in range(len(x)): 24 x[i]-=width 25 plt.bar(x, 26 bk, 27 width=width, 28 label="金额(亿美元)", 29 color="brown" 30 ) 31 gtx_3=zip(x,bk) 32 for aa,ab in gtx_3: 33 plt.text(aa, 34 ab, 35 ab, 36 ha="center", 37 va='bottom', 38 fontsize=10) 39 for i in range(len(x)): 40 x[i]+=width 41 plt.bar(x, 42 zk, 43 width=width,#宽度 44 label="金额(亿美元).1", 45 tick_label=city_1, 46 color="b" 47 ) 48 gtx_2=zip(x,zk) 49 for aa,ab in gtx_2: 50 plt.text(aa, 51 ab, 52 ab, 53 ha="center", 54 va='bottom', 55 fontsize=10) 56 57 for i in range(len(x)): 58 x[i]+=width 59 plt.bar(x, 60 city_1, 61 width=width, 62 label="金额(亿美元).2", 63 color="cyan" 64 ) 65 gtx_1=zip(x,city_1) 66 for aa,ab in gtx_1: 67 plt.text(aa, 68 ab, 69 ab, 70 ha="center", 71 va='bottom', 72 fontsize=10) 73 for i in range(len(x)): 74 x[i]+=width 75 plt.bar(x, 76 dfc, 77 width=width, 78 label="金额(亿美元)", 79 color="r" 80 ) 81 gtx_1=zip(x,city_1) 82 for aa,ab in gtx_1: 83 plt.text(aa, 84 ab, 85 ab, 86 ha="center", 87 va='bottom', 88 fontsize=10) 89 plt.legend() 90 plt.xlabel("") 91 plt.ylabel("亿美元") 92 plt.title("进出口金额对比") 93 plt.grid() 94 plt.show()
1 #通过盒图了解平均进出口金额在什么位置金额分布情况 2 plt.subplot(2,2,1) 3 plt.boxplot(df["金额(亿美元)"], 4 notch=True, 5 sym=None, 6 vert=None, 7 whis=None, 8 positions=None, 9 widths=None, 10 patch_artist=True, 11 meanline=None, 12 showmeans=None, 13 showcaps=None, 14 showbox=None, 15 showfliers=None, 16 boxprops=None, 17 labels=None, 18 flierprops=None, 19 medianprops=None, 20 meanprops=None, 21 capprops=None, 22 whiskerprops=None) 23 plt.title("同比增长") 24 plt.ylabel("环比增长") 25 plt.subplot(2,2,2) 26 plt.boxplot(df["金额(亿美元).1"], 27 notch=True, 28 sym=None, 29 vert=None, 30 whis=None, 31 positions=None, 32 widths=None, 33 patch_artist=True, 34 meanline=None, 35 showmeans=None, 36 showcaps=None, 37 showbox=None, 38 showfliers=None, 39 boxprops=None, 40 labels=None, 41 flierprops=None, 42 medianprops=None, 43 meanprops=None, 44 capprops=None, 45 whiskerprops=None) 46 plt.title("同比增长.1") 47 plt.ylabel("环比增长.1") 48 plt.subplot(2,2,3) 49 50 plt.boxplot(df["金额(亿美元).2"], 51 notch=True, 52 sym=">", 53 vert=None, 54 whis=None, 55 positions=None, 56 widths=None, 57 patch_artist=True, 58 meanline=None, 59 showmeans=None, 60 showcaps=None, 61 showbox=None, 62 showfliers=None, 63 boxprops=None, 64 labels=None, 65 flierprops=None, 66 medianprops=None, 67 meanprops=None, 68 capprops=None, 69 whiskerprops=None) 70 plt.title("同比增长.2") 71 plt.ylabel("环比增长.2") 72 plt.subplot(2,2,4) 73 plt.boxplot(df["金额(亿美元).3"], 74 notch=True, 75 sym="+", 76 vert=None, 77 whis=None, 78 positions=None, 79 widths=None, 80 patch_artist=True, 81 meanline=True, 82 showmeans=True, 83 showcaps=None, 84 showbox=None, 85 showfliers=None, 86 boxprops=None, 87 labels=None, 88 flierprops=None, 89 medianprops=None, 90 meanprops=None, 91 capprops=None, 92 whiskerprops=None) 93 plt.title("同比增长.3") 94 plt.ylabel("环比增长.3") 95 plt.show()
4.根据数据之间的关系,分析两个变量之间的相关系数,画出散点图,并建立变
量之间的回归方程(一元或多元)。
1 from pyecharts import options as opts 2 from pyecharts.charts import Line 3 df=pd.read_csv("D:\\刘政标python课程设计\\rk.csv") 4 line1 = ( 5 Line() 6 .add_xaxis(list(df['金额(亿美元)'][:10].values)) 7 .add_yaxis("进口", df['金额(亿美元)'][:10].values.tolist()) 8 .add_yaxis("出口", df['金额(亿美元).1'][:10].values.tolist()) 9 .set_global_opts( 10 title_opts=opts.TitleOpts(title="进出口金额总值"), 11 ) 12 ) 13 line1.render_notebook()
1 #整理画图数据 2 hi=df.sort_values(by="金额(亿美元)", 3 axis=0, 4 ascending=False,) 5 for ikl in range(len(df["金额(亿美元)"])): 6 if ikl==29: 7 fa=hi.loc[ikl,"金额(亿美元)"] 8 elif ikl==60: 9 fb=hi.loc[ikl,"金额(亿美元)"] 10 elif ikl==90: 11 fc=hi.loc[ikl,"金额(亿美元)"] 12 a_25=0 13 a_50=0 14 a_75=0 15 a_100=0 16 DF=len(hi["金额(亿美元)"]) 17 plt.subplot(1,2,1) 18 for gh in range(DF): 19 if hi.loc[gh,"金额(亿美元)"]>fa: 20 a_100=a_100+1 21 elif hi.loc[gh,"金额(亿美元)"]>fb: 22 a_75=a_75+1 23 elif hi.loc[gh,"金额(亿美元)"]>fc: 24 a_50=a_50+1 25 else: 26 a_25=a_25+1 27 a_data=[a_25,a_50,a_75,a_100] 28 plt.rcParams['font.sans-serif']=['Microsoft YaHei'] #显示中文标签,处理中文乱码问题 29 plt.rcParams['axes.unicode_minus']=False 30 #构造数据 31 explode = [0, 0, 0, 0] 32 labels = ["0-25%", "25-50%", "50-75%", "75-100%"] 33 colors = ['gold', 'chartreuse', 'cyan', 'pink'] 34 plt.pie( 35 a_data, #绘图数据 36 explode=explode, #指定饼图某些部分的突出显示,即呈现爆炸式 37 labels=labels, 38 colors=colors, 39 autopct='%.2f%%', 40 pctdistance=0.8, 41 labeldistance=1.1, 42 startangle=180, 43 radius=1.2, 44 counterclock=False, 45 wedgeprops={'linewidth':1.5,'edgecolor':'r'}, 46 textprops={'fontsize':10,'color':'black'}, 47 ) 48 #添加图标题 49 plt.title('进口金额(亿美元)') 50 #---------------------------------------------------------------------------------------------------------------------------------- 51 plt.subplot(1,2,2) 52 #显示图形 53 hi=df.sort_values(by="金额(亿美元).1", 54 axis=0, 55 ascending=False,) 56 for ikl in range(len(df["金额(亿美元).1"])): 57 if ikl==29: 58 fa=hi.loc[ikl,"金额(亿美元).1"] 59 elif ikl==60: 60 fb=hi.loc[ikl,"金额(亿美元).1"] 61 elif ikl==90: 62 fc=hi.loc[ikl,"金额(亿美元).1"] 63 a_25=0 64 a_50=0 65 a_75=0 66 a_100=0 67 DF=len(hi["金额(亿美元).1"]) 68 for gh in range(DF): 69 if hi.loc[gh,"金额(亿美元).1"]>fa: 70 a_100=a_100+1 71 elif hi.loc[gh,"金额(亿美元).1"]>fb: 72 a_75=a_75+1 73 elif hi.loc[gh,"金额(亿美元).1"]>fc: 74 a_50=a_50+1 75 else: 76 a_25=a_25+1 77 a_data=[a_25,a_50,a_75,a_100] 78 plt.rcParams['font.sans-serif']=['Microsoft YaHei'] #显示中文标签,处理中文乱码问题 79 plt.rcParams['axes.unicode_minus']=False 80 #构造数据 81 explode = [0, 0, 0, 0] 82 labels = ["0-25%", "25-50%", "50-75%", "75-100%"] 83 colors = ['gold', 'chartreuse', 'cyan', 'pink'] 84 plt.pie( 85 a_data, #绘图数据 86 explode=explode, #指定饼图某些部分的突出显示,即呈现爆炸式 87 labels=labels, 88 colors=colors, 89 autopct='%.2f%%', 90 pctdistance=0.8, 91 labeldistance=1.1, 92 startangle=180, 93 radius=1.2, 94 counterclock=False, 95 wedgeprops={'linewidth':1.5,'edgecolor':'r'}, 96 textprops={'fontsize':10,'color':'black'}, 97 ) 98 #添加图标题 99 plt.title('出口金额(亿美元)') 100 plt.show()
6.数据持久化
1 with open("D:\\刘政标python课程设计\\rk.csv","w",encoding="utf-8") as fi: 2 writer=csv.writer(fi) 3 writer.writerow(["月份", 4 "金额(亿美元)","同比增长","环比增长", 5 "金额(亿美元)","同比增长","环比增长", 6 "金额(亿美元)", 7 "同比增长", 8 "金额(亿美元)","同比增长"])#给每列的数据列名 9 for da in xxx: 10 writer.writerow(da) 11 fi.close()
7.将以上各部分的代码汇总,附上完整程序代码
1 from bs4 import BeautifulSoup 2 import requests 3 import matplotlib.pyplot as plt 4 import pandas as pd 5 import csv 6 def getHTMLText(url): 7 try: 8 headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/\ 9 537.36 (KHTML, like Gecko) Chrome/96.0.4664.55 Safari/537.36 Edg/96.0.1054.34"} 10 r=requests.get(url,headers=headers) 11 r.raise_for_status()#如果状态不是200,就会引发HTTPError异常 12 r.encoding = r.apparent_encoding 13 print(r) 14 return r.text 15 except: 16 return "no" 17 18 url="https://market.cnal.com/historical/jck.html" 19 a=getHTMLText(url) 20 soup=BeautifulSoup(a) 21 soup 22 lll=[] 23 for i in soup.find_all("tr")[2:]: 24 zz=[] 25 bb=0 26 for a in i: 27 if bb==1: 28 zz.append(a) 29 elif bb==3: 30 zz.append(a) 31 elif bb==5: 32 zz.append(a) 33 elif bb==7: 34 zz.append(a) 35 elif bb==9: 36 zz.append(a) 37 elif bb==11: 38 zz.append(a) 39 elif bb==13: 40 zz.append(a) 41 elif bb==15: 42 zz.append(a) 43 elif bb==17: 44 zz.append(a) 45 elif bb==19: 46 zz.append(a) 47 elif bb==21: 48 zz.append(a) 49 bb=bb+1 50 lll.append(zz) 51 lll 52 xxx=[] 53 for gtk in lll: 54 hv=[] 55 for i in gtk: 56 hv.append(str(i)[4:-5]) 57 xxx.append(hv) 58 xxx 59 with open("D:\\刘政标python课程设计\\rk.csv","w",encoding="utf-8") as fi: 60 writer=csv.writer(fi) 61 writer.writerow(["月份", 62 "金额(亿美元)","同比增长","环比增长", 63 "金额(亿美元)","同比增长","环比增长", 64 "金额(亿美元)", 65 "同比增长", 66 "金额(亿美元)","同比增长"])#给每列的数据列名 67 for da in xxx: 68 writer.writerow(da) 69 fi.close() 70 for hji in range(len(df["月份"])): 71 try: 72 df.loc[hji,"金额(亿美元)"]=float(df.loc[hji,"金额(亿美元)"]) 73 except: 74 df.loc[hji,"金额(亿美元)"]=0 75 try: 76 df.loc[hji,"同比增长"]=float(df.loc[hji,"同比增长"][0:-1])/100 77 except: 78 df.loc[hji,"同比增长"]=0 79 try: 80 df.loc[hji,"环比增长"]=float(df.loc[hji,"环比增长"][0:-1])/100 81 except: 82 df.loc[hji,"环比增长"]=0 83 try: 84 df.loc[hji,"金额(亿美元).1"]=float(df.loc[hji,"金额(亿美元).1"]) 85 except: 86 df.loc[hji,"金额(亿美元).1"]=0 87 try: 88 df.loc[hji,"同比增长.1"]=float(df.loc[hji,"同比增长.1"][0:-1])/100 89 except: 90 df.loc[hji,"同比增长.1"]=0 91 try: 92 df.loc[hji,"环比增长.1"]=float(df.loc[hji,"环比增长.1"][0:-1])/100 93 except: 94 df.loc[hji,"环比增长.1"]=0 95 try: 96 df.loc[hji,"金额(亿美元).2"]=float(df.loc[hji,"金额(亿美元).2"]) 97 except: 98 df.loc[hji,"金额(亿美元).2"]=0 99 try: 100 df.loc[hji,"同比增长.2"]=float(df.loc[hji,"同比增长.2"][0:-1])/100 101 except: 102 df.loc[hji,"同比增长.2"]=0 103 try: 104 df.loc[hji,"金额(亿美元).3"]=float(df.loc[hji,"金额(亿美元).3"]) 105 except: 106 df.loc[hji,"金额(亿美元).3"]=0 107 try: 108 df.loc[hji,"同比增长.3"]=float(df.loc[hji,"同比增长.3"][0:-1])/100 109 except: 110 df.loc[hji,"同比增长.3"]=0 111 df 112 import requests 113 from bs4 import BeautifulSoup 114 import matplotlib.pyplot as plt 115 import seaborn as sns 116 import pandas as pd 117 #df=pd.read_csv("C:\\Users\\wei\\data.csv") 118 ggf=df.sort_values(by="金额(亿美元)", 119 axis=0, 120 ascending=False,) 121 bk=ggf["金额(亿美元).1"][0:6] 122 dfc=ggf["金额(亿美元)"][0:6] 123 zk=ggf["金额(亿美元).2"][0:6] 124 city_1=ggf["金额(亿美元).3"][0:6] 125 #显示中文标签,处理中文乱码问题 126 plt.rcParams['font.sans-serif']=['Microsoft YaHei'] 127 plt.rcParams['axes.unicode_minus']=False 128 plt.figure(figsize=(10,6)) 129 x=list(range(len(zk))) 130 #给图片设置间距 131 total_width=0.8 132 n=4 133 width=total_width/n 134 for i in range(len(x)): 135 x[i]-=width 136 plt.bar(x, 137 bk, 138 width=width, 139 label="金额(亿美元)", 140 color="brown" 141 ) 142 gtx_3=zip(x,bk) 143 for aa,ab in gtx_3: 144 plt.text(aa, 145 ab, 146 ab, 147 ha="center", 148 va='bottom', 149 fontsize=10) 150 for i in range(len(x)): 151 x[i]+=width 152 plt.bar(x, 153 zk, 154 width=width,#宽度 155 label="金额(亿美元).1", 156 tick_label=city_1, 157 color="b" 158 ) 159 gtx_2=zip(x,zk) 160 for aa,ab in gtx_2: 161 plt.text(aa, 162 ab, 163 ab, 164 ha="center", 165 va='bottom', 166 fontsize=10) 167 168 for i in range(len(x)): 169 x[i]+=width 170 plt.bar(x, 171 city_1, 172 width=width, 173 label="金额(亿美元).2", 174 color="cyan" 175 ) 176 gtx_1=zip(x,city_1) 177 for aa,ab in gtx_1: 178 plt.text(aa, 179 ab, 180 ab, 181 ha="center", 182 va='bottom', 183 fontsize=10) 184 for i in range(len(x)): 185 x[i]+=width 186 plt.bar(x, 187 dfc, 188 width=width, 189 label="金额(亿美元)", 190 color="r" 191 ) 192 gtx_1=zip(x,city_1) 193 for aa,ab in gtx_1: 194 plt.text(aa, 195 ab, 196 ab, 197 ha="center", 198 va='bottom', 199 fontsize=10) 200 plt.legend() 201 plt.xlabel("") 202 plt.ylabel("亿美元") 203 plt.title("进出口金额对比") 204 plt.grid() 205 plt.show() 206 #通过盒图了解平均进出口金额在什么位置金额分布情况 207 plt.subplot(2,2,1) 208 plt.boxplot(df["金额(亿美元)"], 209 notch=True, 210 sym=None, 211 vert=None, 212 whis=None, 213 positions=None, 214 widths=None, 215 patch_artist=True, 216 meanline=None, 217 showmeans=None, 218 showcaps=None, 219 showbox=None, 220 showfliers=None, 221 boxprops=None, 222 labels=None, 223 flierprops=None, 224 medianprops=None, 225 meanprops=None, 226 capprops=None, 227 whiskerprops=None) 228 plt.title("同比增长") 229 plt.ylabel("环比增长") 230 plt.subplot(2,2,2) 231 plt.boxplot(df["金额(亿美元).1"], 232 notch=True, 233 sym=None, 234 vert=None, 235 whis=None, 236 positions=None, 237 widths=None, 238 patch_artist=True, 239 meanline=None, 240 showmeans=None, 241 showcaps=None, 242 showbox=None, 243 showfliers=None, 244 boxprops=None, 245 labels=None, 246 flierprops=None, 247 medianprops=None, 248 meanprops=None, 249 capprops=None, 250 whiskerprops=None) 251 plt.title("同比增长.1") 252 plt.ylabel("环比增长.1") 253 plt.subplot(2,2,3) 254 255 plt.boxplot(df["金额(亿美元).2"], 256 notch=True, 257 sym=">", 258 vert=None, 259 whis=None, 260 positions=None, 261 widths=None, 262 patch_artist=True, 263 meanline=None, 264 showmeans=None, 265 showcaps=None, 266 showbox=None, 267 showfliers=None, 268 boxprops=None, 269 labels=None, 270 flierprops=None, 271 medianprops=None, 272 meanprops=None, 273 capprops=None, 274 whiskerprops=None) 275 plt.title("同比增长.2") 276 plt.ylabel("环比增长.2") 277 plt.subplot(2,2,4) 278 plt.boxplot(df["金额(亿美元).3"], 279 notch=True, 280 sym="+", 281 vert=None, 282 whis=None, 283 positions=None, 284 widths=None, 285 patch_artist=True, 286 meanline=True, 287 showmeans=True, 288 showcaps=None, 289 showbox=None, 290 showfliers=None, 291 boxprops=None, 292 labels=None, 293 flierprops=None, 294 medianprops=None, 295 meanprops=None, 296 capprops=None, 297 whiskerprops=None) 298 plt.title("同比增长.3") 299 plt.ylabel("环比增长.3") 300 plt.show() 301 from pyecharts import options as opts 302 from pyecharts.charts import Line 303 df=pd.read_csv("D:\\刘政标python课程设计\\rk.csv") 304 line1 = ( 305 Line() 306 .add_xaxis(list(df['金额(亿美元)'][:10].values)) 307 .add_yaxis("进口", df['金额(亿美元)'][:10].values.tolist()) 308 .add_yaxis("出口", df['金额(亿美元).1'][:10].values.tolist()) 309 .set_global_opts( 310 title_opts=opts.TitleOpts(title="进出口金额总值"), 311 ) 312 ) 313 line1.render_notebook() 314 #整理画图数据 315 hi=df.sort_values(by="金额(亿美元)", 316 axis=0, 317 ascending=False,) 318 for ikl in range(len(df["金额(亿美元)"])): 319 if ikl==29: 320 fa=hi.loc[ikl,"金额(亿美元)"] 321 elif ikl==60: 322 fb=hi.loc[ikl,"金额(亿美元)"] 323 elif ikl==90: 324 fc=hi.loc[ikl,"金额(亿美元)"] 325 a_25=0 326 a_50=0 327 a_75=0 328 a_100=0 329 DF=len(hi["金额(亿美元)"]) 330 plt.subplot(1,2,1) 331 for gh in range(DF): 332 if hi.loc[gh,"金额(亿美元)"]>fa: 333 a_100=a_100+1 334 elif hi.loc[gh,"金额(亿美元)"]>fb: 335 a_75=a_75+1 336 elif hi.loc[gh,"金额(亿美元)"]>fc: 337 a_50=a_50+1 338 else: 339 a_25=a_25+1 340 a_data=[a_25,a_50,a_75,a_100] 341 plt.rcParams['font.sans-serif']=['Microsoft YaHei'] #显示中文标签,处理中文乱码问题 342 plt.rcParams['axes.unicode_minus']=False 343 #构造数据 344 explode = [0, 0, 0, 0] 345 labels = ["0-25%", "25-50%", "50-75%", "75-100%"] 346 colors = ['gold', 'chartreuse', 'cyan', 'pink'] 347 plt.pie( 348 a_data, #绘图数据 349 explode=explode, #指定饼图某些部分的突出显示,即呈现爆炸式 350 labels=labels, 351 colors=colors, 352 autopct='%.2f%%', 353 pctdistance=0.8, 354 labeldistance=1.1, 355 startangle=180, 356 radius=1.2, 357 counterclock=False, 358 wedgeprops={'linewidth':1.5,'edgecolor':'r'}, 359 textprops={'fontsize':10,'color':'black'}, 360 ) 361 #添加图标题 362 plt.title('进口金额(亿美元)') 363 #---------------------------------------------------------------------------------------------------------------------------------- 364 plt.subplot(1,2,2) 365 #显示图形 366 hi=df.sort_values(by="金额(亿美元).1", 367 axis=0, 368 ascending=False,) 369 for ikl in range(len(df["金额(亿美元).1"])): 370 if ikl==29: 371 fa=hi.loc[ikl,"金额(亿美元).1"] 372 elif ikl==60: 373 fb=hi.loc[ikl,"金额(亿美元).1"] 374 elif ikl==90: 375 fc=hi.loc[ikl,"金额(亿美元).1"] 376 a_25=0 377 a_50=0 378 a_75=0 379 a_100=0 380 DF=len(hi["金额(亿美元).1"]) 381 for gh in range(DF): 382 if hi.loc[gh,"金额(亿美元).1"]>fa: 383 a_100=a_100+1 384 elif hi.loc[gh,"金额(亿美元).1"]>fb: 385 a_75=a_75+1 386 elif hi.loc[gh,"金额(亿美元).1"]>fc: 387 a_50=a_50+1 388 else: 389 a_25=a_25+1 390 a_data=[a_25,a_50,a_75,a_100] 391 plt.rcParams['font.sans-serif']=['Microsoft YaHei'] #显示中文标签,处理中文乱码问题 392 plt.rcParams['axes.unicode_minus']=False 393 #构造数据 394 explode = [0, 0, 0, 0] 395 labels = ["0-25%", "25-50%", "50-75%", "75-100%"] 396 colors = ['gold', 'chartreuse', 'cyan', 'pink'] 397 plt.pie( 398 a_data, #绘图数据 399 explode=explode, #指定饼图某些部分的突出显示,即呈现爆炸式 400 labels=labels, 401 colors=colors, 402 autopct='%.2f%%', 403 pctdistance=0.8, 404 labeldistance=1.1, 405 startangle=180, 406 radius=1.2, 407 counterclock=False, 408 wedgeprops={'linewidth':1.5,'edgecolor':'r'}, 409 textprops={'fontsize':10,'color':'black'}, 410 ) 411 #添加图标题 412 plt.title('出口金额(亿美元)') 413 plt.show()
(五)、总结(10 分)
1.经过对主题数据的分析与可视化,可以得到哪些结论?是否达到预期的目标?
结论:(1)近年来,所受疫情影响进出口贸易总额总体变化幅度不是特别大。
(2)总体来说,我们国家出口总金额大于进口总总额,总支出小于总收入。
(3)我们国家进出口贸易不断在提高。
达到预期目标
2.在完成此设计过程中,得到哪些收获?以及要改进的建议?
在此次设计过程种我对数据处理种的数据筛出有了很大的收获,对爬虫知识更加了解,就是怎么进行类型转换,然后达到自己的想要的效果。
受益浅!需要改进的地方可能就是编写程序反应时间过慢了!编程经验比较欠缺。