關於Python數據分析,這裡有一條高效的學習路徑
廣泛被應用的數據分析
谷歌的數據分析可以預測一個地區即將爆發的流感,從而進行針對性的預防;淘寶可以根據你瀏覽和消費的數據進行分析,為你精準推薦商品;口碑極好的網易雲音樂,通過其相似性演算法,為不同的人量身定製每日歌單……
數據正在變得越來越常見,小到我們每個人的社交網路、消費信息、運動軌跡……,大到企業的銷售、運營數據,產品的生產數據,交通網路數據……
如何從海量數據中獲得別人看不見的知識,如何利用數據來武裝營銷工作、優化產品、用戶調研、支撐決策,數據分析可以將數據的價值最大化。
數據分析人才熱度也是高居不下,一方面企業的數據量在大規模的增長,對於數據分析的需求與日俱增;另一方面,相比起其他的技術職位,數據分析師的候選者要少得多。
數據源於麥肯錫
那麼,小白如何快速獲得數據分析的能力呢?知乎上有很多書單,你可能也聽過很多學習方法,但嘗試過就知道這些跟高效沒什麼關係。
數據分析師應該具備哪些技能
要明確學習的路徑,最有效的方式就是看具體的職業、工作崗位對於技能的具體需求。
我們從拉勾上找了一些最具有代表性的數據分析師職位信息,來看看薪資不菲的數據分析師,到底需要哪些技能。
其實企業對數據分析師的基礎技能需求差別不大,可總結如下:
SQL資料庫的基本操作,會基本的數據管理
會用Excel/SQL做基本的數據分析和展示
會用腳本語言進行數據分析,Python or R
有獲取外部數據的能力,如爬蟲
會基本的數據可視化技能,能撰寫數據報告
熟悉常用的數據挖掘演算法:以回歸分析為主
其次是數據分析的流程,一般可以按「數據獲取-數據存儲與提取-數據預處理-數據建模與分析-數據可視化」這樣的步驟來實施一個數據分析項目。按照這個流程,每個部分需要掌握的細分知識點如下:
高效的學習路徑是什麼?就是數據分析的這個流程。按這樣的順序循序漸進,你會知道每個部分需要完成的目標是什麼,需要學習哪些知識點,哪些知識是暫時不必要的。
接下來我們分別從每一個部分講講具體應該學什麼、怎麼學。
- ? -
數據獲取:公開數據、Python爬蟲
外部數據的獲取方式主要有以下兩種。
第一種是獲取外部的公開數據集,一些科研機構、企業、政府會開放一些數據,你需要到特定的網站去下載這些數據。這些數據集通常比較完善、質量相對較高。給大家推薦一些常用的可以獲取數據集的網站:
UCI:加州大學歐文分校開放的經典數據集,被很多數據挖掘實驗室採用。
http://archive.ics.uci.edu/ml/datasets.html
國家數據:數據來源於中國國家統計局,包含了我國經濟民生等多個方面的數據。
CEIC:超過128個國家的經濟數據,能精確查找GDP、進出口零售,銷售等深度數據。
中國統計信息網:國家統計局官方網站,彙集了國民經濟和社會發展統計信息。
優易數據:由國家信息中心發起,國內領先的數據交易平台,很多免費數據。
另一種獲取外部數據的方式就是爬蟲。
比如你可以通過爬蟲獲取招聘網站某一職位的招聘信息,爬取租房網站上某城市的租房信息,爬取豆瓣評分評分最高的電影列表,獲取知乎點贊排行、網易雲音樂評論排行列表。基於互聯網爬取的數據,你可以對某個行業、某種人群進行分析。
在爬蟲之前你需要先了解一些 Python 的基礎知識:元素(列表、字典、元組等)、變數、循環、函數………
以及,如何用 Python 庫(urllib、BeautifulSoup、requests、scrapy)實現網頁爬蟲。如果是初學,建議從urllib+BeautifulSoup開始。
掌握基礎的爬蟲之後,你還需要一些高級技巧,比如正則表達式、使用cookie信息、模擬用戶登錄、抓包分析、搭建代理池等等,來應對不同網站的反爬蟲限制。
常用的的電商網站、問答網站、二手交易網站、婚戀網站、招聘網站等,都可以爬到非常有價值的數據。
- ? -
數據存取:SQL語言
在應對萬以內的數據的時候,Excel對於一般的分析沒有問題,一旦數據量大,就會力不從心,資料庫就能夠很好地解決這個問題。而且大多數的企業,都會以SQL的形式來存儲數據,如果你是一個分析師,也至少要懂得SQL的操作,能夠查詢、提取公司的數據。
SQL作為最經典的資料庫工具,為海量數據的存儲與管理提供可能,並且使數據的提取的效率大大提升。你需要掌握以下技能:
提取特定情況下的數據:企業資料庫里的數據一定是大而繁複的,你需要提取你需要的那一部分。比如你可以根據你的需要提取2017年所有的銷售數據、提取今年銷量最大的50件商品的數據、提取上海、廣東地區用戶的消費數據……,SQL可以通過簡單的命令幫你完成這些工作。
資料庫的增、刪、查、改:這些是資料庫最基本的操作,但只要用簡單的命令就能夠實現,所以你只需要記住命令就好。
數據的分組聚合、如何建立多個表之間的聯繫:這個部分是SQL的進階操作,多個表之間的關聯,在你處理多維度、多個數據集的時候非常有用,這也讓你可以去處理更複雜的數據。
SQL這部分比較簡單,主要是掌握一些基本的語句。當然,還是建議你找幾個數據集來實際操作一下,哪怕是最基礎的查詢、提取等。
- ? -
數據預處理:Python(pandas)
很多時候我們拿到的數據是不幹凈的,數據的重複、缺失、異常值等等,這時候就需要進行數據的清洗,把這些影響分析的數據處理好,才能獲得更加精確地分析結果。
比如銷售數據,有一些渠道的銷售是沒有及時錄入的,有一些數據是記錄重複的。比如用戶行為數據,有很多無效的操作對分析沒有意義,就需要進行刪除。
那麼我們需要用相應的方法去處理,比如殘缺數據,我們是直接去掉這條數據,還是用臨近的值去補全,這些都是需要考慮的問題。
對於數據預處理,學會 pandas (Python包)的用法,應對一般的數據清洗就完全沒問題了。需要掌握的知識點如下:
選擇:數據訪問(標籤、特定值、布爾索引等)
缺失值處理:對缺失數據行進行刪除或填充
重複值處理:重複值的判斷與刪除
異常值處理:清除不必要的空格和極端、異常數據
相關操作:描述性統計、Apply、直方圖等
合併:符合各種邏輯關係的合併操作
分組:數據劃分、分別執行函數、數據重組
Reshaping:快速生成數據透視表
網上有很多 pandas 的教程,主要是一些函數的應用,也都非常簡單,可查 pandas 官方文檔。
- ? -
概率論及統計學知識
數據整體分布是怎樣的?什麼是總體和樣本?中位數、眾數、均值、方差等基本的統計量如何應用?如何在不同的場景中做假設檢驗?數據分析方法大多源於統計學的概念,所以統計學的知識也是必不可少的。需要掌握的知識點如下:
基本統計量:均值、中位數、眾數、百分位數、極值等
其他描述性統計量:偏度、方差、標準差、顯著性等
其他統計知識:總體和樣本、參數和統計量、ErrorBar
概率分布與假設檢驗:各種分布、假設檢驗流程
其他概率論知識:條件概率、貝葉斯等
有了統計學的基本知識,你就可以用這些統計量做基本的分析了。通過可視化的方式來描述數據的指標,其實可以得出很多結論了:比如排名前100的是哪些,平均水平是怎樣的,近幾年的變化趨勢如何……
你可以使用 Seaborn、matplotlib 等(python包)做一些可視化的分析,通過各種可視化統計圖,並得出具有指導意義的結果。
- ? -
Python 數據分析
如果你有一些了解的話,就知道目前市面上其實有很多 Python 數據分析的書籍,但每一本都很厚,學習阻力非常大。但其實真正最有用的那部分信息,只是這些書里很少的一部分。
比如掌握回歸分析的方法,通過線性回歸和邏輯回歸,其實你就可以對大多數的數據進行回歸分析,並得出相對精確地結論。這部分需要掌握的知識點如下:
回歸分析:線性回歸、邏輯回歸
基本的分類演算法:決策樹、隨機森林……
基本的聚類演算法:k-means……
特徵工程基礎:如何用特徵選擇優化模型
調參方法:如何調節參數優化模型
Python 數據分析包:scipy、numpy、scikit-learn等
在數據分析的這個階段,重點了解回歸分析的方法,大多數的問題可以得以解決,利用描述性的統計分析和回歸分析,你完全可以得到一個不錯的分析結論。
當然,隨著你實踐量的增多,可能會遇到一些複雜的問題,你就可能需要去了解一些更高級的演算法:分類、聚類。
然後你會知道面對不同類型的問題的時候更適合用哪種演算法模型,對於模型的優化,你需要去學習如何通過特徵提取、參數調節來提升預測的精度。這就有點數據挖掘和機器學習的味道了,其實一個好的數據分析師,應該算是一個初級的數據挖掘工程師了。
你可以通過 Python 中的 scikit-learn 庫來實現數據分析、數據挖掘建模和分析的全過程。
- ? -
系統實戰與數據思維
到這個時候,你就已經具備了數據分析的基本能力了。但是還要根據不同的案例、不同的業務場景進行實戰,練習解決實際問題的能力。
上面提到的公開數據集,可以找一些自己感興趣的方向的數據,嘗試從不同的角度來分析,看看能夠得到哪些有價值的結論。
你也可以從生活、工作中去發現一些可用於分析的問題,比如上面說到的電商、招聘、社交等平台等數據中都有著很多可以挖掘的問題。
開始的時候,你可能考慮的問題不是很周全,但隨著你經驗的積累,慢慢就會找到分析的方向,有哪些一般分析的維度,比如Top榜單、平均水平、區域分布、同比環比、相關性分析、未來趨勢預測等等。隨著經驗的增加,你會有一些自己對於數據的感覺,這就是我們通常說的數據思維了。
零基礎學習數據分析,坑確實比較多,總結如下:
1.環境配置,工具安裝、環境變數,對小白太不友好;
2.缺少合理的學習路徑,上來 Python、HTML 各種學,極其容易放棄;
3.Python有很多包、框架可以選擇,不知道哪個更友好;
4.遇到問題找不到解決辦法,學習停滯不前;
5.網上的資料非常零散,而且對小白不友好,很多看起來雲里霧裡;
6.懂得技巧,但面對具體問題無法系統思考和分析;
……………………
正好,DC學院推出的這門系統的數據分析課程,就是按照以上的學習路徑。是無數分析師的爬坑經驗、以及無數本書的總結,讓你少走彎路。60天,足夠打敗市面上多半所謂的分析師。
這門課已經開課一個月,已經有2000+同學加入。不少同學都取得了從0到1的進步,能夠分析大規模數據,完成可視化和趨勢預測。下面是幾位同學的作業合集分享:
Python中通過RF預測紅酒質量
@Echo
從UCI上獲取到了一份winequality的數據來作為小練習的數據源,想通過紅酒的特徵來預測紅酒的質量。最後通過隨機森林和集成學習的方法,將預測的正確率提升到了90%。
1、首先先進行數據的導入,探索與預處理:
觀察到表有問題,實際上這個csv文件通過分號分割,所以導入時需要添加:sep=";",即可正常讀取數據。
2、處理數據是否分布平衡
顯然quality為5的數據樣本有太多,而quality為3的數據樣本又太少,這時候可以考慮過採樣,imbalanced-learn可以進行處理。
先用LR回歸嘗試一下,這裡也權當複習,先可以嘗試把所有特徵都用上,利用交叉檢驗,看看預測結果如何:
輸出結果為0.57可以看到如果直接在原始不平衡數據上把所有特徵都用上,使用LR回歸幾乎對預測這個多分類的quality沒有什麼幫助,後來再過採樣後的數據上也用了LR回歸同樣準確率很不理想。
以為可能是由於特徵的多重共線性導致的,所以有差看一下所有使用的特徵的相關性,這個可以利用seaborn快速可視化的實現這一效果,代碼如下:
顯示如下:可以看到多數變數之間實際上相關係數都在0.4以下,不存在高度相關。
隨機森林就是通過集成學習的思想將多棵樹集成的一種演算法,它的基本單元是決策樹,而它的本質屬於機器學習的一大分支——集成學習(Ensemble Learning)方法。
得到結果是86%,大大超過了Logistics回歸的準確率,這種交叉檢驗的方法是訓練集是所有樣本都使用了。
使用predict()函數得到上一節訓練的隨機森林模型在測試集合上的預測結果,然後使用 sklearn.metrics中的相關函數對模型的性能進行評估。
得到的結果如下:
precision recall f1-score support
3 0.99 1.00 0.99 142
4 1.00 1.00 1.00 129
5 0.80 0.81 0.80 150
6 0.77 0.66 0.71 146
7 0.87 0.98 0.92 125
8 0.99 1.00 1.00 126
avg / total 0.90 0.90 0.90 818
[[142 0 0 0 0 0]
[ 0 129 0 0 0 0]
[ 2 0 121 26 1 0]
[ 0 0 31 96 18 1]
[ 0 0 0 2 123 0]
[ 0 0 0 0 0 126]]
Accuracy: 0.90097799511
準確度在90%左右,由於前面在抽取訓練集和測試集時random_state設置為0,我們可以測試多次,會選取到不同的訓練集和測試集,測算多個準確度求平均值進行比較,經過測試仍然維持在90%左右。
卡片裡面內容可以滑動
爬取豆瓣TOP250電影並分析
@Linda
不知道看什麼電影時,就會習慣性的看看豆瓣,但落伍的我直到最近才發現還有個神奇的豆瓣電影Top250榜單!
那麼得出的這個排行榜和電影評分及評論人數有怎樣的關係?和上映時間關係大不大?哪種類型的電影上榜最多呢?哪些國家、導演、主演最受歡迎?片長多長時間最合適?這次通過爬取豆瓣TOP250電影解開這些秘密。
我們抓取排名、電影名、導演、主演、上映日期、製片國家/地區、類型,評分、評論數量、一句話評價以及電影鏈接,其中導演和主演分別取一位。完整代碼如下:
OK,數據抓取完畢,看一下抓取結果。先來看爬取Top250頁面的信息:
數據清洗
數據分布在兩個文件中,我們選取 top250_f1.csv 文件中的 num(排名)、 title(電影名)、 init_year(上映時間)、 area(國家/地區)、 genre(類型)、 rating_num(評分)、 comment_num(評價人數),和 top250_f2.csv 文件中的 language(語言)、 director(導演)、 cast(主演)、 movie_duration(時長)、 tags(標籤)這些列進行分析,因此只對這些列中的臟數據做清洗工作。
通過 pd.merge()函數選出的
df_1_cut 和 df_2_cut 兩張表,取並集,鏈接鍵為num。
共250行,12列,無缺失值,num 和 comment_num 為整型,rating_num 為浮點型,其餘為 object 類型。
清洗數據格式、數據分列
粗略看一下,可以發現 genre,language,director,cast,movie_duration,tags列方括弧、花括弧和英文省略號等無效信息,需要去掉。對於兩側的 [" "] 或 {[" "]} 形式,可以用str分割字元串。
對於 area 列,有些電影由多個國家或地區聯合製作,例如《霸王別姬》電影:「中國大陸」和「香港」之間用空格隔開,可以用str.split 函數進行分列, apply(pd.Series) 使用到的函數作用在每一行或列。
缺失值檢查
沒有缺失值。關於 area_c 、 genre_c 、 language_c 、cast_c 、 tags_c 都經過缺失值處理,也不存在缺失值。
用 describe() 函數看一下數值型數據的統計信息:
在「豆瓣電影Top250」榜單中,上映時間最早為1931年,最晚為2016年;評分最低為8.2分,最高9.6分,平均分為8.76分;評論數量最低40150條,最高861343條;電影時長最短為45分鐘,最長238分,平均時長121.61分鐘,第一四分位書為99.25分鐘,看來絕多數電影時長還是大於90分鐘的。
總排名、按評分排名、按評價數量排名Top10
上榜次數最多導演
「克里斯托弗·諾蘭 Christopher Nolan」和「宮崎駿 Hayao Miyazaki 」上榜次數最多,同為7次。
上榜次數最多演員
上榜次數最多的演員是「張國榮 Leslie Cheung」,高達8次,這也是每年大家對他紀念的一個原因吧,這麼多經典的作品,永遠被銘記。
排名與評分的關係
排名越靠前,即num越小,分數越高,但看著有些彆扭,因為我們習慣了排名靠前的在 y 軸的上方,可以用 invert_yaxis() 函數來改變 y 軸標籤的順序。
豆瓣評分大多是集中在 8.3 - 9.2 之間,隨評分的升高,豆瓣Top250排名名次大致提前,Pearson相關係數為 -0.6951 ,呈強相關性。
排名與評論人數的關係
評價人數呈右偏分布,隨評價人數的增多,豆瓣Top250排名名次有提前趨勢,Pearson相關係數為 -0.6623 ,呈強相關性。
排名與電影時長的關係
電影時長多數集中在 80-120 分鐘之間,與豆瓣電影Top250之間關係不大,Pearson相關係數為 -0.2420 ,為弱相關性。
排名與上映年份的關係
上映年份多數其中在1990年之後,pearson相關係數為0.0862,與豆瓣電影Top250沒有相關性。
國家/地區
上榜電影中,美國電影數量最多,中國大陸排第七位。
語言
上榜電影使用最多的語言為英語,漢語普通話排第四位。
電影類型
最多的電影類型是劇情,其次是愛情。
電影標籤
標籤比較多,用WordCloud製作詞云:
爬網易雲音樂並分析
@檸檬不怕酸
如果你希望在短時間內學會Python數據分析,少走彎路
※Python學習沒那麼難!只要找對方法,只花五分鐘就可以學會排序演算法!
TAG:Python |