Python可视化入门
一直在学习Python,但是不知道Python具体可以用来干吗,我只是用它来做机器学习,还没有做一些其他的东西,今天突然看见一篇非常好的Python可视化教程,于是记录下来,便于大家学习以及个人的巩固加强。教程在 可视化教程
既然我们要学习可视化教程,那就需要数据啊,数据在这 数据
我们先看看数据是什么样的:
最上面的一行是标题,接下来就是对应标题的数据
我们第一个任务就是将整个数据变成json格式的,也就是键值对的格式。
import csv #导入csv包
MY_FILE = 'sample_sfpd_incident_all.csv'
def parse(raw_file,delimiter):
opened_file = open(raw_file) #读取文件
csv_data = csv.reader(opened_file,delimiter=delimiter) #使用csv.reader读取文件,并用符号分割
parsed_data = []
fields = csv_data.next() #读取第一行数据,也就是标题
for row in csv_data:
parsed_data.append(dict(zip(fields,row))) #将标题与下面的每个字段整合,然后变成字典类型添加到列表中去
opened_file.close() #关闭
return parsed_data
new_data = parse(MY_FILE,',')
不要看看就好了,一定要动手去做。当结果出现是不是有成就感啊!
我们第二个任务就是画图
我们先来看看我们的数据是怎么样的
{
'Category' : 'ASSAULT',
'IncidntNum' : '030204181',
'DayOfWeek' : 'Tuesday',
'Descript' : 'BATTERY',
'PdDistrict' : 'CENTRAL',
'Y' : '37.7981847618287',
'Location' : '300 Block of COLUMBUS AV',
'Time' : '18:15',
'Date' : '02/18/2003',
'X' : '-122.407069627873',
'Resolution' : 'ARREST, BOOKED'},
这份数据是当地犯罪的记录,包括犯罪类型,犯罪编号,犯罪事件,描述,等等。我们先来看看一个星期中哪天犯罪的次数最多:
def visualize_days():
data_file = parse(MY_FILE,',')
counter = Counter(item['DayOfWeek'] for item in data_file) #统计出现的次数
data_list = [
counter["Monday"],
counter["Tuesday"],
counter["Wednesday"],
counter["Thursday"],
counter["Friday"],
counter["Saturday"],
counter["Sunday"]
]
day_tuple = tuple(["Mon", "Tues", "Wed", "Thurs", "Fri", "Sat", "Sun"])
plt.plot(data_list)
plt.xticks(range(len(day_tuple)),day_tuple) #画x轴
plt.show()
我们看到了这样的一张图:
哎,星期二犯罪次数是最多的。。。
接下来我们做一下事件分析:
def visualize_type():
import numpy as np
data_file = parse(MY_FILE,',')
counter = Counter(item['Category'] for item in data_file)
labels = tuple(counter.keys())
xlocations = np.arange(len(labels))+0.5
width = 0.5
plt.bar(xlocations,counter.values(),width=width)
plt.xticks(xlocations+width/2,labels,rotation=90)
plt.subplots_adjust(bottom=0.4)
plt.rcParams['figure.figsize'] = 12,8
plt.show()
可见,warrants是最多的。
接下来我们根据数据中的经纬度来画地图!
def create_map(data_file):
geo_map = {"type": "FeatureCollection"} #创建我们想要的地图类型
item_list = []
for index,line in enumerate(data_file):
if line['X'] == '0' or line['Y']=='0':
continue
data = {}
data['type'] = 'Feature'
data['id'] = index
data['properties'] = {'title': line['Category'],
'description': line['Descript'],
'date': line['Date']}
data['geometry'] = {'type': 'Point',
'coordinates': (line['X'], line['Y'])}
item_list.append(data)
for point in item_list:
geo_map.setdefault('features', []).append(point)
with open('file_sf.geojson', 'w') as f:
f.write(geojson.dumps(geo_map))
接下来打开https://gist.github.com/ 将生成的文件的内容放到这里面去。
点击Create secret gist这个按钮,就会生成这样的样式图片:
到这里我们先告一段落啦!希望大家看了有感觉,谢谢