Python可视化入门

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这个按钮,就会生成这样的样式图片:

到这里我们先告一段落啦!希望大家看了有感觉,谢谢

你可能感兴趣的:(python)