機器學習(一): numpy、pandas、matplotlib基本使用

1  numpy的基本使用

     numpy(Numerical Python) 是 Python 語言的一個擴展程序庫,支持大量的維度數組與矩陣運算,此外也針對數組運算提供大量的數學函數庫。

     numpy的官網:http://www.numpy.org/ 。

     GitHub上的numpy:https://github.com/numpy/numpy

     菜鳥教程上的numpy:http://www.runoob.com/numpy/numpy-tutorial.html

1.1   numpy安裝

      Windows系統 : pip install numpy

      Ubuntu系統:   sudo apt-get install python-numpy

1.2   numpy的簡單實用

1.2.1  初始化數組

      import numpy as np
      arr1= np.array([[1,2,3],[1,2,3]])
      arr2 = np.zeros([2,3])
      arr3 = np.ones([5,5])
      arr4 =np.eye([3,3])
      arr5 =np.linspace(1,9,3)
      a2 = np.arange(100,210,10)
      print(a2)

      a3 =np.linspace(1,10,10)
      print(a3)

      a4 =np.logspace(1,7,num=7,base=2)
      print(a4)

1.2.2  數組的屬性

a1 = np.array([[1.0, 2, 3], [1, 2, 3]])
print(a1)
a1_shape = a1.shape
print(a1_shape)
print(a1.size)
print(a1.ndim)
print(a1.dtype)
print(a1.itemsize)

1.2.3  數組、矩陣的索引與切片

a5 = np.arange(10)
s = slice(2,10,2)
print(a5)
print (a5[s])
print(a5[2:10:2])
a6 = np.array([[1,2,3],[3,4,5],[4,5,6]])
print(a6)
print(a6[1:])

a7 = np.array([[1,2,3],[3,4,5],[4,5,6]])
print(a7)
print(a7[...,1])   # 第2列元素
print(a7[1,...])   # 第2行元素
print(a7[...,1:])  # 第2列及剩下的所有元素

1.2.4  數組的變換

a8 = np.array([[1,2,3],[3,4,5]])
print(a8)
print(a8.reshape(3,2))
for i in a8.flat:
    print(i)

a9 = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(a9)
print(a9.flatten())
print(a9.ravel())

a10 = np.array([[1,2,3],[3,4,5],[4,5,6]])
print(a10.transpose())
print(a10.T)
print(np.hstack((a10,a10)))
print(np.vstack((a10,a10)))

a11 = np.arange(9)
print(a11)
print(np.split(a11,3))
print(np.split(a11,[4,7]))

更多內容參考:numpy網站 https://numpy.org/devdocs/user/quickstart.html

2 pandas的基本使用

Pandas是一個強大的分析結構化數據的工具集;它的使用基礎是Numpy(提供高性能的矩陣運算);用於數據挖掘和數據分析,同時也提供數據清洗功能。利器之一:DataFrame,DataFrame是Pandas中的一個表格型的數據結構,包含有一組有序的列,每列可以是不同的值類型(數值、字符串、布爾型等),DataFrame即有行索引也有列索引,可以被看做是由Series組成的字典。利器之二:Series,它是一種類似於一維數組的對象,是由一組數據(各種NumPy數據類型)以及一組與之相關的數據標籤(即索引)組成。僅由一組數據也可產生簡單的Series對象。(應用自:https://github.com/teadocs/pandas-cn/tree/v0.25.0/docs)

pandas全面的使用教程可以參考 https://pandas.pydata.org/pandas-docs/stable/pandas.pdf

pandas10分鐘入門可以參考https://pandas.pydata.org/pandas-docs/stable/getting_started/10min.html

import pandas as pd
import numpy as np
# 導入數據
# 從CSV文件導入數據
pd.read_csv(filename) 

# 從限定分隔符的文本文件導入數據
pd.read_table(filename)

# 從Excel文件導入數據
pd.read_excel(filename)

# 從SQL表/庫導入數據
pd.read_sql(query, connection_object)

# 從JSON格式的字符串導入數據
pd.read_json(json_string)

# 解析URL、字符串或者HTML文件,抽取其中的tables表格
pd.read_html(url)

# 從你的粘貼板獲取內容,並傳給read_table()
pd.read_clipboard()

# 從字典對象導入數據,Key是列名,Value是數據
pd.DataFrame(dict)


# 導出數據
# 導出數據到CSV文件
df.to_csv(filename)

# 導出數據到Excel文件
df.to_excel(filename)

# 導出數據到SQL表
df.to_sql(table_name, connection_object)

# 以Json格式導出數據到文本文件
df.to_json(filename)



# 創建測試對象
# 創建20行5列的隨機數組成的DataFrame對象
pd.DataFrame(np.random.rand(20,5))

# 從可迭代對象my_list創建一個Series對象
pd.Series(my_list)
# 增加一個日期索引
df.index = pd.date_range('1900/1/30', periods=df.shape[0])

# 查看、檢查數據
# 查看DataFrame對象的前n行
df.head(n)

# 查看DataFrame對象的最後n行
df.tail(n)

# 查看行數和列數
df.shape()

# 查看索引、數據類型和內存信息
df.info()

# :查看數值型列的彙總統計
df.describe()

# 查看Series對象的唯一值和計數
s.value_counts(dropna=False)

# 查看DataFrame對象中每一列的唯一值和計數
df.apply(pd.Series.value_counts)

# 數據選取
# 根據列名,並以Series的形式返回列
df[col]

# 以DataFrame形式返回多列
df[[col1, col2]]

# 按位置選取數據
s.iloc[0]

# 按索引選取數據
s.loc['index_one']

# 返回第一行
df.iloc[0,:]

# 返回第一列的第一個元素
df.iloc[0,0]

# 數據清理
# 重命名列名
df.columns = ['a','b','c']

# 檢查DataFrame對象中的空值,並返回一個Boolean數組
pd.isnull()

# 檢查DataFrame對象中的非空值,並返回一個Boolean數組
pd.notnull()
# 刪除所有包含空值的行
df.dropna()

# 刪除所有包含空值的列
df.dropna(axis=1)

# 刪除所有小於n個非空值的行
df.dropna(axis=1,thresh=n)
# 用x替換DataFrame對象中所有的空值
df.fillna(x)
# 將Series中的數據類型更改爲float類型
s.astype(float)
# 用‘one’代替所有等於1的值
s.replace(1,'one')
# 用'one'代替1,用'three'代替3
s.replace([1,3],['one','three']):用'one'代替1,用'three'代替3
# 批量更改列名
df.rename(columns=lambda x: x + 1)
# 選擇性更改列名
df.rename(columns={'old_name': 'new_ name'})
# 更改索引列
df.set_index('column_one')
# 批量重命名索引
df.rename(index=lambda x: x + 1)

# 數據處理:Filter、Sort和GroupBy
# 選擇col列的值大於0.5的行
df[df[col] > 0.5]

# 按照列col1排序數據,默認升序排列
df.sort_values(col1)

# 按照列col1降序排列數據
df.sort_values(col2, ascending=False)

# 先按列col1升序排列,後按col2降序排列數據
df.sort_values([col1,col2], ascending=[True,False])

# 返回一個按列col進行分組的Groupby對象
df.groupby(col)

# 返回一個按多列進行分組的Groupby對象
df.groupby([col1,col2])

# 返回按列col1進行分組後,列col2的均值
df.groupby(col1)[col2]

# 創建一個按列col1進行分組,並計算col2和col3的最大值的數據透視表
df.pivot_table(index=col1, values=[col2,col3], aggfunc=max)

# 返回按列col1分組的所有列的均值
df.groupby(col1).agg(np.mean)

# 對DataFrame中的每一列應用函數np.mean
data.apply(np.mean)

# 對DataFrame中的每一行應用函數np.max
data.apply(np.max,axis=1)

# 數據合併
# 將df2中的行添加到df1的尾部
df1.append(df2)

# 將df2中的列添加到df1的尾部
df.concat([df1, df2],axis=1)

# 對df1的列和df2的列執行SQL形式的join
df1.join(df2,on=col1,how='inner')

# 數據統計
# 查看數據值列的彙總統計
df.describe()

# 返回所有列的均值
df.mean()

# 返回列與列之間的相關係數
df.corr()

# 返回每一列中的非空值的個數
df.count()

# 返回每一列的最大值
df.max()

# 返回每一列的最小值
df.min()

# 返回每一列的中位數
df.median()

# 返回每一列的標準差
df.std()

 

 3 matplotlib 的基本使用

Matplotlib是一個Python 2D繪圖庫,它以多種硬拷貝格式和跨平臺的交互式環境生成出版物質量的圖形。官網:https://matplotlib.org/users/index.html。使用者指南:https://matplotlib.org/users/index.html。繪圖設設置不再舉例,查看官網手冊。另外matplotlib的中文網站https://www.matplotlib.org.cn/也可使用。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章