『壹』 python 怎麼修改pandas的某個cell的值
數據缺失
數據缺失在大部分數據分析應用中都很常見,Pandas使用浮點值NaN表示浮點和非浮點數組中的缺失數據,他只是一個便於被檢測出來的數據而已。
from pandas import Series,DataFrame
string_data=Series(['abcd','efgh','ijkl','mnop'])
print(string_data)
print("...........\n")
print(string_data.isnull())12345671234567
Python內置的None值也會被當作NA處理
from pandas import Series,DataFrame
string_data=Series(['abcd','efgh','ijkl','mnop'])
print(string_data)
print("...........\n")
string_data[0]=None
print(string_data.isnull())123456789123456789
處理NA的方法有四種:dropna,fillna,isnull,notnull
is(not)null,這一對方法對對象做出元素級的應用,然後返回一個布爾型數組,一般可用於布爾型索引。
dropna,對於一個Series,dropna返回一個僅含非空數據和索引值的Series。
問題在於DataFrame的處理方式,因為一旦drop的話,至少要丟掉一行(列)。這里解決方法與前面類似,還是通過一個額外的參數:dropna(axis=0,how=』any』,thresh=None),how參數可選的值為any或者all.all僅在切片元素全為NA時才拋棄該行(列)。thresh為整數類型,eg:thresh=3,那麼一行當中至少有三個NA值時才將其保留。
fillna,fillna(value=None,method=None,axis=0)中的value除了基本類型外,還可以使用字典,這樣可以實現對不同列填充不同的值。
過濾數據:
對於一個Series,dropna返回一個僅含非空數據和索引值的Series:
from pandas import Series,DataFrame
from numpy import nan as NA
data=Series([1,NA,3.5,NA,7])
print(data.dropna())123456123456
另一個過濾DataFrame行的問題涉及問題序列數據。假設只想留一部分觀察數據,可以用thresh參數實現此目的:
from pandas import Series,DataFrame, np
from numpy import nan as NA
data=DataFrame(np.random.randn(7,3))
data.ix[:4,1]=NA
data.ix[:2,2]=NA
print(data)
print("...........")
print(data.dropna(thresh=2))
不想濾除缺失的數據,而是通過其他方式填補「空洞」,fillna是最主要的函數。
通過一個常數調用fillna就會將缺失值替換為那個常數值:
from pandas import Series,DataFrame, np
from numpy import nan as NA
data=DataFrame(np.random.randn(7,3))
data.ix[:4,1]=NA
data.ix[:2,2]=NA
print(data)
print("...........")
print(data.fillna(0))
若是通過一個字典調用fillna,就可以實現對不同列填充不同的值。
from pandas import Series,DataFrame, np
from numpy import nan as NA
data=DataFrame(np.random.randn(7,3))
data.ix[:4,1]=NA
data.ix[:2,2]=NA
print(data)
print("...........")
print(data.fillna({1:111,2:222}))
可以利用fillna實現許多別的功能,比如可以傳入Series的平均值或中位數:
from pandas import Series,DataFrame, np
from numpy import nan as NA
data=Series([1.0,NA,3.5,NA,7])
print(data)
print("...........\n")
print(data.fillna(data.mean()))
123456789123456789
檢測和過濾異常值
異常值(outlier)的過濾或變換運算在很大程度上就是數組運算。如下一個(1000,4)的標准正態分布數組:
from pandas import Series,DataFrame, np
from numpy import nan as NA
data=DataFrame(np.random.randn(1000,4))
print(data.describe())
print("\n....找出某一列中絕對值大小超過3的項...\n")
col=data[3]
print(col[np.abs(col) > 3] )
print("\n....找出全部絕對值超過3的值的行...\n")
print(col[(np.abs(data) > 3).any(1)] )
移除重復數據
DataFrame的plicated方法返回一個布爾型Series,表示各行是否是重復行。
from pandas import Series,DataFrame, np
from numpy import nan as NA
import pandas as pd
import numpy as np
data=pd.DataFrame({'k1':['one']*3+['two']*4, 'k2':[1,1,2,2,3,3,4]})
print(data)
print("........\n")
print(data.plicated())123456789123456789
與此相關的還有一個drop_plicated方法,它用於返回一個移除了重復行的DataFrame:
from pandas import Series,DataFrame, np
from numpy import nan as NA
import pandas as pd
import numpy as np
data=pd.DataFrame({'k1':['one']*3+['two']*4, 'k2':[1,1,2,2,3,3,4]})
print(data)
print("........\n")
print(data.drop_plicates())123456789123456789
上面的兩個方法會默認判斷全部列,也可以指定部分列進行重復項判斷,假設還有一列值,而只希望根據k1列過濾重復項。
from pandas import Series,DataFrame, np
from numpy import nan as NA
import pandas as pd
import numpy as np
data=pd.DataFrame({'k1':['one']*3+['two']*4, 'k2':[1,1,2,2,3,3,4]})
data['v1']=range(7)
print(data)
print("........\n")
print(data.drop_plicates(['k1']))1234567891012345678910
plicates和drop_plicates默認保留第一個出現的值組合。傳入take_last=True則保留最後一個:
from pandas import Series,DataFrame, np
from numpy import nan as NA
import pandas as pd
import numpy as np
data=pd.DataFrame({'k1':['one']*3+['two']*4, 'k2':[1,1,2,2,3,3,4]})
data['v1']=range(7)
print(data)
print("........\n")
print(data.drop_plicates(['k1','k2'],take_last=True))1234567891012345678910
『貳』 25、pandas的reshape(1,-1)什麼意思
在創建DataFrame的時候常常使用reshape來更改數據的列數和行數。
reshape可以用於 numpy庫里的ndarray和array結構 以及 pandas庫裡面的DataFrame和Series結構。
reshape(行,列)可以根據指定的數值將數據轉換為特定的行數和列數, 這個好理解,就是轉換成矩陣 。
然而,在實際使用中,特別是在運用函數的時候, 系統經常會提示是否需要對數據使用reshape(1,-1)或者reshape(-1,1)進行轉換, 那這兩個轉換是什麼意思呢?難道還有-1行的數據?
我們來嘗試一下:
在使用了reshape(-1,1)之後,數據集似乎變成了一列,這樣看起來不明顯,我們把這些數據導出到excel看看:
在excel里直接變成了一列。
那麼reshape(1,-1)呢?也就是直接變成了一行了。
那這個-1在這里要怎麼理解呢?
跟進numpy庫官網的介紹,這里彎態的-1被理解為unspecified value,意思是未指定為給定的。如果我只需要特定的行數,列數多少我無所謂,我只需要指定行數,那麼列數直接埋陵源用-1代替就行了,計算機幫我們算贏有多少列,反之亦然。
所以-1在這里應該可以理解為一個正整數通配符,它代替任何整數。
我們拿剛才的數據來試試看:
由上圖可知,指定汪返為-1的時候,其行或列會隨機分配一個數據。
『叄』 大數據培訓內容,大數據要學哪些課程
《大數據實訓課程資料》網路網盤資源免費下載
鏈接:https://pan..com/s/1RiGvjn2DlL5pPISCG_O0Sw
大數據實訓課程資料|雲計算與虛擬化課程資源|課程實驗指導書綜合版|機器學習與演算法分析課程資源|Spark課程資源|Python課程資源|Hadoop技術課程資源|雲計算課程資料.zip|微課.zip|演算法建模與程序示例.zip|spark課程資源.zip|hadoop課程資源.zip|實驗指導書|教學視頻|教學PPT
『肆』 以道大數據課程體系都講什麼
大數據技術在如今應用非常廣泛,許多想入行學習大數據培訓的童鞋不知從何學起,從哪兒開始學首先要根據你的基本情況而定,如果你是零基礎的也不需要擔心,先從基礎開始學起就好了,接下來學習基礎java開始、數據結構、關系型資料庫、linux系統操作,夯實基礎之後,再進入大數據的學習,例如:hadoop離線分析、Storm實時計算、spark內存計算的學習,以道教育大數據課程體系可以如下:
第一階段 WEB 開發基礎
HTML基礎
1、Html基本介紹
2、HTML語法規范
3、基本標簽介紹
4、HTML編輯器/文本文檔/WebStrom/elipse
5、HTML元素和屬性
6、基本的HTML元素
6.1 標題
6.2 段落
6.3 樣式和style屬性
6.3 鏈接 a
6.4 圖像 img
6.5 表格 table
6.6 列表 ul/ol/dl
7、 HTML注釋
8、表單介紹
9、Table標簽
10、DIV布局介紹
11、HTML列表詳解
HTML布局和Bootstrap
1、 HTML塊元素(block)和行內元素(inline)
2、使用div實現網頁布局
3、響前孫應式WEB設計(Responsive Web Design)
4、使用bootstrap實現梁悔巧響應式布局
HTML表單元素
1、HTML表單 form
2、HTML表單元素
3、 HTML input的類型 type
4、 Html input的屬性
CSS基礎
1、CSS簡介及基本語法
2、在HTML文檔中使用CSS
3、CSS樣式
4、CSS選擇器
5、盒子模型
6、布局及定位
CSS高級/CSS3
1、尺寸和對齊
2、分類(clear/cursor/display/float/position/visibility)
3、導航欄
4、圖片庫
5、圖片透明
6、媒介類型 @media
7、CSS3
8、CSS3動畫效果
JavaScript基礎
1、JavaScript簡介
2、基本語法規則
3、在HTML文檔中使用JS
4、JS變數
5、JS數據類型
6、JS函數
7、JS運算符
8、流程式控制制
9、JS錯誤和調試
JavaScript對象和作用域
1、數字 Number
2、字元串String
3、日期 Date
4、數組
5、數學 Math
6、DOM對象和事件
7、BOM對象
8、Window對象
9、作用域和作用域鏈
10、JSON
Javascript庫
1、Jquery
2、Prototype
3、Ext Js
Jquery
1、Jquery基本語法
2、Jquery選擇器
3、Jquery事件
4、Jquery選擇器
5、Jquery效果和動畫
6、使用Jquery操作HTML和DOM
7、Jquery遍歷
8、Jquery封裝函數
9、Jquery案例
表單驗證和Jquery Validate
1、用Js對HTML表單進行驗證
2、Jquery Validata基本用法
3、默認校驗規則和提示信息
4、debug和ignore
5、更改錯誤信息顯示位置和樣式
6、全部校驗通過後的執行函數
7、修改驗證觸發方式
8、非同步驗證
9、自定義校驗方法
10、radio 和 checkbox、select 的驗證
Java基礎
1、關於Java
2、Java運行機制
3、第一個Java程序,注釋
4、Javac,Java,Javadoc等命令
5、標識符與關鍵字
6、變數的聲明,初始化與應用
7、變數的作用域
8、變數重名
9、基本數據類型
10、類型轉換與類型提升
11、各種數據類型使用細節
12、轉義序列
13、各種運算符的使用
流程式控制制
1、選擇控制語句if-else
2、選擇控制語句switch-case
3、循環控制語句while
4、循環控制語句do-while
5、循環控制語句for與增強型for
6、break,continue,return
7、循環標簽
8、數組的聲明與初始化
9、數組內存空間分配
10、棧與堆內存
11、二維(多維)數組
12、Arrays類的相關方法
13、main方法命令行參數
面向對象
1、面向對象的基本思想
2、類與對象
3、成員變數與默認值
4、方法的聲明,調用
5、參數傳遞和內存圖
6、方法重載的概念
7、調用原則與重載的優勢
8、構造器聲明與默認構橡鍵造器
9、構造器重載
10、this關鍵字的使用
11、this調用構造器原則
12、實例變數初始化方式
13、可變參數方法
訪問許可權控制
1、包 package和庫
2、訪問許可權修飾符private/protected/public/包訪問許可權
3、類的訪問許可權
4、抽象類和抽象方法
5、介面和實現
6、解耦
7、Java的多重繼承
8、通過繼承來擴展介面
錯誤和異常處理
1、概念:錯誤和異常
2、基本異常
3、捕獲異常 catch
4、創建自定義異常
5、捕獲所有異常
6、Java標准異常
7、使用finally進行清理
8、異常的限制
9、構造器
10、異常匹配
11、異常使用指南
資料庫基礎(MySQL)
資料庫基礎(MySQL)
JDBC
1、Jdbc基本概念
2、使用Jdbc連接資料庫
3、使用Jdbc進行crud操作
4、使用Jdbc進行多表操作
5、Jdbc驅動類型
6、Jdbc異常和批量處理
7、Jdbc儲存過程
Servlet和JSP
1、Servlet簡介
2、Request對象
3、Response對象
4、轉發和重定向
5、使用Servlet完成Crud
6、Session和Coolie簡介
7、ServletContext和Jsp
8、El和Jstl的使用
Ajax
1、什麼是Ajax
2、XMLHttpRequest對象(XHR)
3、XHR請求
4、XHR響應
5、readystate/onreadystatechange
6、Jquery Ajax
7、JSON
8、案例:對用戶名是否可用進行伺服器端校驗
綜合案例
1、項目開發一般流程介紹
2、模塊化和分層
3、DButils
4、QueryRunner
5、ResultSetHandle
6、案例:用戶登錄/注冊,從前端到後端
第二階段 Java SE
訪問許可權和繼承
1、包的聲明與使用
2、import與import static
3、訪問許可權修飾符
4、類的封裝性
5、static(靜態成員變數)
6、final(修飾變數,方法)
7、靜態成員變數初始化方式
8、類的繼承與成員繼承
9、super的使用
10、調用父類構造器
11、方法的重寫與變數隱藏
12、繼承實現多態和類型轉換
13、instanceof
抽象類與介面
1、抽象類
2、抽象方法
3、繼承抽象類
4、抽象類與多態
5、介面的成員
6、靜態方法與默認方法
7、靜態成員類
8、實例成員類
9、局部類
10、匿名類
11、eclipse的使用與調試
12、內部類對外圍類的訪問關系
13、內部類的命名
Lambda表達式與常用類
1、函數式介面
2、Lambda表達式概念
3、Lambda表達式應用場合
4、使用案例
5、方法引用
6、枚舉類型(編譯器的處理)
7、包裝類型(自動拆箱與封箱)
8、String方法
9、常量池機制
10、String講解
11、StringBuilder講解
12、Math,Date使用
13、Calendars使用
異常處理與泛型
1、異常分類
2、try-catch-finally
3、try-with-resources
4、多重捕獲multi-catch
5、throw與throws
6、自定義異常和優勢
7、泛型背景與優勢
8、參數化類型與原生類型
9、類型推斷
10、參數化類型與數組的差異
11、類型通配符
12、自定義泛型類和類型擦出
13、泛型方法重載與重寫
集合
1 、常用數據結構
2 、Collection介面
3 、List與Set介面
4 、SortedSet與NavigableSet
5 、相關介面的實現類
6 、Comparable與Comparator
7、Queue介面
8 、Deque介面
9 、Map介面
10、NavigableMap
11、相關介面的實現類
12、流操作(聚合操作)
13、Collections類的使用
I/O流與反射
1 、File類的使用
2 、位元組流
3 、字元流
4 、緩存流
5 、轉換流
6 、數據流
7、對象流
8、類載入,鏈接與初始化
9 、ClassLoader的使用
10、Class類的使用
11、通過反射調用構造器
12、安全管理器
網路編程模型與多線程
1、進程與線程
2、創建線程的方式
3、線程的相關方法
4、線程同步
5、線程死鎖
6、線程協作操作
7、計算機網路(IP與埠)
8、TCP協議與UDP協議
9、URL的相關方法
10、訪問網路資源
11、TCP協議通訊
12、UDP協議通訊
13、廣播
SSM-Spring
1.Spring/Spring MVC
2.創建Spring MVC項目
3.Spring MVC執行流程和參數
SSM-Spring.IOC
1.Spring/Spring MVC
2.創建Spring MVC項目
3.Spring MVC執行流程和參數
SSM-Spring.AOP
1.Spring/Spring MVC
2.創建Spring MVC項目
3.Spring MVC執行流程和參數
SSM-Spring.Mybatis
1.MyBatis簡介
2.MyBatis配置文件
3.用MyBatis完成CRUD
4.ResultMap的使用
5.MyBatis關聯查詢
6.動態SQL
7.MyBatis緩沖
8.MyBatis-Generator
Socket編程
1.網路通信和協議
2.關於Socket
3.Java Socket
4.Socket類型
5.Socket函數
6.WebSocket
7.WebSocket/Spring MVC/WebSocket Ajax
IO/非同步
window對象
全局作用域
窗口關系及框架
窗口位置和大小
打開窗口
間歇調用和超時調用(靈活運用)
系統對話框
location對象
navigator對象
screen對象
history對象
NIO/AIO
1.網路編程模型
2.BIO/NIO/AIO
3.同步阻塞
4.同步非阻塞
5.非同步阻塞
6.非同步非阻塞
7.NIO與AIO基本操作
8.高性能IO設計模式
第三階段 Java 主流框架
MyBatis
1.mybatis框架原理分析
2.mybatis框架入門程序編寫
3.mybatis和hibernate的本質區別和應用場景
4.mybatis開發方法
5.SqlMapConfig配置文件講解
6.輸入映射-pojo包裝類型的定義與實現
7.輸出映射-resultType、resultMap
8.動態sql
9.訂單商品數據模型分析
10.高級映射的使用
11.查詢緩存之一級緩存、二級緩存
12.mybatis與spring整合
13. mybatis逆向工程自動生成代碼
Spring/Spring MVC
1. springmvc架構介紹
2. springmvc入門程序
3. spring與mybatis整合
4. springmvc註解開發—商品修改功能分析
5. springmvc註解開發—RequestMapping註解
6. springmvc註解開發—Controller方法返回值
7. springmvc註解開發—springmvc參數綁定過程分析
8. springmvc註解開發—springmvc參數綁定實例講解
9. springmvc與struts2的區別
10. springmvc異常處理
11. springmvc上傳圖片
12. springmvc實現json交互
13. springmvc對RESTful支持
14. springmvc攔截器
第四階段 關系型資料庫/MySQL/NoSQL
SQL基礎
1.SQL及主流產品
2.MySQL的下載與安裝(sinux/windows)
3.MySql的基本配置/配置文件
4.基本的SQL操作 DDL
5.基本的SQL操作 DML
6.基本的SQL操作 DCL
7.MySQL客戶端工具
8.MySQL幫助文檔
MySQL數據類型和運算符
1 數值類型
2 日期時間類型
3 字元串類型
4 CHAR 和 VARCHAR 類型
5 BINARY 和 VARBINARY 類型
6 ENUM 類型
7 SET 類型
8 算術運算符
9 比較運算符
10 邏輯運算符
11 位運算
12 運算符的優先順序
MySQL函數
1 字元串函數
2 數值函數
3 日期和時間函數
4 流程函數
5 其他常用函數
MySQL存儲引擎
1.MySQL支持的存儲引擎及其特性
2.MyISAM
3.InnoDB
4.選擇合適的存儲引擎
選擇合適的數據類型
1 CHAR 與 VARCHAR
2 TEXT 與 BLOB
3 浮點數與定點數
4 日期類型選擇
字元集
1 字元集概述
2 Unicode字元集
3 漢字及一些常見字元集
4 選擇合適的字元集
5 MySQL 支持的字元集
6 MySQL 字元集的設置 .
索引的設計和使用
1.什麼是索引
2.索引的類型
3.索引的數據結構 BTree B+Tree Hash
4.索引的存儲
5.MySQL索引
6.查看索引的使用情況
7.索引設計原則
視圖/存儲過程/函數/觸發器
1. 什麼是視圖
2. 視圖操作
3. 什麼是存儲過程
4. 存儲過程操作
5. 什麼是函數
6. 函數的相關操作
7. 觸發器
事務控制/鎖
1. 什麼是事務
2. 事務控制
3. 分布式事務
4. 鎖/表鎖/行鎖
5. InnoDB 行鎖爭用
6. InnoDB 的行鎖模式及加鎖方法7
7 InnoDB 行鎖實現方式7
8 間隙鎖(Next-Key 鎖)
9 恢復和復制的需要,對 InnoDB 鎖機制的影響
10 InnoDB 在不同隔離級別下的一致性讀及鎖的差異
11 表鎖
12 死鎖
SQL Mode和安全問題
1. 關於SQL Mode
2. MySQL中的SQL Mode
3. SQL Mode和遷移
4. SQL 注入
5. 開發過程中如何避免SQL注入
SQL優化
1.通過 show status 命令了解各種 SQL 的執行頻率
2. 定位執行效率較低的 SQL 語句
3. 通過 EXPLAIN 分析低效 SQL 的執行計劃
4. 確定問題並採取相應的優化措施
5. 索引問題
6.定期分析表和檢查表
7.定期優化表
8.常用 SQL 的優化
MySQL資料庫對象優化
1. 優化表的數據類型
2 散列化
3 逆規范化
4 使用中間表提高統計查詢速度
5. 影響MySQL性能的重要參數
6. 磁碟I/O對MySQL性能的影響
7. 使用連接池
8. 減少MySQL連接次數
9. MySQL負載均衡
MySQL集群
MySQL管理和維護
MemCache
Redis
在Java項目中使用MemCache和Redis
第五階段:操作系統/Linux、雲架構
Linux安裝與配置
1、安裝Linux至硬碟
2、獲取信息和搜索應用程序
3、進階:修復受損的Grub
4、關於超級用戶root
5、依賴發行版本的系統管理工具
6、關於硬體驅動程序
7、進階:配置Grub
系統管理與目錄管理
1、Shell基本命令
2、使用命令行補全和通配符
3、find命令、locate命令
4、查找特定程序:whereis
5、Linux文件系統的架構
6、移動、復制和刪除
7、文件和目錄的許可權
8、文件類型與輸入輸出
9、vmware介紹與安裝使用
10、網路管理、分區掛載
用戶與用戶組管理
1、軟體包管理
2、磁碟管理
3、高級硬碟管理RAID和LVM
4、進階:備份你的工作和系統
5、用戶與用戶組基礎
6、管理、查看、切換用戶
7、/etc/...文件
8、進程管理
9、linux VI編輯器,awk,cut,grep,sed,find,unique等
Shell編程
1、 SHELL變數
2、傳遞參數
3、數組與運算符
4、SHELL的各類命令
5、SHELL流程式控制制
6、SHELL函數
7、SHELL輸入/輸出重定向
8、SHELL文件包含
伺服器配置
1、系統引導
2、管理守護進程
3、通過xinetd啟動SSH服務
4、配置inetd
5、Tomcat安裝與配置
6、MySql安裝與配置
7、部署項目到Linux
第六階段:Hadoop生態系統
Hadoop基礎
1、大數據概論
2、 Google與Hadoop模塊
3、Hadoop生態系統
4、Hadoop常用項目介紹
5、Hadoop環境安裝配置
6、Hadoop安裝模式
7、Hadoop配置文件
HDFS分布式文件系統
1、認識HDFS及其HDFS架構
2、Hadoop的RPC機制
3、HDFS的HA機制
4、HDFS的Federation機制
5、 Hadoop文件系統的訪問
6、JavaAPI介面與維護HDFS
7、HDFS許可權管理
8、hadoop偽分布式
Hadoop文件I/O詳解
1、Hadoop文件的數據結構
2、 HDFS數據完整性
3、文件序列化
4、Hadoop的Writable類型
5、Hadoop支持的壓縮格式
6、Hadoop中編碼器和解碼器
7、 gzip、LZO和Snappy比較
8、HDFS使用shell+Java API
MapRece工作原理
1、MapRece函數式編程概念
2、 MapRece框架結構
3、MapRece運行原理
4、Shuffle階段和Sort階段
5、任務的執行與作業調度器
6、自定義Hadoop調度器
7、 非同步編程模型
8、YARN架構及其工作流程
MapRece編程
1、WordCount案例分析
2、輸入格式與輸出格式
3、壓縮格式與MapRece優化
4、輔助類與Streaming介面
5、MapRece二次排序
6、MapRece中的Join演算法
7、從MySQL讀寫數據
8、Hadoop系統調優
Hive數據倉庫工具
1、Hive工作原理、類型及特點
2、Hive架構及其文件格式
3、Hive操作及Hive復合類型
4、Hive的JOIN詳解
5、Hive優化策略
6、Hive內置操作符與函數
7、Hive用戶自定義函數介面
8、Hive的許可權控制
Hive深入解讀
1 、安裝部署Sqoop
2、Sqoop數據遷移
3、Sqoop使用案例
4、深入了解資料庫導入
5、導出與事務
6、導出與SequenceFile
7、Azkaban執行工作流
Sqoop與Oozie
1 、安裝部署Sqoop
2、Sqoop數據遷移
3、Sqoop使用案例
4、深入了解資料庫導入
5、導出與事務
6、導出與SequenceFile
7、Azkaban執行工作流
Zookeeper詳解
1、Zookeeper簡介
2、Zookeeper的下載和部署
3、Zookeeper的配置與運行
4、Zookeeper的本地模式實例
5、Zookeeper的數據模型
6、Zookeeper命令行操作範例
7、storm在Zookeeper目錄結構
NoSQL、HBase
1、HBase的特點
2、HBase訪問介面
3、HBase存儲結構與格式
4、HBase設計
5、關鍵演算法和流程
6、HBase安裝
7、HBase的SHELL操作
8、HBase集群搭建
第七階段:Spark生態系統
Spark
1.什麼是Spark
2.Spark大數據處理框架
3.Spark的特點與應用場景
4.Spark SQL原理和實踐
5.Spark Streaming原理和實踐
6.GraphX SparkR入門
7.Spark的監控和調優
Spark部署和運行
1.WordCount准備開發環境
2.MapRece編程介面體系結構
3.MapRece通信協議
4.導入Hadoop的JAR文件
5.MapRece代碼的實現
6.打包、部署和運行
7.打包成JAR文件
Spark程序開發
1、啟動Spark Shell
2、載入text文件
3、RDD操作及其應用
4、RDD緩存
5、構建Eclipse開發環境
6、構建IntelliJ IDEA開發環境
7、創建SparkContext對象
8、編寫編譯並提交應用程序
Spark編程模型
1、RDD特徵與依賴
2、集合(數組)創建RDD
3、存儲創建RDD
4、RDD轉換 執行 控制操作
5、廣播變數
6、累加器
作業執行解析
1、Spark組件
2、RDD視圖與DAG圖
3、基於Standalone模式的Spark架構
4、基於YARN模式的Spark架構
5、作業事件流和調度分析
6、構建應用程序運行時環境
7、應用程序轉換成DAG
Spark SQL與DataFrame
1、Spark SQL架構特性
2、DataFrame和RDD的區別
3、創建操作DataFrame
4、RDD轉化為DataFrame
5、載入保存操作與Hive表
6、Parquet文件JSON數據集
7、分布式的SQL Engine
8、性能調優 數據類型
深入Spark Streaming
1、Spark Streaming工作原理
2、DStream編程模型
3、Input DStream
4、DStream轉換 狀態 輸出
5、優化運行時間及內存使用
6、文件輸入源
7、基於Receiver的輸入源
8、輸出操作
Spark MLlib與機器學習
1、機器學習分類級演算法
2、Spark MLlib庫
3、MLlib數據類型
4、MLlib的演算法庫與實例
5、ML庫主要概念
6、演算法庫與實例
GraphX與SparkR
1、Spark GraphX架構
2、GraphX編程與常用圖演算法
3、GraphX應用場景
4、SparkR的工作原理
5、R語言與其他語言的通信
6、SparkR的運行與應用
7、R的DataFrame操作方法
8、SparkR的DataFrame
Scala編程開發
1、Scala語法基礎
2、idea工具安裝
3、maven工具配置
4、條件結構、循環、高級for循環
5、數組、映射、元組
6、類、樣例類、對象、伴生對象
7、高階函數與函數式編程
Scala進階
1、 柯里化、閉包
2、模式匹配、偏函數
3、類型參數
4、協變與逆變
5、隱式轉換、隱式參數、隱式值
6、Actor機制
7、高級項目案例
Python編程
1、Python編程介紹
2、Python的基本語法
3、Python開發環境搭建
4、Pyhton開發Spark應用程序
第八階段:Storm生態系統
storm簡介與基本知識
1、storm的誕生誕生與成長
2、storm的優勢與應用
3、storm基本知識概念和配置
4、序列化與容錯機制
5、可靠性機制—保證消息處理
6、storm開發環境與生產環境
7、storm拓撲的並行度
8、storm命令行客戶端
Storm拓撲與組件詳解
1、流分組和拓撲運行
2、拓撲的常見模式
3、本地模式與stormsub的對比
4、 使用非jvm語言操作storm
5、hook、組件基本介面
6、基本抽象類
7、事務介面
8、組件之間的相互關系
spout詳解 與bolt詳解
1、spout獲取數據的方式
2、常用的spout
3、學習編寫spout類
4、bolt概述
5、可靠的與不可靠的bolt
6、復合流與復合anchoring
7、 使用其他語言定義bolt
8、學習編寫bolt類
storm安裝與集群搭建
1、storm集群安裝步驟與准備
2、本地模式storm配置命令
3、配置hosts文件、安裝jdk
4、zookeeper集群的搭建
5、部署節點
6、storm集群的搭建
7、zookeeper應用案例
8、Hadoop高可用集群搭建
Kafka
1、Kafka介紹和安裝
2、整合Flume
3、Kafka API
4、Kafka底層實現原理
5、Kafka的消息處理機制
6、數據傳輸的事務定義
7、Kafka的存儲策略
Flume
1、Flume介紹和安裝
2、Flume Source講解
3、Flume Channel講解
4、Flume Sink講解
5、flume部署種類、流配置
6、單一代理、多代理說明
7、flume selector相關配置
Redis
1、Redis介紹和安裝、配置
2、Redis數據類型
3、Redis鍵、字元串、哈希
4、Redis列表與集合
5、Redis事務和腳本
6、Redis數據備份與恢復
7、Redis的SHELL操作
『伍』 Spark DataSet常用action,及操作匯總
詳細API常見此鏈接
1、 collect() ,返回值是一個數組,返回dataframe集合所有的行
2、 collectAsList() 返回值是一個java類型的數組,返回dataframe集合所有的行
3、 count() 返回一個number類型的,返回dataframe集合的行數
4、 describe(cols: String*) 返回一個通過數學計算的類表值(count, mean, stddev, min, and max),這個可以傳多個參數,中間用逗號分隔,如果有欄位為空,那麼不參與運算,只這對數值類型的欄位。例如df.describe("age", "height").show()
5、 first() 返回第一行 ,類型是row類型
6、 head() 返回第一行 ,類型是row類型
7、 head(n:Int)返回n行 ,類型是row 類型
8、 show()返回dataframe集合的值 默認是20行,返回類型是unit
9、 show(n:Int)返回n行,,返回值類型是unit
10、 table(n:Int) 返回n行 ,類型是row 類型
1、 cache()同步數據的內存
2、 columns 返回一個string類型的並仔數組,返回值是所有列的名字
3、 dtypes返回一個string類型的二維數組,返回值是所有列的名字以及類型
4、 explan()列印執行計劃 物理的
5、 explain(n:Boolean) 輸入值為 false 或者true ,返回值是unit 默認是false ,如果輸入true 將會列印 邏輯的和物理的
6、 isLocal 返回值是Boolean類型,如果允許模式是local返回true 否則返回false
7、 persist(newlevel:StorageLevel) 返回一個dataframe.this.type 輸入存儲模型類型
8、 printSchema() 列印出欄位名稱和瞎蔽州類型 按照樹狀結構來列印
9、 registerTempTable(tablename:String) 返回Unit ,將df的對象只放在一張表裡面,這個表隨著對象的刪除而刪除了
10、 schema 返回structType 類型,將欄位名稱和類磨蔽型按照結構體類型返回
11、 toDF()返回一個新的dataframe類型的
12、 toDF(colnames:String*)將參數中的幾個欄位返回一個新的dataframe類型的,
13、 unpersist() 返回dataframe.this.type 類型,去除模式中的數據
14、 unpersist(blocking:Boolean)返回dataframe.this.type類型 true 和unpersist是一樣的作用false 是去除RDD
1、 agg(expers:column*) 返回dataframe類型 ,同數學計算求值
df.agg(max("age"), avg("salary"))
df.groupBy().agg(max("age"), avg("salary"))
2、 agg(exprs: Map[String, String]) 返回dataframe類型 ,同數學計算求值 map類型的
df.agg(Map("age" -> "max", "salary" -> "avg"))
df.groupBy().agg(Map("age" -> "max", "salary" -> "avg"))
3、 agg(aggExpr: (String, String), aggExprs: (String, String)*) 返回dataframe類型 ,同數學計算求值
df.agg(Map("age" -> "max", "salary" -> "avg"))
df.groupBy().agg(Map("age" -> "max", "salary" -> "avg"))
4、 apply(colName: String) 返回column類型,捕獲輸入進去列的對象
5、 as(alias: String) 返回一個新的dataframe類型,就是原來的一個別名
6、 col(colName: String) 返回column類型,捕獲輸入進去列的對象
7、 cube(col1: String, cols: String*) 返回一個GroupedData類型,根據某些欄位來匯總
8、 distinct 去重 返回一個dataframe類型
9、 drop(col: Column) 刪除某列 返回dataframe類型
10、 dropDuplicates(colNames: Array[String]) 刪除相同的列 返回一個dataframe
11、 except(other: DataFrame) 返回一個dataframe,返回在當前集合存在的在其他集合不存在的
12、 explode[A, B](inputColumn: String, outputColumn: String)(f: (A) ⇒ TraversableOnce[B])(implicit arg0: scala.reflect.api.JavaUniverse.TypeTag[B]) 返回值是dataframe類型,這個 將一個欄位進行更多行的拆分
df.explode("name","names") {name :String=> name.split(" ")}.show();
將name欄位根據空格來拆分,拆分的欄位放在names裡面
13、 filter(conditionExpr: String): 刷選部分數據,返回dataframe類型 df.filter("age>10").show(); df.filter(df("age")>10).show(); df.where(df("age")>10).show(); 都可以
14、 groupBy(col1: String, cols: String*) 根據某寫欄位來匯總返回groupedate類型 df.groupBy("age").agg(Map("age" ->"count")).show();df.groupBy("age").avg().show();都可以
15、 intersect(other: DataFrame) 返回一個dataframe,在2個dataframe都存在的元素
16、 join(right: DataFrame, joinExprs: Column, joinType: String)
一個是關聯的dataframe,第二個關聯的條件,第三個關聯的類型:inner, outer, left_outer, right_outer, leftsemi
df.join(ds,df("name")===ds("name") and df("age")===ds("age"),"outer").show();
17、 limit(n: Int) 返回dataframe類型 去n 條數據出來
18、 na: DataFrameNaFunctions ,可以調用dataframenafunctions的功能區做過濾 df.na.drop().show(); 刪除為空的行
19、 orderBy(sortExprs: Column*) 做alise排序
20、 select(cols:string*) dataframe 做欄位的刷選 df.select($"colA", $"colB" + 1)
21、 selectExpr(exprs: String*) 做欄位的刷選 df.selectExpr("name","name as names","upper(name)","age+1").show();
22、 sort(sortExprs: Column*) 排序 df.sort(df("age").desc).show(); 默認是asc
23、 unionAll(other:Dataframe) 合並 df.unionAll(ds).show();
24、 withColumnRenamed(existingName: String, newName: String) 修改列表 df.withColumnRenamed("name","names").show();
25、 withColumn(colName: String, col: Column) 增加一列 df.withColumn("aa",df("name")).show();
『陸』 06 pandas DataFrame - 數據過濾、NaN處理、統計方法
個人覺得並沒有什麼用,完全可以用切片或索引器代替
原數據:
1、刪除nan
2、設置NaN的值
使用nan下一行的值進行填充 (axis=1列填充)
使用nan上一行的值進行填充 (axis=1列填充)
按列填充
值替換 將語文成績中88分換成99分
1、 計數方法count只記非nan值 (axis=1 按列)
2、總統計值
3、最值、累加
4、中位數 quantile median
5、 最大值的索引值
6、 偏科程度(判斷一組數據的最大值和最小值差別是不是瞎察芹磨畢很大)
7、 樣本值累計和
本行值沒判加上一行的值,88+33=121
8、變化率
第一行NaN,因為上一行沒有數據,無法計算變化率
正的是增長的百分率,負的是減少的半分率
『柒』 RDD,DataFrame和DataSet的區別
RDD、DataFrame和DataSet是容易產生混淆的概念,必須對其相互之間對比,才可以知道其中異同。
RDD和DataFrame
RDD-DataFrame
上圖直觀地體現了DataFrame和RDD的區別。左側的RDD[Person]雖然以Person為類型參數,但Spark框架本身不了解
Person類的內部結構。而右側的DataFrame卻提供了詳細的結構信息,使得Spark
SQL可以清楚地知道該數據集中包含哪些列,每列的名稱和類型各是什麼。DataFrame多了數據的結構信息,即schema。RDD是分布式的
Java對象的集合。DataFrame是分布式的Row對象的集合。DataFrame除了提供了比RDD更豐富的運算元以外,更重要的特點是提升執行效
率、減少數據讀取以及執行計劃的優化,比如filter下推、裁剪等。
提升執行效率
RDD
API是函數式的,強調不變性,在大部分場景下傾向於創建新對象而不是修改老對象。這一特點雖然帶來了干凈整潔的API,卻也使得Spark應用程序在運
行期傾向於創建大量臨時對象,對GC造成壓力。在現有RDD
API的基礎之上,我們固然可以利用mapPartitions方法來重載RDD單個分片內的數據創建方式,用復用可變對象的方式來減小對象分配和GC的
開銷,但這犧牲了代碼的可讀性,而且要求開發者對Spark運行時機制有一定的了解,門檻較高。另一方面,Spark
SQL在框架內部已經在各種可能的情況下盡量重用對象,這樣做雖然在內部會打破了不變性,但在將數據返回給用戶時,還會重新轉為不可變數據。利用
DataFrame API進行開發,可以免費地享受到這些優化效果。
減少數據讀取
分析大數據,最快的方法就是 ——忽略它。這里的「忽略」並不是熟視無睹,而是根據查詢條件進行恰當的剪枝。
上文討論分區表時提到的分區剪 枝便是其中一種——當查詢的過濾條件中涉及到分區列時,我們可以根據查詢條件剪掉肯定不包含目標數據的分區目錄,從而減少IO。
對於一些「智能」數據格 式,Spark
SQL還可以根據數據文件中附帶的統計信息來進行剪枝。簡單來說,在這類數據格式中,數據是分段保存的,每段數據都帶有最大值、最小值、null值數量等
一些基本的吵老統計信息。當統計信息表名某一數據段肯定不包括符合查詢條件的目標數據時,該數據段就可以直接跳過(例如某整數列a某段的最大值為100,而查
詢條衡游件要求a > 200)。
此外,Spark SQL也可以充分利用RCFile、ORC、Parquet等列式存儲格式的優勢,僅掃描查詢真正涉及的列,忽略其餘列的數據。
執行優化
人口數據分析示例
為了說明查詢優化,我們來看上圖展示的人口數據分析的示例。圖中構造了兩個DataFrame,將它們join之後又升攔升做了一次filter操作。如
果原封不動地執行這個執行計劃,最終的執行效率是不高的。因為join是一個代價較大的操作,也可能會產生一個較大的數據集。如果我們能將filter
下推到 join下方,先對DataFrame進行過濾,再join過濾後的較小的結果集,便可以有效縮短執行時間。而Spark
SQL的查詢優化器正是這樣做的。簡而言之,邏輯查詢計劃優化就是一個利用基於關系代數的等價變換,將高成本的操作替換為低成本操作的過程。
得到的優化執行計劃在轉換成物 理執行計劃的過程中,還可以根據具體的數據源的特性將過濾條件下推至數據源內。最右側的物理執行計劃中Filter之所以消失不見,就是因為溶入了用於執行最終的讀取操作的表掃描節點內。
對於普通開發者而言,查詢優化 器的意義在於,即便是經驗並不豐富的程序員寫出的次優的查詢,也可以被盡量轉換為高效的形式予以執行。
RDD和DataSet
DataSet以Catalyst邏輯執行計劃表示,並且數據以編碼的二進制形式被存儲,不需要反序列化就可以執行sorting、shuffle等操作。
DataSet創立需要一個顯式的Encoder,把對象序列化為二進制,可以把對象的scheme映射為SparkSQl類型,然而RDD依賴於運行時反射機制。
通過上面兩點,DataSet的性能比RDD的要好很多。
DataFrame和DataSet
Dataset可以認為是DataFrame的一個特例,主要區別是Dataset每一個record存儲的是一個強類型值而不是一個Row。因此具有如下三個特點:
DataSet可以在編譯時檢查類型
並且是面向對象的編程介面。用wordcount舉例:
//DataFrame
// Load a text file and interpret each line as a java.lang.String
val ds = sqlContext.read.text("/home/spark/1.6/lines").as[String]
val result = ds
.flatMap(_.split(" ")) // Split on whitespace
.filter(_ != "") // Filter empty words
.toDF() // Convert to DataFrame to perform aggregation / sorting
.groupBy($"value") // Count number of occurences of each word
.agg(count("*") as "numOccurances")
.orderBy($"numOccurances" desc) // Show most common words first
後面版本DataFrame會繼承DataSet,DataFrame是面向Spark SQL的介面。
//DataSet,完全使用scala編程,不要切換到DataFrame
val wordCount =
ds.flatMap(_.split(" "))
.filter(_ != "")
.groupBy(_.toLowerCase()) // Instead of grouping on a column expression (i.e. $"value") we pass a lambda function
.count()
DataFrame和DataSet可以相互轉化, df.as[ElementType] 這樣可以把DataFrame轉化為DataSet, ds.toDF() 這樣可以把DataSet轉化為DataFrame。
『捌』 大數據需要掌握哪些技能
大數據技術體系龐大,包括的知識較多
1、學習大數據首先要學習Java基礎
Java是大數據學習需要的編程語言局消基礎,因為大數據的開發基於常用的高級語言。而且不論是學hadoop,
2、學習大數據必須學習大數據核心知識
Hadoop生態系統;HDFS技術;HBASE技術;Sqoop使用流程;數據倉庫工具HIVE;大數據離線分析Spark、Python語言;數據實時分析Storm;消息訂閱分發系統Kafka等。
3、學習大數據需要具備的能力
數學知識,數學知識是數據分析師的基礎知識。對於數據分析師,了解一些描述統計相關的內容,需要有一定公式計算能力,了解常用統計模正瞎型演算法。而對於數據挖掘工程師來說,各類演算法也需要熟練使用,對數學的要求是最高的。
4、學習大數據可以應用的領域
大數據技術可以應用在各個領域,比如公安大數據、交通大數據、醫療大數據、就業大數據、環境大數據、圖像大數據、視頻大數舉臘空據等等,應用范圍非常廣泛。
『玖』 python:dataframe[bool]實現刪掉了False行,這是什麼原理
pandas的是吧?
Dataframe[] 如果傳一個列名,雹舉可以得到這個列;如果傳一個單列的bool值組成的Dataframe數據,會根據bool值篩選;如果傳入數字,可以切片操作;
比如你的B,B[num]>100,得到的就是一個bool值組成的Dataframe
B[B[num]>100],就會根據內部計算的bool值來篩選叢肆慧出大於100的值所在的行。
這是pandas封裝好的,非常方便滲答快捷的進行大量數據的處理。