python调用excel数据成图系统_Python数据处理,使用Pandas与Folium处理数据并图形化...

首先当然要引入必要的库。本例中,我们要用到Pandas,matplotlib中的pyplot,numpy以及folium,按照管理,使用pd,plt和np作为几个库的别名(在自己写程序命名变量时最好避开这些约定俗成的变量。示例使用Ipython,请安装jupyter notebook及下列库文件以运行程序。

import pandas as pd #import pandas

import matplotlib.pyplot as plt

import numpy as np

import folium

1. 数据科学,柱状图绘图示例

使用一个简单的Excel 表格作为示例(下载地址 ),如果表格不好下载,也可以直接复制下方内容并另存为csv文件。

svdata=pd.read_csv("Topic_Survey_Assignment.csv",index_col=0) #read downloaded csv file with the first col as index

svdata.head(6)

Very interested Somewhat interested Not interested

Big Data (Spark / Hadoop) 1332 729 127

Data Analysis / Statistics 1688 444 60

Data Journalism 429 1081 610

Data Visualization 1340 734 102

Deep Learning 1263 770 136

Machine Learning 1629 477 74

总数据量为2233,计算比例并进行排序。

totalsample=2233

svdatasorted=svdata.sort_values(by="Very interested",ascending =False)

svdatarate=(svdatasorted/totalsample).round(2)

svdatarate.head(6)

以下程序对数据进行绘图显示。绘图时采用了以下技巧。使用了柱状图 barchart

图例等字体大小设置为14,标题字体16

柱状图宽图设置为0.8

按照Very Interested 降序排列

指定不同柱状图颜色

去掉上方及左右边框但保留底部边框

barwidth=0.8

xs=[round(x*3.2,2) for x in range(0, 6)]

xs2=[x+0.8 for x in xs]

xs3=[x+1.6 for x in xs]

font1 = {'family': 'Arial', 'weight': 'normal', 'size': 14}

plt.figure(figsize=(20,8))

l1=plt.bar(xs, svdatarate.iloc[:,0], barwidth, color='#5cb85c')

l2=plt.bar(xs2, svdatarate.iloc[:,1], barwidth, color='#5bc0de')

l3=plt.bar(xs3, svdatarate.iloc[:,2], barwidth, color='#d9534f')

plt.legend(handles=[l1, l2, l3], labels=['Very interested', \

'Somewhat interested','Not interested'], loc='best',prop=font1)

plt.title('Percentage of Respondents’ Interest in Data Science Areas',fontsize=16)

plt.xticks(xs2, svdatarate.index,fontsize=14)

plt.yticks(np.arange(0, 1.1, 0.1),fontsize=14)

for a,b in zip(xs,svdatarate.iloc[:,0]):

plt.text(a, b+0.02, '%.0f%%' % (b*100), ha='center', va= 'bottom',fontsize=14)

for a,b in zip(xs2,svdatarate.iloc[:,1]):

plt.text(a, b+0.02, '%.0f%%' % (b*100), ha='center', va= 'bottom',fontsize=14)

for a,b in zip(xs3,svdatarate.iloc[:,2]):

plt.text(a, b+0.02, '%.0f%%' % (b*100), ha='center', va= 'bottom',fontsize=14)

for spine in plt.gca().spines.values():

spine.set_visible(False)

plt.gca().spines['bottom'].set_visible(True)

plt.tick_params(top=False, bottom=True, left=False, right=False, labelleft=False, labelbottom=True)

plt.show()

绘图效果如下

2. Python与地理信息系统结合绘图

以旧金山地区犯罪率为例,将旧金山各个区的犯罪率通过地理信息系统显示出来,本例需要历史犯罪数据的excel格式文档(下载地址)以及旧金山地区的地理信息数据geojson文件(下载地址),如果暂时无法下载文件请访问本文作者个人网站搜索相应文章并进行下载即可。

crimecsv=pd.read_csv("Police_Department_Incidents_-_Previous_Year__2016_.csv",index_col=0)

crimecsv.head(6)

以下代码对读取到的犯罪文件按照区域进行归类技术,并修改了列名称。处理之后的数据示例如下。

crimedata=crimecsv['Category'].groupby(crimecsv['PdDistrict']).count().to_frame()

#crimegroupsum.columns=['Neighborhood','Count']

crimedata['ls']=range(len(crimedata))

crimedata['Neighborhood'] = crimedata.index

crimedata.rename(columns={"Category":"Count"},inplace=True)

crimedata.set_index(['ls'],inplace=True)

crimedata=crimedata.reindex(columns=list(('Neighborhood','Count')))

del crimedata.index.name

crimedata

Neighborhood Count

0 BAYVIEW 14303

1 CENTRAL 17666

2 INGLESIDE 11594

3 MISSION 19503

4 NORTHERN 20100

5 PARK 8699

6 RICHMOND 8922

7 SOUTHERN 28445

8 TARAVAL 11325

9 TENDERLOIN 9942

最后,结合folium地理信息库进行绘图,本示例就绘图进行了如下演示说明:采用了folium图形库中的choropleth图形,用于将不同等级标示为不同图形

缩放从12级开始,图形中心是旧金山市

读取数据级geojson文件,并将两者对应(选择数据文件中Neighborhood,Count列并与geojson文件中feature.properties.DISTRICT 对应)

指定绘图颜色YlOrRd

指定填充密度0.7,线密度0.2

sf_map = folium.Map(location=[37.77,-122.42], zoom_start=12)

sf_geo = r'san-francisco.geojson'

sf_map.choropleth(

geo_data=sf_geo,

data=crimedata,

columns=['Neighborhood', 'Count'],

key_on='feature.properties.DISTRICT',

fill_color='YlOrRd',

fill_opacity=0.7,

line_opacity=0.2,

legend_name='Crime Rate in San Francisco'

)

sf_map

最终绘图效果示意如下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值