跟我一塊兒學點 數據分析 -- 第一天:上手pandas(1)

在這裏插入圖片描述

數據分析前景

數據分析師的在企業中的主要做用是支持與指導業務發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見聞錄 - 入門之旅

《深刻淺出SQL》問答錄

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源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索