制作一個網(wǎng)站怎么做目前最牛的二級分銷模式
目錄
- 一、前言
- 二、數(shù)據(jù)分析和深度學習的區(qū)別
- 三、人工智能
- 四、深度學習
- 五、Pandas
- 六、Pandas數(shù)據(jù)結構
- 6.1 Series - 序列
- 6.2 DataFrame - 數(shù)據(jù)框
- 七、輸入、輸出
- 7.1 讀取/寫入CSV
- 7.2 讀取/寫入Excel
- 7.3 讀取和寫入 SQL 查詢及數(shù)據(jù)庫表
- 八、調用幫助
- 九、選擇(這里可以參考上一篇文章的 Numpy Arrays 相關部分)
- 9.1 取值
- 9.2 選取、布爾索引及設置值
- 9.2.1 按位置
- 9.2.2 按標簽
- 9.2.3 按標簽/位置
- 9.2.4 布爾索引
- 9.2.5 設置值
- 十、刪除數(shù)據(jù)
- 十一、排序
- 十二、查詢序列與數(shù)據(jù)框的信息
- 12.1 基本信息
- 12.2 匯總
- 十三、應用函數(shù)
- 十四、數(shù)據(jù)對齊
- 14.1 內部數(shù)據(jù)對齊
- 14.2 使用 Fill 方法運算
- 十五、后記
本文詳細介紹了人工智能、數(shù)據(jù)分析和深度學習之間的關系,并就數(shù)據(jù)分析所需的Pandas庫做了胎教般的入門引導。祝讀得開心!
一、前言
??本文是原 《數(shù)據(jù)分析大全》、現(xiàn)改名為 《數(shù)據(jù)分析》 專欄的第二篇,我在寫這篇文章的時候突然意識到——單靠我是不可能把數(shù)據(jù)分析的方方面面都講得明明白白,只是是我自己知道什么,然后再輸出我所明白的知識罷了。所以《數(shù)據(jù)分析大全》的“大全”兩個字還真是擔不起,就改成 《數(shù)據(jù)分析》 了。
??本篇主要介紹數(shù)據(jù)分析中 Python Pandas 相關知識點,打算通過這一篇幫助大家順利入門Python Pandas,掌握基本的用法和思想。
??上一期《數(shù)據(jù)分析大全》——Numpy基礎可能講的太過側重代碼而忽略了講解,如果是還未入門的小白可能看完都不知道講了啥、為什么要講這些。
??實用性強和門檻低才是好文章的必要因素,像之前的那一篇就太過強調實用了。結果文章是簡短了,可除了已經(jīng)入門或從事相關工作的同行外,沒幾個能明白講了啥的。因此,本篇吸取之前的教訓,在交稿前又認真地完善了文章的措辭,加上段落間的銜接和引例等語句,方便小白也能看懂。
??讓我先來填一下上期的坑,聊聊數(shù)據(jù)分析和深度學習都有什么區(qū)別和聯(lián)系。
二、數(shù)據(jù)分析和深度學習的區(qū)別
??數(shù)據(jù)分析也好,深度學習也罷,都是一種新的技術,而新技術的產(chǎn)生則是為了解決現(xiàn)實中遇到的問題。我們可以姑且把現(xiàn)實問題分為簡單問題和復雜問題。簡單問題,只需要簡單分析,我們使用數(shù)據(jù)分析就夠了。而復雜問題,則需要復雜分析,我們這才使用機器學習。
??——那什么是簡單問題,什么是復雜問題呢?
??簡單問題就比如是今年學院獎學金的評選情況、今天公司的業(yè)績這類問題,數(shù)據(jù)量不是很大,我們就用數(shù)據(jù)分析。
??而我們天天使用的某寶、某東這類購物APP,它會根據(jù)你的歷史購物習慣(這里面有著海量的數(shù)據(jù)),來給推薦你可能感興趣的商品。那是如何做到的呢?對于這種復雜問題,這類APP背后使用的就是機器學習以及相應的推薦算法。
三、人工智能
??人工智能的范圍很廣,廣義上的人工智能泛指通過計算機(機器)實現(xiàn)人的頭腦思維,使機器像人一樣去決策。
??機器學習是實現(xiàn)人工智能的一種技術。在機器學習分很多方法(算法),不同的方法解決不同的問題。深度學習是機器學習中的一個分支方法。
??總結一下:人工智能、機器學習和深度學習的關系是:人工智能包含機器學習,機器學習包含深度學習(方法),即數(shù)據(jù)分析>機器學習>深度學習>機器學習。
四、深度學習
??深度學習在圖像,語音等富媒體的分類和識別上取得了非常好的效果,所以各大研究機構和公司都投入了大量的人力做相關的研究和開發(fā)。
??舉個眾人皆知的例子,那就是2016年谷歌旗下DeepMind公司開發(fā)的阿爾法圍棋(AlphaGo)戰(zhàn)勝人類頂尖圍棋選手。阿爾法圍棋的主要工作原理就是“深度學習”。
五、Pandas
??咳咳,扯遠了,本篇文章要講的Pandas還沒說呢。
??在學習任何東西之前,我們都應該明白兩個問題——它能干什么?我能用它做什么?
我相信肯定有人和我在入門數(shù)據(jù)結構時一樣,對這個叫“Pandas”的庫有很多問題——Pandas是什么?Pandas一詞是怎么來的?Pandas是做什么的?…讓我們來一起解決這些困惑。
??首先,Pandas是什么?是Panda→熊貓嗎?
這聽起來很Cool…但很顯然我們不可能用熊貓來幫助我們進行數(shù)據(jù)分析的工作。其實,Pandas 是一個開放源碼、BSD 許可的庫,提供高性能、易于使用的數(shù)據(jù)結構和數(shù)據(jù)分析工具。
??那么,Pandas 一詞是怎么來的呢?
Pandas 名字的由來衍生自術語 “panel data”(面板數(shù)據(jù))和 “Python data analysis”(Python 數(shù)據(jù)分析??偟膩碚f,Pandas 是一個強大的分析結構化數(shù)據(jù)的工具集,基礎是 Numpy(提供高性能的矩陣運算)。
??聽起來明白點了,讓我們再來看看 Pandas 究竟是干什么用的。
Pandas 可以從各種文件格式比如 CSV、JSON、SQL、Microsoft Excel 導入數(shù)據(jù)。
Pandas 可以對各種數(shù)據(jù)進行運算操作,比如歸并、再成形、選擇,還有數(shù)據(jù)清洗和數(shù)據(jù)加工特征。
Pandas 廣泛應用在學術、金融、統(tǒng)計學等各個數(shù)據(jù)分析領域。
??讓我們來總結一下:Pandas 是基于 Numpy 創(chuàng)建的 Python 庫,為 Python 提供了易于使用的數(shù)據(jù)結構和數(shù)據(jù)分析工具。只需要記住這句話,就可以繼續(xù)進行我們接下來的學習了!
??在Python中,我們可以使用以下語句導入 Pandas 庫:
>>> import pandas as pd
六、Pandas數(shù)據(jù)結構
6.1 Series - 序列
??首先我們來看看序列,Pandas Series 類似表格中的一個列(column),類似于一維數(shù)組,可以保存任何數(shù)據(jù)類型。Series 由索引(index)和列組成,函數(shù)如下:
pandas.Series( data, index, dtype, name, copy)
??讓我們對上的參數(shù)進行簡單的說明:
??data:一組數(shù)據(jù)(ndarray 類型)。
??index:數(shù)據(jù)索引標簽,如果不指定,默認從 0 開始。
??dtype:數(shù)據(jù)類型,默認會自己判斷。
??name:設置名稱。
??copy:拷貝數(shù)據(jù),默認為 False。
??想想看,要是實現(xiàn)存儲任意類型數(shù)據(jù)的一維數(shù)組(如下圖),應該怎么實現(xiàn)呢?
??這邊附上了實現(xiàn)代碼:
>>> s = pd.Series([3, -5, 7, 4], index=['a', 'b', 'c', 'd'])
6.2 DataFrame - 數(shù)據(jù)框
??DataFrame 是一個表格型的數(shù)據(jù)結構,它含有一組有序的列,每列可以是不同的值類型(比如數(shù)值、字符串、布爾型值)。DataFrame 既有行索引也有列索引,它可以被看做由 Series 組成的字典(共同用一個索引)。
??我們要是想實現(xiàn)上方的存儲不同類型數(shù)據(jù)的二維數(shù)組,可以這么實現(xiàn):
>>> data = {'Country': ['Belgium', 'India', 'Brazil'], 'Capital': ['Brussels', 'New Delhi', 'Brasília'],'Population': [11190846, 1303171035, 207847528]}>>> df = pd.DataFrame(data, columns=['Country', 'Capital', 'Population'])
七、輸入、輸出
7.1 讀取/寫入CSV
??在解決這個問題前先來了解一下,什么是CSV:
CSV(Comma-Separated Values,逗號分隔值,有時也稱為字符分隔值,因為分隔字符也可以不是逗號),其文件以純文本形式存儲表格數(shù)據(jù)(數(shù)字和文本)。
CSV 是一種通用的、相對簡單的文件格式,被用戶、商業(yè)和科學廣泛應用。
??Pandas 可以很輕松地處理CSV文件:
>>> pd.read_csv('file.csv', header=None, nrows=5)
>>> df.to_csv('myDataFrame.csv')
7.2 讀取/寫入Excel
??在解決問題時,往往涉及到從Excel讀取或寫入數(shù)據(jù),以下給出了相關的代碼實現(xiàn)。也有讀取內含多個表的Excel中數(shù)據(jù)的代碼實現(xiàn):
>>> pd.read_excel('file.xlsx')
>>> pd.to_excel('dir/myDataFrame.xlsx', sheet_name='Sheet1')
# 讀取內含多個表的Excel
>>> xlsx = pd.ExcelFile('file.xls')
>>> df = pd.read_excel(xlsx, 'Sheet1')
7.3 讀取和寫入 SQL 查詢及數(shù)據(jù)庫表
??關于讀取和寫入 SQL 查詢及數(shù)據(jù)庫表的代碼如下:
>>> from sqlalchemy import create_engine
>>> engine = create_engine('sqlite:///:memory:')
>>> pd.read_sql("SELECT * FROM my_table;", engine)
>>> pd.read_sql_table('my_table', engine)
>>> pd.read_sql_query("SELECT * FROM my_table;", engine)
read_sql()是 read_sql_table() 與 read_sql_query() 的便捷打包器
>>> pd.to_sql('myDf', engine)
八、調用幫助
??當然,在開發(fā)過程中遇到的問題肯定是千奇百怪的。除了在技術論壇上發(fā)帖求問、求助師兄師姐,我們也要學會自己查看幫助文檔:
??調用幫助的代碼如下:
>>>help(pd.Series.loc)
九、選擇(這里可以參考上一篇文章的 Numpy Arrays 相關部分)
9.1 取值
??在取值時,我們可以取序列的值,也可以取數(shù)據(jù)框的值。以下是取序列值和取數(shù)據(jù)框子集的代碼實現(xiàn),可以參考一下:
# 取序列的值
>>> s['a']
-5# 取數(shù)據(jù)框的子集
>>> df[1:]Country Capital Population1 India New Delhi 13031710352 Brazil Brasília 207847528
9.2 選取、布爾索引及設置值
9.2.1 按位置
??在我們根據(jù)需求選擇某些數(shù)據(jù)時,往往涉及到按行與列的位置選擇某值,以下給出了具體的代碼:
# 按行與列的位置選擇某值
>>> df.iloc[[0],[0]]
'Belgium'
>>> df.iat([0],[0])'Belgium'
9.2.2 按標簽
??按行與列的名稱選擇某值的代碼實現(xiàn)如下:
# 按行與列的名稱選擇某值
>>> df.loc[[0], ['Country']]'Belgium'>>> df.at([0], ['Country']) 'Belgium'
9.2.3 按標簽/位置
??我們也可以選擇某行或者選擇某列:
# 選擇某行
>>> df.ix[2] Country Brazil Capital Brasília Population 207847528# 選擇某列
>>> df.ix[:,'Capital']0 Brussels1 New Delhi2 Brasília >>> df.ix[1,'Capital']'New Delhi'
9.2.4 布爾索引
??Pandas支持物理順序進行選取,也支持通過邏輯進行取值。下面給出了幾個例子:
>>> s[~(s > 1)] # 序列 S 中沒有大于1的值
>>> s[(s < -1) | (s > 2)] # 序列 S 中小于-1或大于2的值
>>> df[df['Population']>1200000000] # 序列 S 中小于-1或大于2的值
9.2.5 設置值
??還可以設置索引項的值:
>>> s['a'] = 6 # 將序列 S 中索引為 a 的值設為6
十、刪除數(shù)據(jù)
??按索引刪除序列的值:
>>> s.drop(['a', 'c']) # 按索引刪除序列的值 (axis=0)
>>> df.drop('Country', axis=1) # 按索引刪除序列的值 (axis=0)
十一、排序
??基本的增刪查改都介紹完了,這里再介紹以下排序。下面給出了按索引排序、按某列的值排序、按某列的值排序的另解的代碼:
>>> df.sort_index() # 按索引排序
>>> df.sort_values(by='Country') # 按某列的值排序
>>> df.rank() # 按某列的值排序
十二、查詢序列與數(shù)據(jù)框的信息
12.1 基本信息
??排序也介紹完了,再來說說查詢吧。這里給出了獲取行、列索引和獲取數(shù)據(jù)框基本信息的兩種方法:
>>> df.shape # (行,列))
>>> df.index # 獲取索引
>>> df.columns # 獲取索引
>>> df.info() # 獲取數(shù)據(jù)框基本信息
>>> df.count() # 獲取數(shù)據(jù)框基本信息
12.2 匯總
??常見的功能實現(xiàn)函數(shù)匯總如下:
>>> df.sum() # 合計
>>> df.cumsum() # 合計
>>> df.min()/df.max() # 最小值除以最大值
>>> df.idxmin()/df.idxmax() # 最小值除以最大值
>>> df.describe() # 基礎統(tǒng)計數(shù)據(jù)
>>> df.mean() # 平均值
>>> df.median() # 中位數(shù)
十三、應用函數(shù)
??這里給出了幾個常用的函數(shù)的調用方法:
>>> f = lambda x: x*2 # 應用匿名函數(shù)lambda
>>> df.apply(f) # 應用函數(shù)
>>> df.applymap(f) # 應用函數(shù)
十四、數(shù)據(jù)對齊
14.1 內部數(shù)據(jù)對齊
??如有不一致的索引,則使用NA值:
>>> s3 = pd.Series([7, -2, 3], index=['a', 'c', 'd'])
>>> s + s3a 10.0b NaNc 5.0d 7.0
14.2 使用 Fill 方法運算
??還可以使用 Fill 方法進行內部對齊運算:
>>> s.add(s3, fill_value=0)a 10.0b -5.0c 5.0d 7.0
>>> s.sub(s3, fill_value=2)
>>> s.div(s3, fill_value=4)
>>> s.mul(s3, fill_value=3)
十五、后記
??本期關于人工智能、數(shù)據(jù)分析和深度學習的關系,人工智能、深度學習的相關內容也介紹完了,本文的重點放在了 Pandas 的快速入門方面,如果能在科研項目、工程開發(fā)和日常學習方面幫到大家,就最好不過了!下期會接著介紹Pandas進階方向的知識(因為這篇寫得太多了,就拆成兩篇發(fā)了)。
??非常感謝大家的閱讀,也歡迎大家提出寶貴的建議!我們下周見!