iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 5
0
自我挑戰組

Kaggle的解題挑戰系列 第 8

[Day 08] Kaggle的解題挑戰 - Python基礎

Python是屬於直譯語言,動態語言,哲學上是簡單和唯一寫法為主,就Java轉過來而言,要克服有,不用定義型別、沒有分號、縮排和冒號是執行的要素,也支援物件導向和函式的寫法,但不是非常完整,但應該夠用了。

環境

本身是用mac,用HomeBrew安裝Python3後,應該就會安裝pip了,再用pip安裝virtualenv,pip是Python的套件管理工具,virutalenv是建立一個虛擬的Python開發環境,這樣可以減少套件相依的問題

brew python3
sudo pip install virtualenv
virtualenv --distribute venv
cd venv
source bin/activate
# 關閉
deactivate 

我目前以Python3為主要實作,就不說2和3的差別了,主要是用陳信良的教學為主,雖然他的寫法是Python 2為主,但我會簡單做些修改,我主要就帶語言部分而已
http://www.codedata.com.tw/python/python-tutorial-the-1st-class-1-preface/
有興趣的話,自已找example看

Data Type

Numeric type
int, long, float, bool, complex
String type
Container type
list, set, dict

Numeric type

Python 3好像沒有long了…,不太確定,complex這東西也不太了解是幹嘛的
另外,比較特別的 ** 表示次方,/會有小數,//會進行整除(這部分2的行為有所不同)
有點sense的人都知道符點數運算的結果會有差異,Python 3統一了__repr__和__str__的值
用decimal來正確計算,餘數用%

String type

Immutable
可以用””和’’,不過目前看比較多人使用單引號
\ Escape
字串前加r,表原始字串
len(‘str’)求字串長度,3是字數,2是Byte數
也可以當陣列,負號是倒數過來
字串切割方式[x:y:z],x和y為index,但不包含y,可省略x或y其中一個,z表示gap
反轉字串lang[::-1]
格式化

'%d %.2f %s' % (1, 99.3, 'Justin’)
'%(real)s is %(nick)s' % {'real' : 'Justin', 'nick' : 'caterpillar’}

'{0} is {1}'.format('Justin', 'caterpillar')
'{real} is {nick}'.format(real = 'Justin', nick = 'caterpillar’)

容器

list

其實和array差不多,不過是可以變動的,使用append新增,detail可查document
join是連結二個list,取值和設值和Array相同

set

不重複值,應該是hash的方式實作,如果想使用排序之類的作法,可以要再查
集合的運算蠻有趣的,&交集,|聯集,-差集,^ xor,> 包含,<屬於

dict

key, value pair,也就是Java的map,也是hash的實作
查不到key會丟exception,可用get檢查

tuple

Immutable,類似list,list用中括號,tuple用小括號

條件和迴圈

if

if condition:
    print(‘true’)
elif condition2:
    print(‘elif’)
else:
    print(‘else’)

比較特別的是冒號:和縮排了,Python對縮排有嚴格的管制,同樣的程式區塊,要使用相同的縮排,tab或四格空白

單行if

‘A’ if condition else ‘B’

單行還蠻特別的,成立,回傳if前面的值

for

好像就固定都要帶list之類的東西才能run

nums = [1, 2, 10]
for num in nums:
    print (num)

如果想用古早的for可以用range

for i in range(1:10)
    print (i)

會印1到9

while

while就沒啥差別了

while condition:
    do something

應該也是可以用continue和break

特別的Example

單行for

print([num for num in nums])

用單行for if建立list

[number for number in numbers if number % 2 != 0]

用單行for if建立dic

{name : passwd for name, passwd in zip(names, passwds)}

function

def max (a, b):
    return a if a > b else b

Python的funcation也可以是變數

maximum = max
maximum(10, 20)

也有lamda的寫法,其實差別應該是不用使用def定義function

min = lambda a, b: a if a > b else b

Module

檔名就是模組名稱
import,載入整個杬組
import xmath as math,取別名為math
from xmath import min,只import min(可能是常數、function或物件)

Class

class MyClass:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    
    def kill(self):
        self.state = ‘kill’

    def __str__(self):
        return ‘I am {0}, age: {1}’.format(self.name, self.age)

我亂寫的class example,關鍵字是class和self,不過每個function都要帶入self蠻煩的,不過
好像有些深層的意義,也算是他的哲學之後,Explicit is better than implicit
還有前後2個_的function算是class內建的函式

Package

簡單說,在要做Package的目錄放__init__.py這個檔案,引用時,使用import pack.modu
然後會去pack目錄,找modu這個檔案

常用函數

range
zip
enumerate
reduce
可以到build in function api doc看說明
也可以用__doc__來查,還要再研究一下
help(zip)

後話

今天就先到這裏,明天再補看一下,python作者寫的tutorial補一些可能有少的東西
後天就來看看有那些Machine Learning上會用到Library


上一篇
[Day 07] Kaggle的解題挑戰 - Python入門
下一篇
[Day 09] Kaggle的解題挑戰 - Python補充
系列文
Kaggle的解題挑戰11

尚未有邦友留言

立即登入留言