Python數據分析第十四課:數據分析知識總結

在前面的學習中,我們瞭解了什麼是數據分析:就是從數據裏面尋求真正有價值的信息,並對實際的工作或者生活有一定的指導作用,這個過程就叫數據分析。

由此,我們總結了數據分析的基本流程:
在這裏插入圖片描述

Series和DataFrame

接下來,我們主要學習了Python最重要的數據分析工具包Pandas。
在Pandas中,我們首先了解了它的兩種數據結構,一個Series數據就是Excel中的一條數據,一個DataFrame數據就是Excel中的一張表。
接着我們學習了,利用索引值以及切片我們可以獲取兩種數據結構的數據。

from pandas import Series
import pandas as pd
emp=['001','002','003','004','005','006']
name=['亞瑟', '後裔','小喬','哪吒' ,'虞姬','王昭君']
series = Series(data=name,index=emp)
# 獲取多個不連續的數據
print('位置下標',series[[1,3]])
# 使用切片獲取連續的數據
print('位置切片',series[0:3])

df_dict = {
 'name':['ZhangSan','LiSi','WangWu','ZhaoLiu'],
 'age':['18','20','19','22'],
 'weight':['50','55','60','80']
}
df = pd.DataFrame(data=df_dict,index=['001','002','003','004'])
print(df)
# 通過位置索引切片獲取一行
print(df[0:1])
# 通過位置索引切片獲取多行
print(df[1:3])
# 獲取多行裏面的某幾列
print(df[1:3][['name','age']])

此處需要注意:我們自定的index值被叫做索引下標,沒有設置index值時會有一個默認的值叫做位置下標。

數據的讀取和寫入

瞭解瞭如何獲取數據之後,我們學習瞭如何利用Pandas讀取本地csv和excel文件。

使用pandas.read_excel()和pandas.read_csv()方法,在指定文件路徑後便可讀取數據。

如果文件中包含多個數據表,可以通過sheet_name參數設置表的名字。

在使用這兩個方法讀取文件的時候,會默認將文件中第一行數據作爲列索引值,可以通過header參數設置。

import pandas as pd
# 將第一行設置成索引
people = pd.read_csv('./data/People1.csv',header = 0)

# 不設置索引,使用索引默認值
people = pd.read_csv('./data/People1.csv',header = None)

讀取數據之後,我們應該對數據進行整理和清洗。

數據整理和清洗(空值、重複值)

在數據分析過程中,我們會有至少一半的時間都在整理和清洗數據。

Pandas中使用NaN來表示空值(缺失值),空值再參與計算時並不會報錯,因爲NaN類型是Float類型,但是計算出的結果都是NaN,會影響我們的計算結果。

所以,最好的方法就是含有空值的數據刪除。

# 只要含有NaN的整行數據刪掉
df.dropna()
# 想要刪除整行都是空值的數據需要添加how='all'參數
df.dropna(how='all')

如果想要對列做刪除操作,需要添加axis參數,axis=1表示列,axis=0表示行。

對於數據量比較大的時候,我們建議使用dropna()進行刪除,並不會影響整體分析結果。

但是當我們的數據量比較少的時候,刪除可能會影響整體分析結果,這時我們就可以使用填充的方式,對空值進行處理。

可以使用fillna()方法對空值進行填充。

df.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)

代碼解釋(注意:method參數不能與value參數同時出現):

  • value:需要用什麼值去填充缺失值。

  • axis:確定填充維度,從行開始或是從列開始。

  • method:

      1.ffill,用缺失值前面的一個值代替缺失值,如果axis =1,那麼就是橫向的前面的值替換後面的缺失值,如果axis=0,那麼則是上面的值替換下面的缺失值。 
      2.bfill,缺失值後面的一個值代替前面的缺失值。。
    
  • limit:確定填充的個數,如果limit=2,則只填充兩個缺失值。

處理好空值以後,我們還需要考慮重複數據對數據分析結果準確度的影響。

重複數據比較多的時候,會降低分析的準確度,一會降低分析的效率。所以我們在整理數據的時候應該將重複的數據刪除掉。

可以使用duplicated()方法判斷是否有重複的數據,返回的是一個值爲Bool類型的Series。

同時,我們也可以使用drop_duplicates()方法將重複數據進行刪除。

數據合併

當我們分析的數據在多個表中時候,爲了方便分析就需要我們將數據進行合併。

數據合併主要包括下面兩種操作:

  • 軸向連接(concatenation),pd.concat()可以沿一個軸將多個DataFrame對象連接在一起,形成一個新的DataFrame對象
  • 融合(merging),pd.merge()方法可以根據一個或多個鍵將不同DataFrame中的行連接起來

同時,我們也可以用邏輯運算的方式對數據進行篩選。例如:

# 準確獲取到所有關注者超過100的用戶數據
bools= df['關注者']>100
df1 = df[bools]

並且,可以使用sort_index()、sort_values()兩個方法對數據進行排序,並且這兩個方法Series和DataFrame都支持。

數據分組

俗話說“物以類聚,人以羣分”,我們在分析的時候,一般會將數據進行分類,然後針對某一類數據進行具體分析。

Pandas提供了一個靈活高效的groupby功能,它使你能以一種自然的方式對數據集進行切片、切塊、摘要等操作。

import pandas as pd
df = pd.read_excel('/data/course_data/data_analysis/forbes_2018.xlsx')
# 根據gender列進行分組
groups = df.groupby('gender')
print(groups)

使用遍歷,我們可以獲取到每一組的數據信息:

for group_name,group_df in groups:
    print(group_name,group_df.shape)

並且,可以分組後數據使用mean()、max()、min()等統計函數快速獲取我們的指標值。

pandas裏常用的統計函數包括:

  • count( ):統計列表中非空數據的個數
  • nunique( ):統計非重複的數據的個數
  • sum( ):統計列表中所有數值的和
  • mean( ):計算列表中數據的平均值
  • median( ):統計列表中數據的中位數
  • max( ):求列表中數據的最大值
  • min( ):求找列表中數據的最小值

多層索引

如果根據多列數據進行分組後,會出現多層索引情況。
在這裏插入圖片描述
對於多層級Series的取值,可以直接使用[]的方式取值。

s['張三','期末']
s[:,'期中']

取值的方式我們可以根據剝洋蔥原則,從外到內一層一層的剝。

在對多層索引DataFrame的取值是,我們推薦使用loc()函數。

df.loc['張三','期中']
df.loc['張三'].loc['期中']
df.loc[('張三','期中'),:]

DataFrame和Series有一個同樣的注意點,就是無法直接對二級索引直接進行索引,必須讓二級索引變成一級索引後才能對其進行索引!

時間序列

在金融、經濟、物理學等領域,都需要在多個時間點觀測或者測量數據,這樣就產生了關於時間序列的數據。

我們在分析的時候,可以將時間列數據設置成數據的索引,然後選出一定時間段內的數據進行分析。

import pandas as pd
import numpy as np
time_index = pd.date_range('2019-01-01', periods=400)
time_data = np.random.randint(100,size=400)
date_time = pd.Series(data=time_data,index=time_index)

可以分別依據年份、月份進行索引,以及根據時間戳進行切片獲取數據。

#  按年份進行索引
date_time['2020']
# 按月份進行索引
date_time['2019-10']
# 按照時間戳進行切片
date_time['2019-10-05':'2019-10-10']

有的時候用csv導入到時間數據時,默認的是字符串的數據類型 ,當可視化的時候,會出現沒有按時間先後順序的方式繪圖 ,所以需要將字符串解析爲時間類型的數據類型。

使用Pandas的to_datetime()方法可以將字符串形式的日期轉換成時間格式。

pd.to_datetime(arg,format=None)
  • arg:需要修改的數據;
  • format:數據的格式

常見圖形的繪製

俗話說:“文不如表,表不如圖”,如果我們將海量的數據繪製成圖,就可以讓我們的數據更加直觀的呈現,更具說服力。

所以,我緊接着又學習了Python中另外一個庫Matplotlib,它的功能非常強大,可以通過調用函數輕鬆方便地繪製數據分析中常見的各種圖像,比如折線圖、條形圖、柱狀圖、散點圖、餅圖等。
在Matplotlib的學習中我們首先要了解常見圖形種類及意義。

折線圖:

以折線的上升或下降來表示統計數量的增減變化的統計圖

  • 特點:能夠顯示數據的變化趨勢,反映事物的變化情況。(變化)

散點圖:

用兩組數據構成多個座標點,考察座標點的分佈,判斷兩變量之間是否存在某種關聯或總結座標點的分佈模式。

  • 特點:判斷變量之間是否存在數量關聯趨勢,展示離羣點(分佈規律)

柱狀圖:

排列在工作表的列或行中的數據可以繪製到柱狀圖中。

  • 特點:繪製連離散的數據,能夠一眼看出各個數據的大小,比較數據之間的差別。(統計/對比)

直方圖:

由一系列高度不等的縱向條紋或線段表示數據分佈的情況。 一般用橫軸表示數據範圍,縱軸表示分佈情況。

  • 特點:繪製連續性的數據展示一組或者多組數據的分佈狀況(統計)

餅圖:

用於表示不同分類的佔比情況,通過弧度大小來對比各種分類。

  • 特點:分類數據的佔比情況(佔比)

想要學好用好Matplotlib是特別簡單的,前提就是要必須清楚的瞭解Matplotlib圖像組成。
在這裏插入圖片描述
同時,我們還要清楚每種圖形的繪製方法,折線圖:plt.plot();柱狀圖:plt.bar();直方圖:plt.hist();散點圖:plt.scatter();餅圖:plt.pie()。

在使用Matplotlib時候需要注意,Matplotlib畫的圖不顯示中文,所以我們的處理方式是添加字體屬性。

from matplotlib import pyplot as plt
from matplotlib import font_manager
import random
# 創建字體對象
my_font = font_manager.FontProperties(fname='/data/course_data/data_analysis/STSONG.TTF',size=18)
x = range(0,120)
y = [random.randint(10,30) for i in range(120)]
# 添加字體屬性
plt.ylabel("次數",fontproperties=my_font)
plt.xlabel("時間",fontproperties=my_font)
# 設置標題
plt.title('每分鐘跳動次數',fontproperties=my_font)
plt.plot(x,y)
plt.show()

並且,我們還可以通過xticks()和yticks()自定義x軸和y軸的刻度值。
下面我們總結一下Matplotlib常用的方法:

在這裏插入圖片描述

Seaborn庫

Seaborn和Matplotlib是Python最強大的兩個可視化庫。Seaborn其默認主題讓人驚訝,而Matplotlib可以通過其多個分類爲用戶打造專屬功能。

Seaborn的底層是基於Matplotlib的,他們的差異有點像在點餐時選套餐還是自己點的區別,Matplotlib是獨立點菜,可能費時費心(尤其是對我這種選擇困難症患者…)但最後上桌的菜全是特別適合自己的;而Seaborn是點套餐,特別簡單,一切都是配好的,雖然省時省心,但可能套餐裏總有些菜是不那麼合自己口味的。

所以,在需要繪製圖形的時候,我們可以根據自己的喜好自行選擇。

俗話說“臺上一分鐘,臺下十年功”。任何人取得的任何成就都不是一蹴而就的,學習之路更應如此,那麼學習數據分析你需要的基本功是什麼呢?


千里之行,始於足下,數據分析,始於Excel。數據分析的第一步,就是能夠使用Excel進行各種業務數據研究。

數據分析中最常用的語言就是SQL,無論是數據的提取、轉換,還是各種數據計算,SQL都是最好的武器。

基礎數學和統計學可以提高你的分析能力,瞭解爲什麼和在哪裏使用平均值,中位數和模式。

在數據可視化方面,除了Excel、matplotlib以外,還有一個常用的就是Tableau,通過簡單的拖拽數據處理方式,迅速對數據進行初級透視。

數據報告的撰寫,是數據分析的最後一步,也是最重要的一步,好的分析報告是你升值加薪的法寶。

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