數(shù)據(jù)分析實戰(zhàn)45講 筆記三

05丨Python科學計算

在 NumPy 中數(shù)據(jù)結構是圍繞 ndarray 展開的, Pandas 中的核心數(shù)據(jù)結構是Series 和 DataFrame 這兩個核心數(shù)據(jù)結構酒觅,他們分別代表著一維的序列和二維的表結構愧捕∮缮樱基于這兩種數(shù)據(jù)結構捆愁,Pandas 可以對數(shù)據(jù)進行導入穆趴、清洗脸爱、處理、統(tǒng)計和輸出毡代。

  1. 數(shù)據(jù)結構:Series 和 DataFrame
  • Series 是個定長的字典序列,有兩個基本屬性:index 和 values阅羹。在 Series 結構中,index 默認是 0,1,2,……遞增的整數(shù)序列教寂,當然我們也可以自己來指定索引捏鱼,比如 index=[‘a(chǎn)’, ‘b’, ‘c’, ‘d’]。
import pandas as pd
from pandas import Series, DataFrame
x1 = Series([1,2,3,4])
x2 = Series(data=[1,2,3,4], index=['a', 'b', 'c', 'd'])
print x1
print x2

結果:

0    1
1    2
2    3
3    4
dtype: int64
a    1
b    2
c    3
d    4
dtype: int64
  • DataFrame 類型數(shù)據(jù)結構類似數(shù)據(jù)庫表酪耕。
import pandas as pd
from pandas import Series, DataFrame
data = {'Chinese': [66, 95, 93, 90,80],'English': [65, 85, 92, 88, 90],'Math': [30, 98, 96, 77, 90]}
df1= DataFrame(data)
df2 = DataFrame(data, index=['ZhangFei', 'GuanYu', 'ZhaoYun', 'HuangZhong', 'DianWei'], columns=['English', 'Math', 'Chinese'])
print df1
print df2

            English  Math  Chinese
ZhangFei         65    30       66
GuanYu           85    98       95
ZhaoYun          92    96       93
HuangZhong       88    77       90
DianWei          90    90       80
  1. 數(shù)據(jù)的導入和導出
    Pandas 允許直接從 xlsx导梆,csv 等文件中導入數(shù)據(jù),也可以輸出到 xlsx, csv 等文件,非常方便看尼。
import pandas as pd
from pandas import Series, DataFrame
score = DataFrame(pd.read_excel('data.xlsx'))
score.to_excel('data1.xlsx')
print score
  1. 數(shù)據(jù)清洗
    示例數(shù)據(jù):
            English  Math  Chinese
ZhangFei         65    30       66
GuanYu           85    98       95
ZhaoYun          92    96       93
HuangZhong       88    77       90
DianWei          90    90       80
  • 刪除 DataFrame 中的不必要的列或行
df2 = df2.drop(columns=['Chinese']) #刪除列
df2 = df2.drop(index=['ZhangFei']) #刪除行
  • 重命名列名 columns递鹉,讓列表名更容易識別
df2.rename(columns={'Chinese': 'YuWen', 'English': 'Yingyu'}, inplace = True)
  • 去重復的值
df = df.drop_duplicates() #去除重復行
  • 格式問題更改數(shù)據(jù)格式
    這是個比較常用的操作,因為很多時候數(shù)據(jù)格式不規(guī)范藏斩,我們可以使用 astype 函數(shù)來規(guī)范數(shù)據(jù)格式躏结,比如我們把 Chinese 字段的值改成 str 類型,或者 int64 可以這么寫:
df2['Chinese'].astype('str') 
df2['Chinese'].astype(np.int64) 
#刪除左右兩邊空格
df2['Chinese']=df2['Chinese'].map(str.strip)
#刪除左邊空格
df2['Chinese']=df2['Chinese'].map(str.lstrip)
#刪除右邊空格
df2['Chinese']=df2['Chinese'].map(str.rstrip)
df2['Chinese']=df2['Chinese'].str.strip('$') #刪除Chinese 字段里有美元符號
#全部大寫
df2.columns = df2.columns.str.upper()
#全部小寫
df2.columns = df2.columns.str.lower()
#首字母大寫
df2.columns = df2.columns.str.title()
  • 如果我們想看下哪個地方存在空值 NaN狰域,可以針對數(shù)據(jù)表 df 進行 df.isnull();如果我想知道哪列存在空值媳拴,可以使用 df.isnull().any()
  • 使用 apply 函數(shù)對數(shù)據(jù)進行清洗
    apply 函數(shù)是 Pandas 中自由度非常高的函數(shù),使用頻率也非常高兆览。比如我們想對 name 列的數(shù)值都進行大寫轉化可以用:
df['name'] = df['name'].apply(str.upper)

我們也可以定義個函數(shù)屈溉,在 apply 中進行使用。比如定義 double_df 函數(shù)是將原來的數(shù)值 *2 進行返回抬探。然后對 df1 中的“語文”列的數(shù)值進行 *2 處理子巾,可以寫成:

def double_df(x):
           return 2*x
df1[u'語文'] = df1[u'語文'].apply(double_df)

我們也可以定義更復雜的函數(shù),比如對于 DataFrame小压,我們新增兩列线梗,其中’new1’列是“語文”和“英語”成績之和的 m 倍,'new2’列是“語文”和“英語”成績之和的 n 倍怠益,我們可以這樣寫:

def plus(df,n,m):
    df['new1'] = (df[u'語文']+df[u'英語']) * m
    df['new2'] = (df[u'語文']+df[u'英語']) * n
    return df
df1 = df1.apply(plus,axis=1,args=(2,3,))

其中 axis=1 代表按照列為軸進行操作缠导,axis=0 代表按照行為軸進行操作,args 是傳遞的兩個參數(shù)溉痢,即 n=2, m=3僻造,在 plus 函數(shù)中使用到了 n 和 m,從而生成新的 df孩饼。

  1. 數(shù)據(jù)統(tǒng)計


    image.png
  2. 數(shù)據(jù)表合并
    兩個 DataFrame 數(shù)據(jù)表的合并使用的是 merge() 函數(shù)髓削,有下面 5 種形式:

df1 = DataFrame({'name':['ZhangFei', 'GuanYu', 'a', 'b', 'c'], 'data1':range(5)})
df2 = DataFrame({'name':['ZhangFei', 'GuanYu', 'A', 'B', 'C'], 'data2':range(5)})

結果:

       name  data1
0  ZhangFei      0
1    GuanYu      1
2         a      2
3         b      3
4         c      4
=================
       name  data2
0  ZhangFei      0
1    GuanYu      1
2         A      2
3         B      3
4         C      4
    1. 基于指定列進行連接
df3 = pd.merge(df1, df2, on='name')
       name  data1  data2
0  ZhangFei      0      0
1    GuanYu      1      1
    1. inner 內連接
df3 = pd.merge(df1, df2, how='inner')

結果類似交集

    1. left 左連接
df3 = pd.merge(df1, df2, how='left')
       name  data1  data2
0  ZhangFei      0    0.0
1    GuanYu      1    1.0
2         a      2    NaN
3         b      3    NaN
4         c      4    NaN
    1. right 右連接
      類似上面
    1. outer 外連接
      類似并集
  1. 如何用 SQL 方式打開 Pandas
    借助工具pandasql,可以在 Python 里可以直接使用 SQL 語句來操作 Pandas镀娶。pandasql 中的主要函數(shù)是 sqldf立膛,它接收兩個參數(shù):一個 SQL 查詢語句,還有一組環(huán)境變量 globals() 或 locals()梯码。
    ···
    import pandas as pd
    from pandas import DataFrame
    from pandasql import sqldf, load_meat, load_births
    df1 = DataFrame({'name':['ZhangFei', 'GuanYu', 'a', 'b', 'c'], 'data1':range(5)})
    pysqldf = lambda sql: sqldf(sql, globals())
    sql = "select * from df1 where name ='ZhangFei'"
    print pysqldf(sql)
    ···

06 | 學數(shù)據(jù)分析要掌握哪些基本概念宝泵?

  1. 商業(yè)智能 BI、數(shù)據(jù)倉庫 DW轩娶、數(shù)據(jù)挖掘 DM 三者之間的關系
    商業(yè)智能的英文是 Business Intelligence儿奶,縮寫是 BI。商業(yè)智能可以說是基于數(shù)據(jù)倉庫鳄抒,經(jīng)過了數(shù)據(jù)挖掘后闯捎,得到了商業(yè)價值的過程椰弊。所以說數(shù)據(jù)倉庫是個金礦,數(shù)據(jù)挖掘是煉金術瓤鼻,而商業(yè)報告則是黃金秉版。
    數(shù)據(jù)倉庫的英文是 Data Warehouse,縮寫是 DW茬祷。它可以說是 BI 這個房子的地基清焕,搭建好 DW 這個地基之后,才能進行分析使用祭犯,最后產(chǎn)生價值耐朴。數(shù)據(jù)倉庫可以說是數(shù)據(jù)庫的升級概念。
    數(shù)據(jù)挖掘的英文是 Data Mining盹憎,縮寫是 DM。在商業(yè)智能 BI 中經(jīng)常會使用到數(shù)據(jù)挖掘技術铐刘。數(shù)據(jù)挖掘的核心包括分類陪每、聚類、預測镰吵、關聯(lián)分析等任務檩禾,通過這些煉金術,我們可以從數(shù)據(jù)倉庫中得到寶藏疤祭,比如商業(yè)報告盼产。
    元數(shù)據(jù)(MetaData):描述其它數(shù)據(jù)的數(shù)據(jù),也稱為“中介數(shù)據(jù)”勺馆。
    數(shù)據(jù)元(Data Element):就是最小數(shù)據(jù)單元戏售。

  2. 數(shù)據(jù)挖掘的流程
    1. 分類就是通過訓練集得到一個分類模型,然后用這個模型可以對其他數(shù)據(jù)進行分類草穆。
    2. 聚類人以群分灌灾,物以類聚。聚類就是將數(shù)據(jù)自動聚類成幾個類別悲柱,聚到一起的相似度大锋喜,不在一起的差異性大。我們往往利用聚類來做數(shù)據(jù)劃分豌鸡。
    3. 預測顧名思義嘿般,就是通過當前和歷史數(shù)據(jù)來預測未來趨勢,它可以更好地幫助我們識別機遇和風險涯冠。
    4. 關聯(lián)分析就是發(fā)現(xiàn)數(shù)據(jù)中的關聯(lián)規(guī)則炉奴,它被廣泛應用在購物籃分析,或事務數(shù)據(jù)分析中蛇更。

輸入數(shù)據(jù)--->數(shù)據(jù)預處理(特征選擇盆佣、維規(guī)約往堡、規(guī)范化、選擇數(shù)據(jù)子集)--->數(shù)據(jù)挖掘-->數(shù)據(jù)后處理(模式過濾共耍、可視化虑灰、模式表示)--->信息

數(shù)據(jù)預處理中,我們會對數(shù)據(jù)進行幾個處理步驟:數(shù)據(jù)清洗痹兜,數(shù)據(jù)集成穆咐,以及數(shù)據(jù)變換。1. 數(shù)據(jù)清洗主要是為了去除重復數(shù)據(jù)字旭,去噪聲(即干擾數(shù)據(jù))以及填充缺失值对湃。2. 數(shù)據(jù)集成是將多個數(shù)據(jù)源中的數(shù)據(jù)存放在一個統(tǒng)一的數(shù)據(jù)存儲中。3. 數(shù)據(jù)變換就是將數(shù)據(jù)轉換成適合數(shù)據(jù)挖掘的形式遗淳。比如拍柒,通過歸一化將屬性數(shù)據(jù)按照比例縮放,這樣就可以將數(shù)值落入一個特定的區(qū)間內屈暗,比如 0~1 之間拆讯。我會在后面的幾節(jié)課給你講解如何對數(shù)據(jù)進行預處理。
數(shù)據(jù)后處理是將模型預測的結果進一步處理后养叛,再導出种呐。比如在二分類問題中,一般能得到的是 0~1 之間的概率值弃甥,此時把數(shù)據(jù)以 0.5 為界限進行四舍五入就可以實現(xiàn)后處理爽室。

上帝不會告訴我們規(guī)律,而是展示給我們數(shù)據(jù)
原文中使用追女生的做了形象的類比:比如你認識了兩個漂亮的女孩淆攻。

商業(yè)智能會告訴你要追哪個阔墩?成功概率有多大?
數(shù)據(jù)倉庫會說瓶珊,我這里存儲了這兩個女孩的相關信息戈擒,你要嗎?其中每個女孩的數(shù)據(jù)都有單獨的文件夾艰毒,里面有她們各自的姓名筐高、生日、喜好和聯(lián)系方式等丑瞧,這些具體的信息就是數(shù)據(jù)元柑土,加起來叫作元數(shù)據(jù)。
數(shù)據(jù)挖掘會幫助你確定追哪個女孩绊汹,并且整理好數(shù)據(jù)倉庫稽屏,這里就可以使用到各種算法,幫你做決策了西乖。

你可能會用到分類算法狐榔。御姐坛增、蘿莉、女王薄腻,她到底屬于哪個分類收捣?

如果認識的女孩太多了,多到你已經(jīng)數(shù)不過來了庵楷,比如說 5 萬人罢艾!你就可以使用聚類算法了,它幫你把這些女孩分成多個群組尽纽,比如 5 個組咐蚯。然后再對每個群組的特性進行了解,進行決策弄贿。這樣就把 5 萬人的決策春锋,轉化成了 5 個組的決策。成功實現(xiàn)降維差凹,大大提升了效率期奔。

如果你想知道這個女孩的閨蜜是誰,那么關聯(lián)分析算法可以告訴你直奋。

如果你的數(shù)據(jù)來源比較多,比如有很多朋友給你介紹女朋友施禾,很多人都推薦了同一個脚线,你就需要去重,這叫數(shù)據(jù)清洗弥搞;為了方便記憶邮绿,你把不同朋友推薦的女孩信息合成一個,這叫數(shù)據(jù)集成攀例;有些數(shù)據(jù)渠道統(tǒng)計的體重的單位是公斤船逮,有些是斤,你就需要將它們轉換成同一個單位粤铭,這叫數(shù)據(jù)變換挖胃。最后你可以進行數(shù)據(jù)可視化了,它會直觀地把你想要的結果呈現(xiàn)出來梆惯。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末酱鸭,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子垛吗,更是在濱河造成了極大的恐慌凹髓,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件怯屉,死亡現(xiàn)場離奇詭異蔚舀,居然都是意外死亡饵沧,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門赌躺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來狼牺,“玉大人,你說我怎么就攤上這事寿谴∷遥” “怎么了?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵讶泰,是天一觀的道長咏瑟。 經(jīng)常有香客問我,道長痪署,這世上最難降的妖魔是什么码泞? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮狼犯,結果婚禮上余寥,老公的妹妹穿的比我還像新娘。我一直安慰自己悯森,他們只是感情好宋舷,可當我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著瓢姻,像睡著了一般祝蝠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上幻碱,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天绎狭,我揣著相機與錄音,去河邊找鬼褥傍。 笑死儡嘶,一個胖子當著我的面吹牛,可吹牛的內容都是我干的恍风。 我是一名探鬼主播蹦狂,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼朋贬!你這毒婦竟也來了鸥咖?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤兄世,失蹤者是張志新(化名)和其女友劉穎啼辣,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體御滩,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡鸥拧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年党远,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片富弦。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡沟娱,死狀恐怖,靈堂內的尸體忽然破棺而出腕柜,到底是詐尸還是另有隱情济似,我是刑警寧澤,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布盏缤,位于F島的核電站砰蠢,受9級特大地震影響,放射性物質發(fā)生泄漏唉铜。R本人自食惡果不足惜台舱,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望潭流。 院中可真熱鬧竞惋,春花似錦、人聲如沸灰嫉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鹉动。三九已至试读,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間椿肩,已是汗流浹背瞻颂。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工豺谈, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留郑象,地道東北人。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓茬末,卻偏偏與公主長得像厂榛,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子丽惭,可洞房花燭夜當晚...
    茶點故事閱讀 44,976評論 2 355