統計學原理之python數據分析基礎(初稿)

本篇內容關鍵詞:python基礎、數據分析、pandas、描述統計、matlibplot、seaborn、可視化分析

1.python基礎

1.1python簡介

都說python是門膠水語言,可以在需要的地方輕鬆地粘合目標需求。我覺得python的主要優點有兩點:

  1. 只需聚焦實現邏輯:只要把邏輯捋順,調用第三方庫可以輕易實現處理邏輯。語法簡潔,符合日常閱讀的習慣。
  2. 容易獲得相關的技術/理論支持:python社區龐大,只要關鍵詞選取得當即可在網絡上檢索到大多數問題的解決辦法。使用者衆多,可以輕易找到使用者交流羣組。

1.2python安裝

新手可以直接安裝Anaconda,這是一個開源的python發行版本,發行版的意思就是在python官方本本的基礎上添加了一些額外的內容。這些額外的內容在Anaconda中指的的是:python數據科學計算相關的第三方庫、conda(開源軟件包和環境管理系統)等。前者集成大多數數據科學計算相關的包,大大節省了學習和使用過程中第三方庫安裝和配置的時間;後者使得可以在該集成的基礎上管理和安裝新的第三方庫。

在這裏插入圖片描述

1.3python語法和使用

水平和時間有限不作總結,推薦兩個相關的教程:

  1. 文字教程:廖雪峯Python教程。使用姿勢:
    1)建立python語法知識體系:”全篇“掃描一遍;
    2)當作工具參考:按照關鍵詞+ sites:www.liaoxuefeng.com。
    例如:python 類 site:www.liaoxuefeng.com,即可檢索到該網站內關鍵詞相關的內容。
    [外鏈圖片轉存失敗(img-4oii4II0-1564321233781)(en-resource://database/12109:0)]
    2.視頻教程:優達學城免費課程:編程基礎:Python,課程老師是一個親和力滿分的帥氣印度裔小哥,內容適合完全零基礎的小白同學。課程內容比較基礎,但是學習的方法和練習內容都挺有意思。

2.python數據分析

2.0相關工具介紹:

  1. 使用的工具是anaconda集成的jupyter notebook(屬於Ipython)
    [外鏈圖片轉存失敗(img-uvN99lXX-1564321233789)(en-resource://database/12111:0)]
    新建ipython notebook 文件(後綴.ipynb)
    2 .主要使用pandas和matlibplot兩個包

pandas是什麼? pandas是一個能提供高效處理結構化數據的數據結構和函數(方法)。
pandas 有兩種數據結構,DataFrame和Numpy。爲什麼要單獨創造新的數據結構呢?python自身的數據結構不好用嗎?新數據結構有什麼優勢呢?答案是:新的數據結構好用得飛起,
這兩種結構可以進行矩陣運算,這就意味着一些數學矩陣的處理可以被快速地完成,以及快速地進行查詢並賦值;
pandas提供了一系列的數據處理的函數(方法),例如從數據讀取、數據預處理、數據分析和數據可視化都有相應的函數。值得注意的是,sql中的一些數據處理操作也可以輕易地實現,例如連接(join)操作,分組(groupby)等,都可以通過簡潔易維護的代碼實現。

2.1數據獲取

  1. 數據讀取:
    1)讀取數據庫數據:pd.read_sql()
    2)讀取文本數據:pd.read_csv()
    3)讀取excel數據:pd.read_excel()
    更多數據讀取的姿勢,可以結合具體需求和遇到的問題檢索,絕大多數基礎問題都會有現成的答案。檢索相關函數用法時可以加上關鍵詞 doc 即document的縮寫,可以輕易搜到相關的文檔。
# 以下時簡單示例,不做過多的介紹
import pandas as pd
# 讀取文件test.xlsx 中 sheet名爲測試數據 的數據,數據中有列名 header 設置爲真。
data = pd.read_excel('test.xlsx',sheet_name = '測試數據',header = True)
  1. 數據初始化:
import pandas as pd
import numpy as np
# 1.通過“列表”初始化:列表可以是:等長的numpy多維數組、等長的多維的list
dates = pd.date_range('20190728', periods=3)
df1 = pd.DataFrame(np.random.randn(3, 4), index=dates, columns=list('ABCD'))
df1

在這裏插入圖片描述

# 2.通過“列表”組成的字典初始化:等長的numpy多維數組、等長的多維的list
data = {'A':{'20190728':1,'20190729':1,'20190730':1},
'B':{'20190728':2,'20190729':2,'20190730':2},
'C':{'20190728':3,'20190729':3,'20190730':3},
'D':{'20190728':4,'20190729':4,'20190730':4}
}
# 通過 columns指定獲取數據的列和順序(顯式列索引 > 數據列索引)
df2 = pd.DataFrame(data,columns = ['D','C','B'])
df2

在這裏插入圖片描述

2.2探索性分析

  1. 數據預覽
# 查看數據屬性,列名和對應數據格式
df.info()
# 查看數據本身 前10條、最後10條和隨機10條
df.head(10)
df.tail(10)
df.sample(10)
  1. 數據切片

通過label(行/列名)、位置(數字座標)、布爾運算

# 1.通過label(行標籤) loc(行標籤 :index) iloc(int類型 列標籤(默認順序,從0開始)
df1 = pd.DataFrame(np.random.randn(6,3),index=list('abcdef'),columns=['col1','col3','col88'])
# 1.1.獲取index爲 a 到index爲c的三行數據
df1.loc['a':'c']
# 1.2獲取順序第0行和第1行的兩行數據
df1.iloc[0:2]
# 1.3通過位置切片,行和列都切割
df1.iloc[0:2,0:2]
#通過布爾運算切片,篩選出col3值小於0的數據。
df1[df1.col3<0]
#通過布爾運算切片,篩選出col3值小於0的數據,只取指定列。
df1[df1.col3<0][['col3','col88']]

數據長這樣:
s

可參考官方文檔:Indexing and Selecting Data

2.3數據清洗

  1. 行列處理:切片、排序、合併、轉換
# 切片 見2.2.2
# 排序 按照列col1降序排列
df2 = df1.sort_values(['col1'], ascending=False)
# 合併:append、join、merge
# 新構造數據df3,強行以“追加”的方式合併,忽略原始的index
df3 = pd.DataFrame(np.random.randn(6,3),index=list('fpqrst'),columns=['col1','col3','col2'])
df_data = df3.append(df2,ignore_index=True)
# 按照特定列 join,可以指定連接方式、重合列明的標識。
df4 = pd.DataFrame(np.random.randint(1,5,size = (3,3)),index=list('fpq'),columns=['col5','col1','col2'])
df5 = pd.DataFrame(np.random.randint(1,5,size = (3,3)),index=list('fpq'),columns=['col6','col1','col2'])
df_join = df4.join(df5.set_index('col1'),on='col1',how='left',lsuffix = '_L',rsuffix = '_R')
# merge 自行參考文檔,筆者幾乎沒用過
# 行列轉置
data = {"小明":{"語文":90,"數學":90,'英語':110},
        "小紅":{"語文":60,"數學":100,'英語':120},
       "小黑":{"語文":10,"數學":100,'英語':110}}
df_fenshu = pd.DataFrame(data)
# 將索引轉爲新的列,方便行列轉置
df_fenshu.index.name = '科目'
df_fenshu = df_fenshu.reset_index()
# 轉置再轉置
df_pivot_pivot_table = df_pivot_table.pivot_table(values = ['數學','英語','語文'],columns = '姓名')
df_pivot_pivot_table = df_pivot_pivot_table.reset_index()
df_pivot_pivot_table

join效果圖:
[外鏈圖片轉存失敗(img-3LPejISf-1564321233793)(en-resource://database/12125:0)]
轉置效果圖:
在這裏插入圖片描述

  1. 數據類型轉換:
#  強制類型轉換  int float category datetime64[ns] datetime64
df_pivot_pivot_table.科目.astype('category')
  1. 缺失值處理:定位、填充、刪除
#  缺失值定位
# 返回單元格級別的缺失值信息
df_data.isnull()
# 返回列級別的 缺失值信息
df_data.isnull().any()
# 返回存在缺失值的記錄
df_data[df_data.isnull().values==True]
# 缺失值填充
# 填0
df_data.fillna(0)
# 按照列區別填充
values = {'col2': 22222, 'col3': 1, 'col88': 88888}
df_data.fillna(value = values)

# 刪除存在缺失值的記錄,axis 爲0 表示行
df_data.dropna(axis = 0)
  1. 賦值
# 賦值 按位置、按條件、按行/列
df_data.loc['p':'t'] = 9999 
df_data.iloc[6:9,0:2] = -5555
df_data.loc['c'] = 30000
df_data.iloc[:,3] = 77777
df_data

2.4數據分析

  1. 簡單運算:“矩陣”運算
# 可以直接進行四則運算,會自動對齊index相同的數據,indexi不同則沒有結果。
df4 + df5
df4 - df5
df4 * df5
df4 / df5
  1. 統計分析:統計指標計算、聚合分析
df_data.describe()
df_data.col1.mean()
df_data.col1.median()
df_data.col1.max()
# 百分位數
df_data.col1.quantile(0.5)
df_data.col1.sum()
df_data.col1.var()
df_data.col1.std()
df_data.col1.skew()
# 累計求和(cum 累計系列)
df_data.col1.cumsum()
  1. 可視化分析:對比、分佈、聯繫、構成
    見文件:(待更新 + 統計指標補全)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章