文章目錄
數據分析前景
數據分析師的在企業中的主要做用是支持與指導業務發bai展。基本合格的數據分析師支持業務發展,優秀的數據分析師指導業務發展。python
崗位缺口大,就業薪資高,並且這個崗位對學歷的要求不是特別高,對經驗的要求也不算嚴格,從而數據分析師,在大數據時代,迎來了黃金就業期。mysql
經過搜索BOSS直聘和領英,發現其上面有上有10萬+個數據分析師職位空缺,其中絕大部分是互聯網行業的需求。值得注意的是,雖然國內現有不少數據分析師員工,但其數量佔比依舊不多,職位空缺卻佔到了市場的50%之多。大多數熱門崗位都會在招聘JD中,給出「具有數據分析能力」這樣的招聘條件。web
從銷售、市場,到運營、產品經理、用戶研究等,都試圖從各類繁雜數據中看出點門道,得到對市場、產品、消費者等方面的洞見。sql
做爲一名18級的大數據學生,大一的職業規劃我寫的就是數據分析師。
那時候菜啊,什麼都不會。
如今也菜啊,可是奮六世之餘烈,我表示能夠一試。數據庫
秉持着一向的好習慣,不懂就買課。在摸索了兩天無果以後,我果斷借了書,買了課。這不,來與你們共享來了嘛。json
Why pandas?
pandas創始人Wes McKinney對pandas的講解
在pandas的官網(Python Data Analysis Library)上,咱們能夠看到有一段pandas創始人Wes McKinney對pandas的講解,從創始人的角度咱們能夠直接理解pandas這個python的數據分析庫的主要特性和發展方向。數組
McKinney一共總結了9個特性,咱們來一個個過一下。服務器
1.對錶格類型的數據的讀取和輸出速度很是快。(我的對比excel和pandas,的確pandas不會死機....)在他的演示中,咱們能夠看到讀取489597行,6列的數據只要0.9s。 2.時間序列處理。常常用在金融應用中。 3.數據隊列。能夠把不一樣隊列的數據進行基本運算。 4.處理缺失數據。 5.分組運算。好比咱們在前面泰坦尼克號中的groupby。 6.分級索引。 7.數據的合併和加入。 8.數據透視表。 9.數據概括和分析。
pandas的熱度
再來看看pandas的流行度:
微信
pandas對於數據分析
pandas全面支持數據分析項目的研發步驟:
網絡
具體我就不展開了吧,將會陸陸續續在以後的博客中展示。
pandas的不足之處
一、網絡內容爬取。
話說術業有專攻,對於爬蟲,有專門的爬蟲庫,還有scrapy框架。
二、複雜的SQL存儲操做
pandas 的 to_sql方法存儲數據不夠靈活。
三、內存受限
受限於計算機的內存,沒法分析超過內存大小的數據。
解決方案:
歸併排序思想。
Dask集羣框架。
pandas獲取數據
此處的獲取數據,並非說去網絡上爬取,而是從文件中獲取。
讀取csv文件
方法:
pandas.read_csv(filepath_or_buffer,header='infer',names=None,usecols=None,dtype=None) #這裏提供了經常使用參數,不表明只有這些參數
參數釋義:
filepath_or_buffer : 字符串,文件路徑,或者文件句柄,或者字符串IO header :整數,或整數列表,缺省值 ‘infer’將第一行視做列名, 若是names參數有值,且header=0將使用names參數做爲列名。header能夠是一個整數的列表,如[0,1,3]。 names : 列名數組,缺省值 None usecols:指定返回的列 dtype:指定列的數據類型。
看不懂不要緊,立刻就實操演示一下唄。
開始實操前,先來看幾個知識點:
head方法能夠查看前五條數據 tail方法用來查看最後五條數據 dtypes屬性能夠用來查看列數據類型
原始數據:
測試
import pandas as pd df = pd.read_csv('test.csv') print(df.head(7)) # 默認是5行,能夠人爲指定
結果:
a b 0 1.0 2 1 3.0 4 2 NaN 5
import pandas as pd df = pd.read_csv('test.csv',header=1) # 指定csv文件第一行爲列名稱 print(df.head(7)) # 默認是5行,能夠認爲指定
結果:
1 2 0 3.0 4 1 NaN 5
import pandas as pd df = pd.read_csv('test.csv',names = [1,2,3,4,5]) # 指定列名稱 print(df.head(7))
1 2 3 4 5 0 a b NaN NaN NaN 1 1 2 NaN NaN NaN 2 3 4 NaN NaN NaN 3 NaN 5 NaN NaN NaN
指定的列名稱是從右往左排的,列名必定要起全,否則會有幾頁沒法調用了。
import pandas as pd df = pd.read_csv('test.csv',header = 0,names = ['a','b'],usecols=['a']) # 返回指定列 print(df.head())
a 0 1.0 1 3.0 2 NaN
import pandas as pd df = pd.read_csv('test.csv') print(df.dtypes) #查看列類型
a float64 b int64 dtype: object
修改列類型:
import pandas as pd df = pd.read_csv('test.csv',dtype={ 'b':object}) #修改列類型 print(df.dtypes) #查看列類型
a float64 b object dtype: object
我講明白了嗎?
讀取JSON文件
pandas.read_json(path_or_buf=None, orient=None, dtype=True, lines=False)
演示
因爲對方連課件都不發,那就莫得辦法咯
以records格式讀取JSON文件:
讀取JSON Lines文件
讀取Excel文件
方法:
read_excel(io,sheetname=0, header=0, skiprows=None, skip_footer=0, index_col=None,usecols=None)
參數釋義:
io:Excel路徑
sheetname:指定工做表名或編號,編號從0開始
skiprows : 省略指定行數的數據
skip_footer :省略從尾部數的int行數據
index_col : 指定列爲索引列
廢話很少說,直接演示
這是我抓下來的電影票房數據,有須要的話微信搜 「Look Future」,後臺回覆電影票房數據。
一運行就報了這個錯:
ImportError: Missing optional dependency 'xlrd'. Install xlrd >= 1.0.0 for Excel support Use pip or conda to install xlrd.
什麼意思呢?說明咱們還須要去安裝xlrd的庫了。
實驗
import pandas as pd xls_file = '不一樣種類電影往年票房.xlsx' df = pd.read_excel(xls_file).head(5) print(df)
運行一下,一堆的錯啊,讓人防不勝防。
抽了一下:xlrd.biffh.XLRDError: Excel xlsx file; not supported
說是xlrd版本過高,不支持xlsx文件了,把版本調到1.2吧
而後運行出來:
上映日期 片名 總票房 0 2019 柬愛 9.63W 1 2019 那座橋 6.05W 2 2019 決戰中途島 2.92Y 3 2019 小巷管家 2433.22W 4 2019 功夫小鎮 16.97W
(用的是另外一張表,因此時間不同)
我給大家講啊,我就特別的討厭這種受制於人的感受,人家改動一下,你怎麼辦?
上次開發一個自動化軟件,依賴於一個平臺,結果後來人家平臺出了個活動,致使咱們的小軟件就得大改。
就很難受。
讀取指定工做表
import pandas as pd xls_file = '不一樣種類電影往年票房.xlsx' df = pd.read_excel(xls_file,sheet_name='動做').head(5) #指定讀取工做表 print(df)
上映日期 片名 總票房 0 2019 功夫小鎮 16.97W 1 2019 越域重生 6.55W 2 2019 終結者:黑暗命運 3.51Y 3 2019 楊靖宇 127.81W 4 2019 二鳳 61.22W
指定列名稱
import pandas as pd xls_file = '不一樣種類電影往年票房.xlsx' df = pd.read_excel(xls_file,sheet_name='動做',header=1).head(5) #指定列名稱 print(df)
2019 功夫小鎮 16.97W 0 2019 越域重生 6.55W 1 2019 終結者:黑暗命運 3.51Y 2 2019 楊靖宇 127.81W 3 2019 二鳳 61.22W 4 2019 雙子殺手 2.32Y
讀取指定列
import pandas as pd xls_file = '不一樣種類電影往年票房.xlsx' df = pd.read_excel(xls_file,sheet_name='動做',usecols=['片名','總票房']).head(5) #指定列名稱 print(df)
你要那個列不存在,是會報錯的
片名 總票房 0 功夫小鎮 16.97W 1 越域重生 6.55W 2 終結者:黑暗命運 3.51Y 3 楊靖宇 127.81W 4 二鳳 61.22W
略過開始/結束行
import pandas as pd xls_file = '不一樣種類電影往年票房.xlsx' df = pd.read_excel(xls_file,sheet_name='英語',usecols=['片名','總票房'],skiprows=10,skipfooter=20).head(5) print(df)
這樣會報什麼錯呢?
ValueError: Usecols do not match columns, columns expected but not found: [‘片名’, ‘總票房’]
請各位自行思考個中原因、
包括還有一個參數:指定索引,若是操做不當,也會有這個問題。
讀取MySQL的數據庫文件
這裏須要必定的MySQL功底,若是不熟悉的話,建議先移步:MySQL見聞錄 - 入門之旅
read其實就是兩個函數的殼:
read_sql_query:經過一個SQL語句讀取數據 read_sql_table:讀取數據庫中的一個表(table)
pandas.read_sql(sql, con, index_col=None,columns=None)
參數釋義:
sql:表名、SQL語句 con:創建鏈接 index_col:索引列
測試
環境配置:
首先你須要有安裝MySQL環境,這些在這裏都很少說,上面那篇MySQL入門之旅很詳細。
整完以後,開個戶:
from sqlalchemy import create_engine import pandas as pd # mysql+pymysql://用戶名:密碼@服務器IP/數據庫名 engine = create_engine('mysql+pymysql://pandas:pandas@localhost/pandas') # 我這裏又換新人了 print(engine.execute('show tables').fetchall()) # 配置引擎,並肯定引擎可用
除了代碼中的那個包,還要安裝兩個包。
pymysql和cryctography、
[('presidents',)]
from sqlalchemy import create_engine import pandas as pd engine = create_engine('mysql+pymysql://pandas:pandas@localhost/pandas') print(pd.read_sql('presidents',con=engine))
表裏面什麼都沒有,天然什麼都讀不出來了。
Empty DataFrame Columns: [last_name, first_name] Index: []
from sqlalchemy import create_engine import pandas as pd engine = create_engine('mysql+pymysql://pandas:pandas@localhost/pandas') #print(pd.read_sql('presidents',con=engine,index_col='first_name')) # 使用索引列 pd.read_sql('select * from presidents',con=engine) # 直接使用SQL語句
因爲表中沒有數據,因此什麼也讀不出來。
我以爲,出了那個json沒有素材,MySQL有點超綱之外,其餘的應該是講明白了吧。
本文同步分享在 博客「看,將來」(CSDN)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。