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這個按鈕,就會生成這樣的樣式圖片:
到這裏我們先告一段落啦!希望大家看了有感覺,謝謝