Data Visualization

江清水 整理(2017/3/24)

8.3.? Initialize array

1D(1x3): [0]*3

2D(3x3): [[0]*3]*3

identity matrix with numpy:

matrix(identity(n))

inverse of a matrix:

linalg.inv(x)

Q: 求解線性函數

3x+2y+5z=22; 5x-3y+z=2; 2x-3y+2z=2。

a = mat ([[3,2,5],[5,-3,1],[2,-3,2]])

b = mat([[22], [2], [2]])

linalg.inv(a)*b

9. Dictionary

在python中，dictionary是一種資料的結構，就像字典一樣，他提供我們採用”單字”找到”解釋”。因此，dictionary內的元素分兩部分，key和value，可供我們利用key來找到value。Dictionary採用{,}來將資料包在裡面，資料內部已key:value來儲存，中間用’,’分開。舉例來說:
weekend = {0:’Sunday’, 6:’Saturday}。key的資料型態有所限制，允許數字、字串等，而values可以是任何的資料型態。

9.1 Dictionary的操作: print

days = {0:’Sun’, 1:’Mon’, 2:’Tue’, 3:’Wed}

print(days)

print(days[0])

for keys, values in days.items():

print(days, ‘,’, values)

print(days[0:2]) # Error

print(days[4]) #Error

9.2 Dictionary的資料取得(採用key)

days[0]

s=days[0]+’day’; print(s)

9.3 Dictionary的資料修改與增加

days[2]=’Tues’ #(直接採用assignment修改)

days[4]=’Thurs’ #(直接採用assignment增加)

9.4 資料的刪除

del(days[1])

9.5 測試key是否存在

0 in days returns True

7 in days returns False

範例一: 我們想測試一個電腦骰子是否公平的擲出1到6，如何測試?

from random import *
dice = {}

for i in range(1,7):

dice[i]=0 # initialization

print(‘Before Test’)

print(dice)

for I in range(600000):

s = randint(1,6)

dice[s]=dice[s]+1

print(‘After Test’)

for keys, values in dice.items():

print(keys, ‘,’, values)

10 Open Data

Open Data的概念源自於民主開放的國家，認定政府所收集的資料是納稅人繳納錢後的產物，因此對不涉及國家安全或善良風俗等議題的資料，都應該以民眾有能力擷取的格式開放給民眾利用。

中華民國政府的open data資料網站:

data.gov.tw

11 實例: 假設我們想下載行政院經濟部智慧財產局有關專利的資料。

11.1 資料的尋找(CSV檔案格式)

先到網站data.gov.tw

全部資料集/行政院/經濟部/經濟部智慧財產局/專利案件數量統計/資料資源/檢視資料(網路速度很慢，請耐心等候)/copy 網址

http://www.tipo.gov.tw/opendata_dl.asp?icuitem=460492

11.2 資料的下載:

進入jupyter

from pandas import read_csv

csv_data = read_csv("http://www.tipo.gov.tw/opendata_dl.asp?icuitem=460492")

csv_data[:5]

csv_data = csv_data.values

csv_data[:4]

我們所取得的資料是屬於array的格式。因此，我們可以利用所學的Python程式來處理我們拿到的資料。

11.3 資料的處理:

11.3.1 假設我們想知道所有1540筆資料欄位中，屬於”新申請案申請”有幾個?

csv_data[:4] # 看他的資料型態

len(csv_data) # 看他的資料長度

total = 0

for i in csv_data:

if i[1]=='新申請案申請':

total = total + 1

print(total)

答案是110筆資料。

11.3.2 假使我們想要將所有這一類的資料收集起來:

L = []

for i in csv_data:

if i[1]=='新申請案申請':

L.append(i)

for i in L:

print(i)

11.3.3 假使我們想要將第二欄所有的可能性作一個統計(使用dictionary):

dict={}

for i in csv_data:

if i[1] in dict:

dict[i[1]]+=1

else:

dict[i[1]]=1

for keys, values in dict.items():

print(keys, ',', values)

我們發現共有14種不同的可能性，每一種都有110件，總共1540筆資料。

12. 我們如何將所整理的資料以特定的圖表表達出來。舉例來說，我們想江105年專利局的專利總計(發明+新型+新樣式)用bar chart展現出來。

import matplotlib.pyplot as plt

import numpy as np

month = ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'June', 'July', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec')

y_pos = np.arange(len(month))

print(y_pos)

performance = (12, 13, 14, 15, 13, 14, 12, 18, 17, 11, 15, 19)

plt.bar(y_pos, performance, align='center', alpha=0.4)

plt.ylim(10,20)

plt.xticks(y_pos, month)

plt.xlabel('2015')

plt.title('Patents')

plt.show()

實作作業: 某人要整理自民國96年至今的所有工研院所申請的專利數，內容包括每一年度的排名，發明、新型、新樣式及當年度總共的專利數，要如何處理?

1. 到經濟部智慧財產局下載csv的檔案。

2. 尋找相關的檔案: 01_本國法人專利申請前百大排名.csv

3. 讀入程式

4. 以程式處理所有的資料，主要是將所取得的專利種數放到performance中。

5. 將所有的專利整理資料以圖檔的方式展現出來。(plt.show())