lib.yzu.edu.twlib.yzu.edu.tw/readinggroup/tec/achievement/upload...  · web view2017. 6. 14. ·...

25
利利 python 利利利利利利利利利利 1021731 利利利 利利利利利利利 NumPy 利利 pandas 利 利利利利利利 、、; matpIotlib 利利 pandas groupby 利利 利利 利利利利利利利 。一,一,一。

Upload: others

Post on 19-Jun-2021

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: lib.yzu.edu.twlib.yzu.edu.tw/ReadingGroup/TEC/Achievement/upload...  · Web view2017. 6. 14. · 利用python進行數據分析讀後心得 1021731林秉橙. 這本書讓我學習NumPy的基礎;從pandas庫的數據分析工具開始對數據進行加載、清理、轉換以及重塑;利用matpIotlib創建散點圖以及靜態或交互式的可視化結果;利用pandas的groupby功能對數據集進行切割和匯總操作;處理各種各樣的時

利用 python 進行數據分析讀後心得 1021731 林秉橙這本書讓我學習 NumPy 的基礎;從 pandas 庫的數據分析工具開始對數據進行加載、清理、轉換以及重塑;利用 matpIotlib 創建散點圖以及靜態或交互式的可視化結果;利用 pandas 的 groupby 功能對數據集進行切割和匯總操作;處理各種各樣的時間序列數據。而最後也透過書上的展示的一些程式碼,讓我能夠拼拼湊湊做出一個簡單的資料分析技巧,是一本很棒的工具書。

Page 2: lib.yzu.edu.twlib.yzu.edu.tw/ReadingGroup/TEC/Achievement/upload...  · Web view2017. 6. 14. · 利用python進行數據分析讀後心得 1021731林秉橙. 這本書讓我學習NumPy的基礎;從pandas庫的數據分析工具開始對數據進行加載、清理、轉換以及重塑;利用matpIotlib創建散點圖以及靜態或交互式的可視化結果;利用pandas的groupby功能對數據集進行切割和匯總操作;處理各種各樣的時

除了上述案例外,以下也附上一些個人的小筆記1. 運算優先級括號、指數、乘、除、加、減2如果你使用了非 ASCII 字符而且碰到了編碼錯誤,記得在最頂端加一行# -- coding: utf-8 --

3. Python 格式化字符使用更多的格式化字符。例如%r 就是是非常有用的一個,它的含義是“不管什麼都打印出來”。%s -- string

%% 百分號標記#就是輸出一個%%c 字符及其 ASCII 碼%s 字符串%d 有符號整數(十進制)%u 無符號整數(十進制)%o 無符號整數(八進制)%x 無符號整數(十六進制)

Page 3: lib.yzu.edu.twlib.yzu.edu.tw/ReadingGroup/TEC/Achievement/upload...  · Web view2017. 6. 14. · 利用python進行數據分析讀後心得 1021731林秉橙. 這本書讓我學習NumPy的基礎;從pandas庫的數據分析工具開始對數據進行加載、清理、轉換以及重塑;利用matpIotlib創建散點圖以及靜態或交互式的可視化結果;利用pandas的groupby功能對數據集進行切割和匯總操作;處理各種各樣的時

%X 無符號整數(十六進制大寫字符)%e 浮點數字(科學計數法)%E 浮點數字(科學計數法,用 E 代替 e)%f 浮點數字(用小數點符號)%g 浮點數字(根據值的大小採用%e 或%f)%G 浮點數字(類似於%g)%p 指針(用十六進制打印值的內存地址)%n 存儲輸出字符的數量放進參數列表的下一個變量中%c 轉換成字符(ASCII 碼值,或者長度為一的字符串)%r 優先用 repr()函數進行字符串轉換(Python2.0 新增)%s 優先用 str()函數進行字符串轉換%d / %i 轉成有符號十進制數%u 轉成無符號十進制數%o 轉成無符號八進制數%x / %X (Unsigned)轉成無符號十六進制數(x / X 代表轉換後的十六進製字符的大小寫)%e / %E 轉成科學計數法(e / E 控制輸出 e / E)%f / %F 轉成浮點數(小數部分自然截斷)%g / %G : %e 和%f / %E 和%F 的簡寫%% 輸出%

輔助符號說明* 定義寬度或者小數點精度- 用做左對齊+ 在正數前面顯示加號(+)<sp> 在正數前面顯示空格# 在八進制數前面顯示零(0),在十六進制前面顯示“0x”或者“0X”(取決於用的是“x”還是“X”)0 顯示的數字前面填充“0”而不是默認的空格mn m 是顯示的最小總寬度,n 是小數點後的位數(如果可用的話)4. binary = "B1"print "%r" %binaryprint "%s" %binary結果:

Page 4: lib.yzu.edu.twlib.yzu.edu.tw/ReadingGroup/TEC/Achievement/upload...  · Web view2017. 6. 14. · 利用python進行數據分析讀後心得 1021731林秉橙. 這本書讓我學習NumPy的基礎;從pandas庫的數據分析工具開始對數據進行加載、清理、轉換以及重塑;利用matpIotlib創建散點圖以及靜態或交互式的可視化結果;利用pandas的groupby功能對數據集進行切割和匯總操作;處理各種各樣的時

'binary'binary

5.end1 = "C"end2 = "h"print end1, end2結果:C h# 逗號( , ) 輸出後為空格( )

6.print "word %r" % "didn't" #對像中有單引號( ' ),輸出結果含有“ ”print "word %r" % "did not"

print "word %s" % "didn't"print "word %s" % "did not"

結果:word "didn't" word 'did not'word didn'tword did not

7.print """"""(等效於print '''''')結果:空行8.months = "Jan\nFeb\nMar\nApr\nMay\nJun\nJul\nAug"print "%r" %monthsprint months結果:

Page 5: lib.yzu.edu.twlib.yzu.edu.tw/ReadingGroup/TEC/Achievement/upload...  · Web view2017. 6. 14. · 利用python進行數據分析讀後心得 1021731林秉橙. 這本書讓我學習NumPy的基礎;從pandas庫的數據分析工具開始對數據進行加載、清理、轉換以及重塑;利用matpIotlib創建散點圖以及靜態或交互式的可視化結果;利用pandas的groupby功能對數據集進行切割和匯總操作;處理各種各樣的時

'Jan\nFeb\nMar\nApr\nMay\nJun\nJul\nAug'JanFebMarAprMayJunJulAug

9.轉義符功能\\ Backslash ()反斜杠\' Single quote(') 單引號\" Double quote(”) 雙引號\a ASCII Bell(BEL) 響鈴符\b ASCII Backspace (BS) 退格符\f ASCII Formfeed (FF) 進紙符\n ASCII Linefeed (LF) 換行符\N{name} Unicode 數據庫中的字符名,其中 name 就是它的名字(Unicode only)\r ASCII Carriage Return (CR)回車符\t ASCII HorizontalTab (TAB) 水平製表符\uxxxx 值為 16 位十六進制值 xxxx 的字符(Unicode only)\Uxxxxxxxx 值為 32 位十六進制值 xxxx 的字符(Unicode 轉義符功能 only)\v ASCII Vertical Tab (VT) 垂直製表符\ooo 值為八進制值 ooo 的字符\xhh 值為十六進制數 hh 的字符10.記住這條:``%r`` 用作 debug,``%s`` 用作顯示。11. input( ) 和 raw_input( )input() 函數會把你輸入的東西當做 Python 代碼進行處理,這麼做會有安全問題,你應該避開這個函數。x = raw_input() 默認輸入格式為 string,如需整數,則需要用 int 轉化為數字y = int (x)

Page 6: lib.yzu.edu.twlib.yzu.edu.tw/ReadingGroup/TEC/Achievement/upload...  · Web view2017. 6. 14. · 利用python進行數據分析讀後心得 1021731林秉橙. 這本書讓我學習NumPy的基礎;從pandas庫的數據分析工具開始對數據進行加載、清理、轉換以及重塑;利用matpIotlib創建散點圖以及靜態或交互式的可視化結果;利用pandas的groupby功能對數據集進行切割和匯總操作;處理各種各樣的時

12.y = raw_input("Name? ")“Name?” 提示用戶,然後將用戶輸入的結果賦值給變量 y。13. python 中的 help 和 pydoc 都是乾什麼的,有何不同?pydoc 是把 help 的內容轉成 HTML 輸出。兩者內容都來自 python 模塊中的 docstring

Window,那就試一下 python -m pydoc raw_input 。LINUX/ MAX : 在命令行輸入 pydoc raw_input

14. 提示別人age = raw_input("How old are you? ")print "My old is %r." %age結果:How old are you?輸入 20My old is '20'.

15. raw_input() 和 import argv 結合程序:from sys import argv

script, s1, s2 = argv input_1 = raw_input("Your " + s1 + " is:") input_2 = raw_input("Your " + s2 + " is:")

print "Your input %s is: %s" % (s1, input_1) print "Your input %s is: %s" % (s2, input_2)

運行:python try.py abYour a is: 輸入 beyondYour b is: 輸入 yourself輸出:Your input a is beyond.

Page 7: lib.yzu.edu.twlib.yzu.edu.tw/ReadingGroup/TEC/Achievement/upload...  · Web view2017. 6. 14. · 利用python進行數據分析讀後心得 1021731林秉橙. 這本書讓我學習NumPy的基礎;從pandas庫的數據分析工具開始對數據進行加載、清理、轉換以及重塑;利用matpIotlib創建散點圖以及靜態或交互式的可視化結果;利用pandas的groupby功能對數據集進行切割和匯總操作;處理各種各樣的時

Your input b is yourself.

16.argv 和 raw_input() 有什麼不同?不同點在於用戶輸入的時機。如果參數是在用戶執行命令時就要輸入,那就是argv,如果是在腳本運行過程中需要用戶輸入,那就使用 raw_input()。17.print """%r is %r""" % (x, y)

18. from sys import argv 是什麼意思?現在能告訴你的是, sys 是一個代碼庫,這句話的意思是從庫裡取出 argv 這個功能來,供我使用。19. 關於.read() 和.readline()

程序:txt = open(filename)print txt.readline()print txt.read()

文件(ex15_sample.txt) 的內容:This is stuff I typed into a file.It is really cool stuff.Lots and lots of fun to have in here.

結果:PS C:\Users\310118430\onedrive\python\program> python ex15.py ex15_sample.txtThis is stuff I typed into a file.

It is really cool stuff.Lots and lots of fun to have in here.

Page 8: lib.yzu.edu.twlib.yzu.edu.tw/ReadingGroup/TEC/Achievement/upload...  · Web view2017. 6. 14. · 利用python進行數據分析讀後心得 1021731林秉橙. 這本書讓我學習NumPy的基礎;從pandas庫的數據分析工具開始對數據進行加載、清理、轉換以及重塑;利用matpIotlib創建散點圖以及靜態或交互式的可視化結果;利用pandas的groupby功能對數據集進行切割和匯總操作;處理各種各樣的時

20.

close – 關閉文件。跟你編輯器的文件->保存.. 一個意思。• read – 讀取文件內容。你可以把結果賦給一個變量。• readline – 讀取文本文件中的一行。• truncate – 清空文件,請小心使用該命令。• write(stuff) – 將 stuff 寫入文件。21. target = open(filename, 'w' ) 如果用了'w' 參數, truncate() 是必須的嗎?貌似沒看出來什麼影響。都會自動抹除中'w' 是什麼意思?它只是一個特殊字符串,用來表示文件的訪問模式。如果你用了'w' 那麼你的文件就是寫入(write)模式。除了'w' 以外,我們還有'r' 表示讀取(read), 'a' 表示追加(append)。還有哪些修飾符可以用來控製文件訪問?最重要的是+ 修飾符,寫法就是'w+', 'r+', 'a+' ——這樣的話文件將以同時讀寫的方式打開,而對於文件位置的使用也有些不同。PS:當使用 open(filename, 'a')形式改寫,不會自動擦寫,需要使用truncate()把原來的內容擦除。否則,就會在原來內容基礎上續寫。如果只寫 open(filename) 那就使用'r' 模式打開的嗎?是的,這是 open() 函數的默認工作方式。22. len( )它會以數字的形式返回你傳遞的字符串的長度。試著玩玩吧。23. 創建函數 defdef print_two (*args):arg1, arg2 = argsprint "arg1: %r, arg2: %r" % (arg1, arg2)def print_two_again(arg1, arg2):

Page 9: lib.yzu.edu.twlib.yzu.edu.tw/ReadingGroup/TEC/Achievement/upload...  · Web view2017. 6. 14. · 利用python進行數據分析讀後心得 1021731林秉橙. 這本書讓我學習NumPy的基礎;從pandas庫的數據分析工具開始對數據進行加載、清理、轉換以及重塑;利用matpIotlib創建散點圖以及靜態或交互式的可視化結果;利用pandas的groupby功能對數據集進行切割和匯總操作;處理各種各樣的時

print "arg1: %r, arg2: %r" %(arg1, arg2)

24.*args 的* 是什麼意思?它的功能是告訴 python 讓它把函數的所有參數都接受進來,然後放到名字叫args 的列表中去。和你一直在用的 argv 差不多,只不過前者是用在函數上面。沒什麼特殊情況,我們一般不會經常用到這個東西。def print_two (*args):arg1, arg2 = argsprint "arg1: %r, arg2: %r" % (arg1, arg2)

print_two("Zed", "Shaw")

25.函數的形式def func(a, b) :print ...

切記:勿忘冒號26. Python File seek()方法 fileObject . seek ( offset [, whence ])

參數 offset  --開始的偏移量,也就是代表需要移動偏移的字節數 whence:可選,默認值為 0。給 offset 參數一個定義,表示要從哪個

位置開始偏移;0 代表從文件開頭開始算起,1 代表從當前位置開始算起,2 代表從文件末尾算起。

返回值該函數沒有返回值。實例以下實例演示了 readline() 方法的使用:文件 runoob.txt 的內容如下:

Page 10: lib.yzu.edu.twlib.yzu.edu.tw/ReadingGroup/TEC/Achievement/upload...  · Web view2017. 6. 14. · 利用python進行數據分析讀後心得 1021731林秉橙. 這本書讓我學習NumPy的基礎;從pandas庫的數據分析工具開始對數據進行加載、清理、轉換以及重塑;利用matpIotlib創建散點圖以及靜態或交互式的可視化結果;利用pandas的groupby功能對數據集進行切割和匯總操作;處理各種各樣的時

1 : www . runoob . com 2 : www . runoob . com 3 : www . runoob . com 4 : www . runoob . com 5 : www . runoob . com循環讀取文件的內容:#!/usr/bin/python# -*- coding: UTF-8 -*-#打開文件 fo = open ( "runoob.txt" , "rw+" ) print "文件名為: " , fo . nameline = fo . readline () print "讀取的數據為: %s" % ( line ) # 重新設置文件讀取指針到開頭 fo . seek ( 0 , 0 ) line = fo . readline () print "讀取的數據為: %s" % ( line ) # 關閉文件 fo . close ()以上實例輸出結果為:文件名為: runoob . txt 讀取的數據為: 1 : www . runoob . com 讀取的數據為: 1 : www.runoob.com

27. 逗號, 與空行def print_a_line(line_count, f):print line_count, f.readline(),結果:1 A MIAO JIAO2 B ZHAO RUBING3 C MIAO XIZHAO

def print_a_line(line_count, f):print line_count, f.readline()結果:1 A MIAO JIAO

2 B ZHAO RUBING

3 C MIAO XIZHAO

二者差距只是在 f.readline() 後面是否有“ , ”。如果有逗號,則可以少打印一個空行。解釋:問什麼文件裡會有間隔空行?readline() 函數返回的內容中包含文件本來就有的\n,而 print 在打印時又會添加一個\n,這樣一來就會多出一個空行了。解決方法是在 print 語句結尾加一個逗號,,這樣 print 就

Page 11: lib.yzu.edu.twlib.yzu.edu.tw/ReadingGroup/TEC/Achievement/upload...  · Web view2017. 6. 14. · 利用python進行數據分析讀後心得 1021731林秉橙. 這本書讓我學習NumPy的基礎;從pandas庫的數據分析工具開始對數據進行加載、清理、轉換以及重塑;利用matpIotlib創建散點圖以及靜態或交互式的可視化結果;利用pandas的groupby功能對數據集進行切割和匯總操作;處理各種各樣的時

不會把它自己的\n 打印出來了。28.

readline() 是怎麼知道每一行在哪裡的?readline() 裡邊的代碼會掃描文件的每一個字節,直到找到一個\n 為止,然後它停止讀取文件,並且返回此前的文件內容。文件 f 會記錄每次調用 readline() 後的讀取位置,這樣它就可以在下次被調用時讀取接下來的一行了。29.在.py文件中僅定義了函數 def 調用方法:cmd -- 運行 python --import ex25運行words = ex25.sort_words

說明:把 ex25.py當做了一個“模組(module)”來使用30.string.split(' ')def break_words(stuff):"""This function will break up words for us."""words = stuff.split(' ')return words說明:將字符串中的空格去除,字符用'' 標註出來結果:>>> words['All', 'goo', 'things', 'come', 'to', 'those', 'who', 'wait.']

31. 字母表排序def sort_words(words):"""Sorts the words."""return sorted(words)結果:>>> sorted_words['All', 'come', 'goo', 'things', 'those', 'to', 'wait.', 'who']

Page 12: lib.yzu.edu.twlib.yzu.edu.tw/ReadingGroup/TEC/Achievement/upload...  · Web view2017. 6. 14. · 利用python進行數據分析讀後心得 1021731林秉橙. 這本書讓我學習NumPy的基礎;從pandas庫的數據分析工具開始對數據進行加載、清理、轉換以及重塑;利用matpIotlib創建散點圖以及靜態或交互式的可視化結果;利用pandas的groupby功能對數據集進行切割和匯總操作;處理各種各樣的時

但如果對於 sentence排序,則被認為對每個字符排序>>> sorted_words = ex25.sort_words(sentence)>>> sorted_words[' ', ' ', ' ', ' ', ' ', ' ', ' ', '.', 'A', 'a', 'c', 'e', 'e', 'g', 'g', 'h','h', 'h', 'i', 'i', 'l', 'l', 'm', 'n', 'o', 'o', 'o', 'o', 'o ', 'o', 's', 's','t', 't', 't', 't', 'w', 'w']

32. .pop 首字符串、尾字符串word = words.pop(0) 首字符串word = words.pop(-1) 尾字符串def print_first_word(words):"""Prints the first word after popping it off."""word = words.pop(0)print word

注意:words首字符串打印出來之後,words被改變,原來的首字符串被拿走了問題:函數里的代碼不是只在函數里有效嗎?為什麼 words.pop(0) 這個函數會改變 words 的內容?答案:這個問題有點複雜,不過在這裡words 是一個列表,你可以對它進行操作,操作結果也可以被保存下來。這和你操作文件時文件的 f.readline() 工作原理差不多。如何避免?? -- 做一個封裝即可:def print_first_and_last(sentence):words = break_words(sentence)print_first_word(words)說明:每次運行輸入 sentence,建一個臨時變量 words,在 print_first_word,原sentence未受影響33. if condition :

Page 13: lib.yzu.edu.twlib.yzu.edu.tw/ReadingGroup/TEC/Achievement/upload...  · Web view2017. 6. 14. · 利用python進行數據分析讀後心得 1021731林秉橙. 這本書讓我學習NumPy的基礎;從pandas庫的數據分析工具開始對數據進行加載、清理、轉換以及重塑;利用matpIotlib創建散點圖以及靜態或交互式的可視化結果;利用pandas的groupby功能對數據集進行切割和匯總操作;處理各種各樣的時

if cars > people:print "We should take the cars."elif cars < people:print "We should not take the cars."else:print "We can't decide."

34. for i in xxx:數組 element = []for 條件 range(0,6)elements = [] #similar as array in C/C++# then use the range function to do 0 to 5 countsfor i in range(0, 6): print "Adding %d to the list." % i# append is a function that lists understandelements.append(i)print elements

結果:[0, 1, 2, 3, 4, 5]

說明:為什麼 for i in range(1, 3): 只循環 2 次而非 3 次?range() 函數會從第一個數到最後一個,但不包含最後一個數字。所以它在 2 的時候就停止了,而不會數到 3。這種含首不含尾的方式是循環中及其常見的一種用法。elements.append() 是什麼功能?它的功能是在列表的尾部追加元素。打開 Python 命令行,創建幾個列表試驗一下。以後每次碰到自己不明白的東西,你都可以在 Python 的交互式命令行中實驗一下35.

next = raw_input("> ") if "flee" in next: #如果 raw_input 輸入的內容中含有 flee 字符....

36 while True: #創建一個無限循環。

Page 14: lib.yzu.edu.twlib.yzu.edu.tw/ReadingGroup/TEC/Achievement/upload...  · Web view2017. 6. 14. · 利用python進行數據分析讀後心得 1021731林秉橙. 這本書讓我學習NumPy的基礎;從pandas庫的數據分析工具開始對數據進行加載、清理、轉換以及重塑;利用matpIotlib創建散點圖以及靜態或交互式的可視化結果;利用pandas的groupby功能對數據集進行切割和匯總操作;處理各種各樣的時

37 exit(0)有什麼功能?在很多類型的操作系統裡,``exit(0)`` 可以中斷某個程序,而其中的數字參數則用來表示程序是否是碰到錯誤而中斷。exit(1) 表示發生了錯誤,而exit(0) 則表示程序是正常退出的。這和我們學的布爾邏輯 0==False 正好相反,不過你可以用不一樣的數字表示不同的錯誤結果。比如你可以用exit(100) 來表示另一種和 exit(2) 或 exit(1) 不同的錯誤。38. 關於雙引號“ " 和單引號' '

錯誤:“I am 6'2" tall." 其中 2”會產生歧義,無法判斷 2之後的“ 是否是待輸出內容。正確做法 1:加入\""I am 6'2\" tall." # 將字符串中的雙引號轉義' ' 同樣適用'I am 6\'2" tall.' # 將字符串種的單引號轉義,從而防止它被識別為字符串的結尾。正確做法 2:"""print """I am 6'2" tall. #輸出的內容"""

39. 類似於數組的用法,地址為 CA,值為 San Francisco

#create a basic set of states and some cities in themcities = {'CA': 'San Francisco', #some like array, address is CA, and value is "San Franc.."'MI': 'Detroit','FL': 'Jacksonville'

Page 15: lib.yzu.edu.twlib.yzu.edu.tw/ReadingGroup/TEC/Achievement/upload...  · Web view2017. 6. 14. · 利用python進行數據分析讀後心得 1021731林秉橙. 這本書讓我學習NumPy的基礎;從pandas庫的數據分析工具開始對數據進行加載、清理、轉換以及重塑;利用matpIotlib創建散點圖以及靜態或交互式的可視化結果;利用pandas的groupby功能對數據集進行切割和匯總操作;處理各種各樣的時

}

40for 循環for address , value in array .items():......

states = {'Oregon': 'OR','Florida': 'FL','California': 'CA','New York': 'NY','Michigan': 'MI'}for state, abbrev in states.items(): #state 和 abbrev 都是臨時變量,分別被賦予 states 的地址、值print "%s is abbreviated %s" %(state, abbrev)

41 數組中的查找函數state = states.get('California', None)

if not state:print "Sorry, no Texas."else: print "States.get() result is %s" %(state)

結果:States.get() result is CA

42a=5isinstance(a, int) //isinstance 函數,檢查一個對像是否是某個特定類型的實例out: True

Page 16: lib.yzu.edu.twlib.yzu.edu.tw/ReadingGroup/TEC/Achievement/upload...  · Web view2017. 6. 14. · 利用python進行數據分析讀後心得 1021731林秉橙. 這本書讓我學習NumPy的基礎;從pandas庫的數據分析工具開始對數據進行加載、清理、轉換以及重塑;利用matpIotlib創建散點圖以及靜態或交互式的可視化結果;利用pandas的groupby功能對數據集進行切割和匯總操作;處理各種各樣的時

43元組:代碼如下:tup1 = ('physics', 'chemistry', 1997, 2000);tup2 = (1, 2, 3, 4, 5 );tup3 = "a", "b", "c", "d";

創建空元組複製代碼代碼如下:tup1 = ();

元組中只包含一個元素時,需要在元素後面添加逗號來消除歧義複製代碼代碼如下:tup1 = (50,);

44.可變對象:列表[ ]、字典、Numpy 數組不可變對象:字符串、元組( )

例:a_list = ['foo', 2, [4,5]]a_list[0] = 'a' //a_list 變為['a', 2, [4,5]]

b_tuple = ('foo', 2, [4,5])b_tuple[0] = 'a' //error,元組不能被改變45. 集合運算

46.字典{'key1': value1, 'key2': value2, ... }元組(value1, value2, ...)列表[value1, value2, value3, ... ]

47.

Page 17: lib.yzu.edu.twlib.yzu.edu.tw/ReadingGroup/TEC/Achievement/upload...  · Web view2017. 6. 14. · 利用python進行數據分析讀後心得 1021731林秉橙. 這本書讓我學習NumPy的基礎;從pandas庫的數據分析工具開始對數據進行加載、清理、轉換以及重塑;利用matpIotlib創建散點圖以及靜態或交互式的可視化結果;利用pandas的groupby功能對數據集進行切割和匯總操作;處理各種各樣的時

[expr for val in collection if condition]

48 lambda例:ints=[4,0,1,5,6]apply_to_list(ints, lambda x : x*2)# 相當於 return x*2,只不過不用 define 函數,直接返回值例 2:def add_numbers(x, y):

return x+y

add_five = lambda y: add_numbers(5, y)

等效於from functools import partialadd_five = partical(add_numbers, 5)

49.python 的數據結構與C++不一樣。C++中,數組、vector 等,每一層元素,性質、名稱在剛開始都列的很清楚。而 Python 中,多維數據結構的話,常常在定義的時候,說的不清楚。例: #python 程序def get_counts(sequence):

counts={}for x in sequence:

if x in counts:counts[x]+=1

else:counts[x]=1

return counts

time_zones=['America/New_York', 'America/Denver', 'America/New_York', 'America/Sao_Paulo', 'America/New_York', 'America/New_York', 'Europe/Warsaw']

Page 18: lib.yzu.edu.twlib.yzu.edu.tw/ReadingGroup/TEC/Achievement/upload...  · Web view2017. 6. 14. · 利用python進行數據分析讀後心得 1021731林秉橙. 這本書讓我學習NumPy的基礎;從pandas庫的數據分析工具開始對數據進行加載、清理、轉換以及重塑;利用matpIotlib創建散點圖以及靜態或交互式的可視化結果;利用pandas的groupby功能對數據集進行切割和匯總操作;處理各種各樣的時

dict1=get_counts(time_zones)print dict1print dict1['America/New_York']

print len(time_zones)

結果:{'Europe/Warsaw': 1, 'America/Denver': 1, 'America/Sao_Paulo': 1, 'America/New_York': 4}47

分析:定義函數 function get_counts( sequence), 包含變量列表 list sequence在函數 function 內部定義臨時變量:新建字典 counts列表中的元素 x,並將 x賦值給 counts 作為字典的 key在函數的結尾部分,return語句看出函數的返回值類型為字典,值為 counts

在調用的過程中,定義一個變量字典 dict = get_counts (time_zones)直接打印,發現程序自動做了遍歷,將所有字典的 key 都搜索了一遍。50.用 pylab畫圖輸入 from pylab import *

51. Python split()方法描述Python split()通過指定分隔符對字符串進行切片,如果參數 num 有指定值,則僅分隔 num 個子字符串語法split()方法語法:str.split(str="", num=string.count(str)).參數

str -- 分隔符,默認為空格。

Page 19: lib.yzu.edu.twlib.yzu.edu.tw/ReadingGroup/TEC/Achievement/upload...  · Web view2017. 6. 14. · 利用python進行數據分析讀後心得 1021731林秉橙. 這本書讓我學習NumPy的基礎;從pandas庫的數據分析工具開始對數據進行加載、清理、轉換以及重塑;利用matpIotlib創建散點圖以及靜態或交互式的可視化結果;利用pandas的groupby功能對數據集進行切割和匯總操作;處理各種各樣的時

num -- 分割次數。返回值返回分割後的字符串列表。實例以下實例展示了 split()函數的使用方法:#!/usr/bin/pythonstr = "Line1-abcdef \nLine2-abc \nLine4-abcd";print str.split( );print str.split(' ', 1 );以上實例輸出結果如下:['Line1-abcdef', 'Line2-abc', 'Line4-abcd']['Line1-abcdef', '\nLine2-abc \nLine4-abcd']

52. Series

Series 是一個一維數組對象,類似於 NumPy 的一維 array。它除了包含一組數據還包含一組索引,所以可以把它理解為一組帶索引的數組。將 Python 數組轉換成 Series 對象:

將 Python 字典轉換成 Series 對象:

當沒有顯示指定索引的時候,Series 自動以 0 開始,步長為 1 為數據創建索引。

你也可以通過 index 參數顯示指定索引:對於 Series 對象裡的單個數據來說,和普通數組一樣,根據索引獲取對應

的數據或重新賦值;不過你還可以傳入一個索引的數組來獲取數據或未數據重新賦值:

Page 20: lib.yzu.edu.twlib.yzu.edu.tw/ReadingGroup/TEC/Achievement/upload...  · Web view2017. 6. 14. · 利用python進行數據分析讀後心得 1021731林秉橙. 這本書讓我學習NumPy的基礎;從pandas庫的數據分析工具開始對數據進行加載、清理、轉換以及重塑;利用matpIotlib創建散點圖以及靜態或交互式的可視化結果;利用pandas的groupby功能對數據集進行切割和匯總操作;處理各種各樣的時

例:from pandas import Series, DataFrameimport pandas as pd

dic = {'a':2,'b':5, 'c':7, 'd':4}obj3 = Series(dic)

想要單獨獲取 Series 對象的索引或者數組內容的時候,可以使用 index

和 values 屬性,例如:對 Series 對象的運算(索引不變):

53. DataFrame

DataFrame 是一個表格型的數據結構。它提供有序的列和不同類型的列值。例如將一個由NumPy 數組組成的字典轉換成 DataFrame 對象:

例:from pandas import Series, DataFrameimport pandas as pd

data = {'name':['Carl', 'Peter', 'Lucy', 'Job'], 'age':[30,34,20,35], 'gender':['m','m ','f','m']}frame = DataFrame(data)

執行:

DataFrame 默認根據列名首字母順序進行排序,想要指定列的順序?傳入一個列名的字典即可:

Page 21: lib.yzu.edu.twlib.yzu.edu.tw/ReadingGroup/TEC/Achievement/upload...  · Web view2017. 6. 14. · 利用python進行數據分析讀後心得 1021731林秉橙. 這本書讓我學習NumPy的基礎;從pandas庫的數據分析工具開始對數據進行加載、清理、轉換以及重塑;利用matpIotlib創建散點圖以及靜態或交互式的可視化結果;利用pandas的groupby功能對數據集進行切割和匯總操作;處理各種各樣的時

如果傳入的列名找不到,它不會報錯,而是產生一列 NA 值:

DataFrame 不僅可以以字典索引的方式獲取數據,還可以以屬性的方法獲取,例如:

修改列的值:

刪除某一列:

改變 Lucy 的重量為 50kg:程序:from pandas import Series, DataFrame

import pandas as pd

data = {'name':['Carl', 'Peter', 'Lucy', 'Job'], 'age':[30,34,20,35], 'gender':['m','m ','f','m']}frame = DataFrame(data)

frame2 = DataFrame(data, columns = ['name', 'weight', 'gender', 'age'])

temp_weight = frame2['weight']temp_weight[frame2['name']=='Lucy'] = 50

執行:

Page 22: lib.yzu.edu.twlib.yzu.edu.tw/ReadingGroup/TEC/Achievement/upload...  · Web view2017. 6. 14. · 利用python進行數據分析讀後心得 1021731林秉橙. 這本書讓我學習NumPy的基礎;從pandas庫的數據分析工具開始對數據進行加載、清理、轉換以及重塑;利用matpIotlib創建散點圖以及靜態或交互式的可視化結果;利用pandas的groupby功能對數據集進行切割和匯總操作;處理各種各樣的時

分析:引用: 賦值號“=”是引用在 Python 中,賦值一個複雜數據結構D(比如 DataFrame)之後,在命名一個分支數據結構 L 例如列表,並將D 的數據用等號= 複製給 L。對於 L 中的數據做修改,D 中的數據也同時被改掉了。這一點與C++完全不同。淺層拷貝:object_new = copy.copy(object_old)賦值一個多層結構之後,新建元素,實現了拷貝,但是對於原有元素使用.append()等函數進行拓展、修改,則 object_new 和 object_old 都進行了變化。深層拷貝:object_new = copy.deepcopy(object_old)object_new 和 object_old完全割裂開來,對於二者之一進行改變,另一個對像不會變。具體即使見 54. python 對象拷貝54. python 對象拷貝小例奉上:          可以看出,賦值號“=”是引用,即 a 和 b 是指向一個對象。    如何實現對象的拷貝呢,python 有 copy模塊。用法: import copy              對象 2 = copy.copy(對象 1)例子:            問題:                可以看出:copy 可以實現淺層拷貝,可以通過 copy.deepcoppy()來實現深層拷貝。例如上例:          判斷是否是一個對象: is              "b = a" 是引用指向的一個對象,所以 a is b 返回 True     "c = copy.copy(a)" c 是 a 的拷貝,不是指向一個對象,返回 False 判斷是否值相同: ==

Page 23: lib.yzu.edu.twlib.yzu.edu.tw/ReadingGroup/TEC/Achievement/upload...  · Web view2017. 6. 14. · 利用python進行數據分析讀後心得 1021731林秉橙. 這本書讓我學習NumPy的基礎;從pandas庫的數據分析工具開始對數據進行加載、清理、轉換以及重塑;利用matpIotlib創建散點圖以及靜態或交互式的可視化結果;利用pandas的groupby功能對數據集進行切割和匯總操作;處理各種各樣的時

          

55. DataFrame.dropna()假如數據量比較大或者有冗餘,我們可以刪掉有缺失值的數據,你可以選擇刪除行或者刪除列,用的都是 DataFrame.dropna(),當然 Series 也有dropna方法,用法相同。

1. 引入相關模塊

2. 創建一個帶有缺失值的數據框:

查看一下數據內容:

3. 通常情況下,我們選擇刪除行,使用參數 axis=0,這是最常用的方法

刪除後的結果為:

4. 還有可能的是,我們選擇刪除列,這種情況不多,因為通常我們選擇用列表示一個變量或者指標,我們通常不會因為有幾個缺失值就刪除一個變量

輸出結果為:

官方解釋

Page 24: lib.yzu.edu.twlib.yzu.edu.tw/ReadingGroup/TEC/Achievement/upload...  · Web view2017. 6. 14. · 利用python進行數據分析讀後心得 1021731林秉橙. 這本書讓我學習NumPy的基礎;從pandas庫的數據分析工具開始對數據進行加載、清理、轉換以及重塑;利用matpIotlib創建散點圖以及靜態或交互式的可視化結果;利用pandas的groupby功能對數據集進行切割和匯總操作;處理各種各樣的時

pandas.DataFrame.dropnaDataFrame. dropna ( axis=0 ,  how='any' ,  thresh=None ,  subset=None ,  inplace=False ) [source]Return object with labels on given axis omitted where alternately any or all of the data are missing

56. fillna、布爾數組、value_counts()fillna 函數可以替換缺失值(NA),布爾型數組可以替換元素,.value_counts()對於 series 類型數據,進行頻次排序例:clean_tz = frame['tz'].fillna('Missing')clean_tz[clean_tz == ' '] = 'Unknown'tz_counts = clean_tz.value_counts()

官方 data:pandas.Series.value_countsSeries. value_counts ( normalize=False ,  sort=True ,  ascending=False ,  bins=None ,  dropna=True ) [source]Returns object containing counts of unique values.The resulting object will be in descending order so that the first element is the most frequently-occurring element. Excludes NA values by default.

57. DataFrame, .groupby(), .size(), .unstack(),

個人理解:DataFrame 有點類似於 excel 表格,新建方式有以下兩大類:一、將 dict直接轉化為 DataFramedf = pd.DataFrame({'key1':['a','a','b','b','a'], 'key2':['one','two','one', 'two','one'],'data1':np.random.randn(5),'data2':np.random.randn(5)})

d1={'key1':['a','a','b','b','a'], 'key2':['one','two','one','two', 'one'],'data1':np.random.randn(5),'data2':np.random.randn(5)}

Page 25: lib.yzu.edu.twlib.yzu.edu.tw/ReadingGroup/TEC/Achievement/upload...  · Web view2017. 6. 14. · 利用python進行數據分析讀後心得 1021731林秉橙. 這本書讓我學習NumPy的基礎;從pandas庫的數據分析工具開始對數據進行加載、清理、轉換以及重塑;利用matpIotlib創建散點圖以及靜態或交互式的可視化結果;利用pandas的groupby功能對數據集進行切割和匯總操作;處理各種各樣的時

DF = pandas.DataFrame(d1.items(), columns = ['Y1', 'Y2'])

DF2 = pandas.DataFrame(list_1)

二、指定表格中的數值,然後指定行的名稱和列的名稱簡單表格:people = pd.DataFrame(np.random.randn (5,4) , columns = ['a','b','c','d'], index=['Joe','Steve','Wes ','Jim','Travis']) #其中(5, 4)是數據的行數和列數複雜表格:columns2 = pd.MultiIndex.from_arrays([['US', 'US', 'US', 'JP', 'JP'],[1, 3, 5, 1, 3]], names=['cty' , 'tenor'])hier_df = pd.DataFrame(np.random.randn(4,5),columns=columns2)

hier_df 輸出cty US JP tenor 1 3 5 1 30 0.718198 0.613803 0.333938 1.316058 -1.4435131 0.267548 -0.900000 -2.002760 0.065267 -0.9084162 -0.065379 1.877671 -1.590868 -1.439815 -1.6866763 -1.186946 0.809720 0.095537 0.810359 1.360787

.groupby()是對 DataFrame 的分析手段,本身無法打印出來,需要轉化為groupby 格式,然後進行運算:mean(), sum() 等DataFrame.groupby().mean()的數據類型為 Series

例:means = df['data1'].groupby([df['key1'], df['key2']]).mean()#data1 是待運算的數據,key1 和 key2 是分類的方式,.mean()是求值運算法則.size() DataFrame['data1'].groupby(['key1','key2',...]).size() 類似於Series.value_counts()用於記錄重複頻次

Page 26: lib.yzu.edu.twlib.yzu.edu.tw/ReadingGroup/TEC/Achievement/upload...  · Web view2017. 6. 14. · 利用python進行數據分析讀後心得 1021731林秉橙. 這本書讓我學習NumPy的基礎;從pandas庫的數據分析工具開始對數據進行加載、清理、轉換以及重塑;利用matpIotlib創建散點圖以及靜態或交互式的可視化結果;利用pandas的groupby功能對數據集進行切割和匯總操作;處理各種各樣的時

>>> df.groupby(['key1', 'key2']).size()key1 key2a one 2 two 1b one 1 two 1dtype: int64

.unstack() DataFrame['data1'].groupby(['key1','key2',...]).mean().unstack()

DataFrame.mean().unstack()數據類型為 DataFrame將 groupby 運算的內容從純列格式(只有表頭和數據),重新排列為行列式(擁有行頭、列頭和數據)-->將.mean()的 Series 格式,轉化為DataFrame()格式>>> means = df['data1'].groupby([df['key1'], df['key2']]).mean()>>> meanskey1 key2a one -0.714084 two -2.120793b one 0.642216 two 0.975133dtype: float64

>>> means.unstack()key2 one twokey1 a -0.714084 -2.120793b 0.642216 0.975133