Blog Cover Image

Inspire you to have New thinking, Walk out your unique Road.

有的時候,你無意間遇到的一些故事,會激發你的靈感,改變你的想法,接下來你會用與之前全然不同的觀念去創造屬於你獨特的故事。

Sign @MinaYu.

後端小菜鳥學習記錄(7)-進入Pandas啦!

Posted on

10/1

https://scotch.io/tutorials/build-a-crud-web-app-with-python-and-flask-part-one

https://medium.com/python-pandemonium/build-simple-restful-api-with-python-and-flask-part-1-fae9ff66a706

https://medium.com/python-pandemonium/build-simple-restful-api-with-python-and-flask-part-2-724ebf04d12

https://flask-restless.readthedocs.io/en/stable/quickstart.html

https://flask-marshmallow.readthedocs.io/en/latest/

https://flask-restful.readthedocs.io/en/latest/quickstart.html

將Restful+CRUD文件做法看一看(1.5hr)

動手將之前寫的api改成Restful+CRUD(11:30-12:30, 14:33-16:16, 4hours)

將Request.py改成丟Random資料

pandas/ 開始參與專案的小部分工作(5:00-


10/2

學習pandas(10-2)(4hours)

https://pandas.pydata.org/


專案(3:30-19:20)

若有子module或者有權限的,用這樣的方式update

git submodule update filename

利用這樣的方式來安裝local的py套件(載下來的,或者別人做的)

pip install .

https://zhuanlan.zhihu.com/p/25283691


10/3

專案(10:00-18:30)

http://flask-sqlalchemy.pocoo.org/2.3/quickstart/

https://pandas.pydata.org/pandas-docs/stable/api.html#dataframe


10/4

今日目標:

1hr.架環境

1hr.學五個函數

下午:試著完成一個檔案的改寫


10:38-11:30(1hours) - 架設環境

11:30-12:30(1hours) - 練習dataframe函數

https://pandas.pydata.org/pandas-docs/stable/api.html#dataframe

https://www.programcreek.com/python/example/101386/pandas.read_sql_table

https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.html

https://stackoverflow.com/questions/20621607/module-object-has-no-attribute-dataframe


***大神開課啦~***

取得資料/遇到問題

先將Data的Type輸出出來

Python 不外乎

  • List(Array)

  • Dictionary

  • Object(或其他)

    List = [a,b,c,d,e]

他是利用index 索引值來取得資料

也就是說,他其實也跟字典一樣,有著

key:value

key就是index索引值,list裡是0.1.2.3.4來代替第一個位置,第二個位置

上面的a,b,c,d,e就是值

所以取第一個值就是

<span class="hl-identifier">list</span><span class="hl-brackets">[</span><span class="hl-number">0</span><span class="hl-brackets">]</span>

再來是字典,跟json長得

dictionary = {'key1':'value1', 'key2':'value2'}

這個的話他的key值可以是字串/中文或其他

但是list的key值是固定的數字索引

字典取值是這樣

dictionary['key1']

取子字典的話,前面篇數有提到XD

最後是Object或其他

通常會是有套件或者其他函數擷取

這種的話,以pandas舉例

df = pd.read_sql("select * from User), db.engine)
t = df['Email']
type(t)

pandas.core.series.Series

所以這個就是Series

取值方法就是要去找Pandas的函數

所以如果是這種另外回傳的資訊,那就要去知道他的資料型態,再去尋找相對應的函式來取值

https://www.packtpub.com/mapt/book/big_data_and_business_intelligence/9781787123137/3/ch03lvl1sec27/retrieving-values-in-a-series-by-label-or-position


****再來是遇到問題

遇到問題,先知道資料的類型是什麼,可以根據類型找網路資源來看

  1. 優先看函數Documentation

  2. 再搜尋相關的chear sheet

  3. 最後才是google

這邊以pandas為例

Documentation

https://pandas.pydata.org/pandas-docs/stable/api.html#dataframe

pandas python cheat sheet

https://www.google.com.tw/search?q=pandas+python+cheat+sheet&oq=pandas+python+cheat+sheet&aqs=chrome..69i57j0l5.9223j0j7&sourceid=chrome&ie=UTF-8

最後才是去google

google 你要知道關鍵字,越精準越好,不然只是在隨便抓,會很茫然

最後記錄自己遇到的問題

https://ithelp.ithome.com.tw/articles/10194003

https://ithelp.ithome.com.tw/articles/10193421

****BUG小提醒,注意你看到的json或者字典值也許跟別人開的規格一樣

可是呢!!!,有的時候數字值看到並不表示他是真的數字,我就把被我所看到的數字迷惑XD,他具體是什麼類型不知道,但最好最後還是利用

int()

來轉成數字在輸出好些

https://www.google.com.tw/search?ei=br61W7vdMYuZ8wXrxY_IDw&q=loc+iloc+ix+pandas&oq=loc+iloc+ix+pandas&gs_l=psy-ab.3..0i7i30k1j0l2j0i5i30k1j0i8i30k1l6.2836.3134.0.3421.3.3.0.0.0.0.98.98.1.1.0....0...1c.1.64.psy-ab..2.1.98....0.5VO28B8wOEU

如何取Pandas Series值

https://www.packtpub.com/mapt/book/big_data_and_business_intelligence/9781787123137/3/ch03lvl1sec27/retrieving-values-in-a-series-by-label-or-position

取資料庫限制10筆,根據什麼來判定,取最後十筆

最後幾筆

select * from table order by ID DESC limit 10

10/5

10:24-11:30 STUDY (1hours)

13:30-16:20(3hours)

吃飽回來後解大程式

https://pandas.pydata.org/pandas-docs/stable/indexing.html

Object Type Indexers
Series `s.loc[indexer]`
DataFrame `df.loc[row_indexer,column_indexer]`
Panel `p.loc[item_indexer,major_indexer,minor_indexer]`
Object Type Selection Return Value Type
Series `series[label]` scalar value
DataFrame `frame[colname]` `Series` corresponding to colname
Panel `panel[itemname]` `DataFrame` corresponding to the itemname
***今日學習的DataFrame函式~~***
def f_read(table, limit):
    df = pd.read_sql("select * from {} limit {}".format(table, limit), db.engine)
    return df

def axes_basic():
    df = f_read("User",50)
    # TypeError: 'RangeIndex' object is not callable
    # dont use ()
    df = df.index

    # TypeError: 'Index' object is not callable
    # dont use()
    df = df.columns

    # Type: DataFrame >> DataFrame[Column]
    # Type: Series >> series[label]
    get_column = df['Name']
    get_label = df[1]

def axes_type():
    # show columns type
    df = df.dtypes()

    # get type counts
    df = df.get_dtype_counts()

    # get data from type
    # df.select_dtypes([include, exclude])
    df = df.select_dtypes(object,int)

def axes_value():
    # TypeError: 'numpy.ndarray' object is not callable
    # return array (don't use () )
    df = df.values

    # this is show array of data
    df = df.get_values()

***大神開課啦~***

關於寫程式的習慣跟技巧
如何讓大家知道現在程式的完成狀態
  • 利用註解方式 » Git Push

  • 於GitHub » Wiki中改

  • 於GitHub 發Issue

利用註解方式 (Python)

# TODO 這個你可以寫還沒完成,但準備解決,需要做什麼來完成它/或者不知道怎麼寫,還沒碰觸的註解
# FIXME 這個則是寫你遇到什麼問題,你已經處理過了還是遇到問題/會留下暫時的解法,使用這個註解
完成的就不用寫註解

***大神們建議***

多看Youtuber 工程師高手的頻道來改善自己寫Code的習慣

https://stackoverflow.com/questions/17071871/select-rows-from-a-dataframe-based-on-values-in-a-column-in-pandas


被大神念自己的If, Else觀念不清啦!!!

***寫程式的超級注意事項***

若還是新手,建議一行一行DEBUG,使用像是Ipython與Jupyter之類的即時Feedback編輯器來一行一行檢查你寫的程式碼

尤其要注意的是: 你以為這行程式碼應該是在做甚麼,但實際上寫給電腦,電腦做的動作卻不是這樣!!




你看到的,跟你的認知,也許跟電腦輸出的資訊差異很大

所以被大神念說,找時間把最基礎的東西都補一補吧QQ,還有搞懂IF, Else的用法

基本上IF,Else就是在判定True, False !

IF []:
    return TRUE
Else:
    return FALSE

>> FALSE

IF ['a']:
    return TRUE
Else:
    return FALSE

>> TRUE

所以說這本身就是判定true, false
最好不要犯用集合來做比較,以及這種根本不知所云的比較QQ

所以老話一句就是

新手要練習的是

  1. 不要以為這行程式碼會是你想像的,直接一行一行驗證比較好

  2. 基礎的函數跟基礎的觀念跟用法要會用,不要亂用,然後不知道在寫甚麼,但以為知道在寫甚麼,或者亂用跑的出就好,是不對的

  3. 了解每一行程式碼,不要亂抄,會者抄別人程式,然後都不懂在幹嘛

  4. 當牽扯到資料讀取使用時,每一次吐出來的資料要利用Type()去查看資料類型