- Python廣告數據挖掘與分析實戰
- 楊游云 周健
- 1311字
- 2021-04-02 14:21:23
3.2.2 數據加載
要進行數據分析,首先要獲取數據。Pandas提供了一些常用的數據加載功能,并且能將其他格式的數據默認轉換為以DataFrame數據框的形式呈現,表3-3所示為常用的數據讀取函數。
表3-3 常用的數據讀取函數的對比說明

1.read_csv/read_table函數
Pandas中的read_csv函數和read_table函數很類似,區別在于read_csv函數中默認分隔符為逗號,而read_table函數中默認分隔符為制表符(tab)。read_csv和read_table函數中均有很多參數,可以在數據讀取時加以說明,如表3-4所示。
接下來我們來看一個簡單的廣告數據樣例,以下是廣告用戶畫像數據的前幾行,可以發現每行都是以逗號分隔的。
20200107,華為手機,android,19~25歲,F 20200107,蘋果手機,iOS,26~35歲,M 20200107,小米手機,android,26~35歲,M 20200107,魅族手機,android,26~35歲,M 20200107,VIVO手機,android,0~18歲,F 20200107,VIVO手機,android,26~35歲,F 20200107,蘋果手機,iOS,26~35歲,F 20200107,小米手機,android,36~45歲,F
表3-4 read_csv和read_table函數中重要的參數及說明

使用read_csv函數將其加載為DataFrame數據格式,并打印出前5行。
In [37]: df2 = pd.read_csv('ex2.csv') In [38]: df2.head() Out[38]: 20200107 華為手機 android 19~25歲 F 0 20200107 蘋果手機 iOS 26~35歲 M 1 20200107 小米手機 android 26~35歲 M 2 20200107 魅族手機 android 26~35歲 M 3 20200107 VIVO手機 android 0~18歲 F 4 20200107 VIVO手機 android 26~35歲 F
當然也可以使用read_table函數來讀取,只要指定參數seq=‘,’即可。
In [39]: df2 = pd.read_table('ex2.csv',sep = ',') In [40]: df2.head() Out[40]: 20200107 華為手機 android 19~25歲 F 0 20200107 蘋果手機 iOS 26~35歲 M 1 20200107 小米手機 android 26~35歲 M 2 20200107 魅族手機 android 26~35歲 M 3 20200107 VIVO手機 android 0~18歲 F 4 20200107 VIVO手機 android 26~35歲 F
仔細觀察后,我們發現這個文件是沒有列標題的(在數據文件默認列標題的情況下,會以第一行數據為列標題),在pd.read_csv函數中可以通過names參數來指定各列列名。
In [43]: df2 = pd.read_csv('ex2.csv', names=[ ...: 'Date', 'Phone_type', 'System', 'Age', 'Sex']) In [44]: df2.head() Out[44]: Date Phone_type System Age Sex 0 20200107 華為手機 android 19~25歲 F 1 20200107 蘋果手機 iOS 26~35歲 M 2 20200107 小米手機 android 26~35歲 M 3 20200107 魅族手機 android 26~35歲 M 4 20200107 VIVO手機 android 0~18歲 F
對于其中的Date列(表示日期),我們可以在加載時將其解析為時間格式:
In [45]: df2 = pd.read_csv('ex2.csv', parse_dates=[0], names=[ ...: 'Date', 'Phone_type', 'System', 'Age', 'Sex'] In [46]: df2.head() Out[46]: Date Phone_type System Age Sex 0 2020-01-07 華為手機 android 19~25歲 F 1 2020-01-07 蘋果手機 iOS 26~35歲 M 2 2020-01-07 小米手機 android 26~35歲 M 3 2020-01-07 魅族手機 android 26~35歲 M 4 2020-01-07 VIVO手機 android 0~18歲 F
類似地,可以參照表3-4中的參數說明使用函數中的其他參數,具體根據自己的實際情況定義即可。
In [47]: df2 = pd.read_csv('ex3.csv', sep='\t', names=[ ...: 'Date', 'Phone_type', 'System', 'Age', 'Sex'], ...: parse_dates=[0], skiprows=[1, 3, 5], ...: index_col=3, nrows=4, encoding='utf8') In [48]: df2 Out[48]: Age Date Phone_type System Sex 26~35歲 2020-01-07 蘋果手機 iOS M 26~35歲 2020-01-07 魅族手機 android M 26~35歲 2020-01-07 VIVO手機 android F
2.read_excel函數
read_excel函數主要用于加載xls或xlsx格式的文件,它的參數與read_csv\read_table的參數基本相同,同樣包括header、index_col、nrows等。不同的是read_excel函數中用于指定文件所在路徑的參數為io,同時多了一個sheetname參數,用于指定需要加載Excel文件中的哪個sheet數據,如下所示:
In [49]: df3 = pd.read_excel('ex3.xlsx',sheetname=0) In [50]: df3.head() Out[50]: Date Phone_type System Age Sex 0 20200107 華為手機 android 19~25歲 F 1 20200107 蘋果手機 iOS 26~35歲 M 2 20200107 小米手機 android 26~35歲 M 3 20200107 魅族手機 android 26~35歲 M 4 20200107 VIVO手機 android 0~18歲 F
sheetname=0表示讀取Excel文件中的第一個sheet中的數據。
3.read_sql函數
在實際工作中,我們的數據一般都是存放在數據庫中的(廣告行業中的數據通常如此),只有少部分數據是保存在本地的文件中。這就要求Python需支持直接提取數據庫中數據的函數。以連接MySQL數據庫為例,Pandas提供了read_sql函數以輕松加載MySQL數據庫中的任意表數據,但需要用到pymysql和sqlalchemy工具包,這兩個工具包可以直接通過pip install pymysql和pip install sqlalchemy命令安裝。
下面我們嘗試將本地MySQL數據庫中的數據加載到DataFrame中:
In [51]: import pymysql In [52]: from sqlalchemy import create_engine In [53]: DB_USER = 'root' In [54]: DB_PASS = **** In [55]: DB_HOST = '127.0.0.1' In [56]: DB_PORT = 3306 In [57]: DATABASE = 'firstdb' In [58]: connect_info = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format( ...: DB_USER, DB_PASS, DB_HOST, DB_PORT, DATABASE) In [59]: engine = create_engine(connect_info) In [60]: sql_cmd = "SELECT * FROM customer" In [61]: df = pd.read_sql(sql=sql_cmd, con=engine) In [62]: df Out[62]: id first_name surname id2 0 1 YVonns clegg 0 1 2 johnny chaks-chaka 0 2 3 winston powers 0 3 4 partricis mankunkn 0
可以看到,本地MySQL數據庫中的文件也輕松加載進來了。
- MySQL數據庫進階實戰
- 數據挖掘原理與實踐
- Java Data Science Cookbook
- Spark大數據分析實戰
- 區塊鏈:看得見的信任
- Mastering Machine Learning with R(Second Edition)
- 大數據架構和算法實現之路:電商系統的技術實戰
- Microsoft Power BI數據可視化與數據分析
- 數據庫程序員面試筆試真題庫
- 跟老男孩學Linux運維:MySQL入門與提高實踐
- Starling Game Development Essentials
- Hands-On Mathematics for Deep Learning
- 圖數據實戰:用圖思維和圖技術解決復雜問題
- 大數據治理與安全:從理論到開源實踐
- 數據庫原理與應用