2022年4月26日 星期二

CKAN Get Started:CKAN API(v2.9)

Check CKAN API 玩一下它的 api。(把 JSON formatter plugin for Chrome 裝起來比較好看 JSON 資料)

Datasets 與 resources

在 CKAN,資料以 dataset 形式上傳。dataset 包含:

  • metadata
    說明資料,如:標題、出版者、日期...。
  • resource
    即資料本身。CKAN 不管格式,可以是 CSV, Excel, XML, PDF, RDF 或圖檔。
    CKAN 可將資料儲存在內部或僅儲存連結。
一個 dataset 可包含多個 resource,如歷年資料,或同樣的資料但不同的格式。

建立 Organizations, Datasets 及 Resources

有四個步驟:

  1. Get an API key (API Key 不等於 API Token)
  2. Create an organization;
  3. Create dataset inside an organization (dataset 一定掛在某個 organization 下);
  4. Add resources to the dataset

開個 Postman 執行以下 api 呼叫

Get

curl http://11.11.11.163/api/3/action/group_list

Create Organization

curl -X POST 'http://[你的IP]/api/3/action/organization_create'
-H 'Authorization: [你的API Key]'
-H 'Content-Type: application/json' 
-d '{
"name": "0509-org",
"title": "0509組織",
"description": "測試CKAN"
}'

Create Dataset

curl POST 'http://[你的IP]/api/3/action/package_create'
--header 'Authorization: [你的API Key]'
--header 'Content-Type: application/json'
--data-raw '{
"name": "0509-dataset",
"title": "0509 資料集",
"description": "測試CKAN",
"owner_org": "0509-org"
}'

Add a resource

curl POST 'http://[你的IP]/api/3/action/resource_create'
--header 'Authorization: [你的API Key]'
--header 'Content-Type: application/json'
--data-raw '{
"url": "https://raw.githubusercontent.com/frictionlessdata/test-data/master/files/csv/100kb.csv",
"description": "來自 githubusercontent frictionlessdata 的範例資料",
"name": "0509-daset-test-csv-data",
"owner_org": "0509-org",
"package_id": "0509-dataset"
}'


CKAN創始人Rufus Pollock:CKAN 概覽

Rufus Pollock,CKAN的創始人,著有 《The Open Revolution: Rewriting the Rules of the Information Age (2018) 》一書主張 Open Data(參考:Open (Public) Data: What, Why, How)。

以下為他在 CKAN Open Data Portal Webinar 中的介紹。(Webinar 的 Key Takeaways

CKAN Platform

CKAN 是 Data Management System (DMS) 。相對於 CMS 針對 content, DMS 的對象是 data。

CKAN 可以是以下解決方案的平台:

  • Data Portals:a gateway to data
  • Data Catalog
  • Data Lake:結合雲端儲存及運算能力。

CKAN Features

CKAN 許多功能 都可客制化。


CKAN 採元件化設計,各元件可單獨或組合使用。


CKAN 官方文件

2022年4月24日 星期日

Python Packages

https://data-flair.training/blogs/python-packages/

__init__.py

透過 __init__.py 檔案把一個目錄變為 Python package。

這個檔案可以是空的,也可用來放初始化程式。就讓__init__.py 空白也是不錯的做法。

Python Package Structure

Game 是 root package,底下有三個附屬 package: Sound, Image,  Level 和 __init__.py。Sound 底下有三個 module: load, play, and pause 和 __init__.py。

從 Packages 匯入/Import Modules

從 sound package 匯入load module:

import Game.Sound.load 

 或

from Game.Sound import load

或簡化為 loadgame

import Game.Sound.load as loadgame

loadgame=Game.Sound.load

如果 Sound subpackage 有個函式 volume_up(),則可以下方式呼叫:

loadgame.volume_up(7)


如果用以下方式直接匯入函式並別名為 volup():

from Game.Sound.load import volume_up() as volup

便可更簡單的呼叫:

volup(7)

不匯入子目錄

只匯入指定 package 目錄下的內容,不含其子目錄。

Create Python Package


在這個 Package 底下加入一個檔案 utilities.py:

def get_total_employees():
          print("100 employees.")

在 PythonPackagesDemo.py 裡可呼叫:

import hr.utilities
HR.Utilities.get_total_employees()




2022年4月21日 星期四

Python Modules

https://data-flair.training/blogs/python-modules/

什麼是 Python Modules?

內含 Python 程式/statements和定義/definitions 的檔案。

如 calc.py:

def add(a,b):
     return a+b
def sub(a,b): 
     return a-b
def mul(a,b):
     return a*b
def div(a,b):
     return a/b
def exp(a,b):
     return a**b
def floordiv(a,b):
     return a//b

匯入模組

如此一來同目錄下的 PythonPackagesDemo.py 可以如下方式呼叫:

import calc #或是 from calc import *
sum=calc.add(1,2)
print(sum)

每個 module 會建立各自的 private symbol table,避免模組間的名稱衝突。

也可選擇性地匯入某些函式:

from calc import div as d, floordiv as fd

x= d(120,7)
print(x) #17.142857142857142

y=fd(120,7)
print(y) #17


Python Module Search Path

對於 import 的 module,Python interpreter 會依如下順序搜:

  1. 有沒有內建版本 ?
  2. 去 sys.path 目錄下找。 sys.path 是一個變數,初始值來自:
    1. 目前 Python 程式所在目錄
    2. PYTHONPATH 目錄清單,就像 shell 下的 PATH 變數。
    3. 預設安裝目錄 (installation-dependent default)
    4. 就算初始化,Python 程式也可修改 sys.path。

Compiled Python Files

若要加速,Python 可以把編譯過的 module快取在 __pycache__ 目錄,命名方式: module.version.pyc,區分不同 Python 版本。

如:在 CPython 3.3 版本,eggs.py 快取版的名字為 __pycache__/eggs.cpython-33.pyc.

編譯版會 platform-independent,若版本過期,Python 會自動重新編譯。

Python Standard Modules

Python 本身有 modules,有些內建在 interpreter 如 sys,有些只有在某些執行環境可用(如winreg 只在 Windows 上),我們也可以建立。如下可列出所有 sys 模組:

import sys

sys.version  
# '3.9.7 (tags/v3.9.7:1016ef3, Aug 30 2021, 20:19:38) [MSC v.1929 64 bit (AMD64)]'

for i in dir(sys): print(i)
'''
__breakpointhook__
__displayhook__
__doc__
略...
'''


Python 概覽

Python 執行

  1. Parser
    source code --> syntax tree
  2. Compiler
    syntax tree --> Python bytecode
  3. Interpreter
    以 REPL (Read-Evaluate-Print-Loop) 的方式逐行執行

程式組織結構

  • 函式/Functions
  • 類別/Classes (Python也是物件導向語)
  • 模組/Modules (相關 classes 與 functions 的集合)
  • 封包/Packages (modules 的集合)

2022年4月20日 星期三

Python 筆記

10 reasons why Python is better than C#

已經會C#,這篇是很好的起點,知道 Python 和C#有何不同,好在哪裡,要補K哪些文件。

The Python Standard Library

要補K那些?就看這簡潔又完整的官方文件。

Python 程式慣例與風格

每種程式都有它的風格和慣例,寫 Python 就用 Python 的慣例。透過好/壞寫法的比較,清楚該怎麼寫才是 Python style。

大多數情況下,我們是「讀」程式(code is read much more often than it is written),程式好讀對生產力大有幫助。

Switch to Python

已有程式經驗,切換至 Python 的步驟:

  1. The Basic Python Syntax
  2. Python args and kwargs: Demystified – Real Python
  3. Primer on Python Decorators – Real Python
  4. Python's Instance, Class, and Static Methods Demystified – Real Python
  5. Python Virtual Environments: A Primer – Real Python
  6. Python REST APIs With Flask, Connexion, and SQLAlchemy – Real Python
Real Python 網站很棒的地方是,Python 教學之後,還會提供「Real World Examples」,介紹實務上的用法及例子!

Python學習地圖

  • Python notes for beginners
    1. Python basic tutorial
    2. Syntax
    3. Statement, Indentation, and Comments
    4. Variables and Datatypes
    5. Operators
    6. Numbers
    7. Strings
    8. Data structure
    9. List
    10. Tuples
  • Python notes for intermediates
    1. Module
    2. Classes
    3. Methods
    4. Iterators
    5. Decorators
    6. Generators
  • Python notes for advanced learners
    1. Web framework
    2. Machine Learning
    3. Deep learning
    4. Artificial Intelligence
    5. Relational Database

避免錯誤

Why Python?

最後來點輕鬆的。

Guido van Rossum 命名靈感來自1970年代英國一個超現實/荒誕幽默喜劇團體 Monty Python。 Python 範例程式中的變數名稱叫 spam、eggs,也是在向他們的短劇 SPAM 致敬。

Monty Python 短劇: SPAM