首頁 > 上網技巧 > 電腦小技巧 > pandas高級技巧 快速生成虛擬變量矩陣

pandas高級技巧 快速生成虛擬變量矩陣

時間:2019-12-13 10:09 作者:QQ地帶 我要評論

pandas與虛擬變量矩陣構造
在日常的工作與學習中,經常會遇到一些具有固定幾種類型的變量,對于這些變量,如果采用一般的數據分析方法去組織和處理會顯得有所冗余或不足,因此便產生了因子類型(計量上更喜歡稱之為虛擬變量),這種類型將數據很好地組織為幾種類型的集合,極大地便于了數據的分析處理。本期文章,小編就將和大家聊一下怎么使用python去進行虛擬變量的生成與組織。為了便于說明,這里小編以目前為止世界范圍內最受歡迎的20部影片為例來展示怎么使用python中的pandas庫處理虛擬變量。關于影片的數據集,大家可以從這里下載影片。先大致地瀏覽一下數據表的結構,你可以采用兩種方式進行:直接打開Excel文件或者使用pandas庫直接導入數據,然后使用相關命令查看。
 
import numpy as np
import pandas as pd
movies = pd.read_excel('Top20_movie.xlsx')
movies.head(6)
最受歡迎的20部影片
小編這里的截圖并不是上面命令的結果,截圖直接來自于Excel文件,上面的命令只會顯示Excel文件中的前六行記錄。這份數據表主要包含了20部影片的片名、上映時間以及其歸屬的類型。小編下面需要做的就是對影片的類型進行虛擬化,這里首先解釋一下這個概念。因為這20部影片累計有很多類型,所以小編將構建一個類型矩陣,其中每一列代表一種影片類型,而后根據影片是否屬于類型狀態進行0/1賦值,具體操作步驟為:
 
匯總各種類型信息;
根據影片數和影片類型生成虛擬變量矩陣;
根據各部影片的相關類型信息在虛擬變量矩陣中進行0/1賦值;
將矩陣和原始數據表信息匯總。
下面首先來匯總影片的類型,因為影片的類型信息存儲在Excel表格中的TYPE一列中,而一部影片又不只一種類型,從表格中可以看出,類型之間以逗號分隔了開來,所以需要將每種類型都整理出來,具體方法如下。
 
all_types = []
for type in movies.TYPE:
    all_types.extend(type.split(','))
types = pd.unique(all_types)
第一行代碼首先創建一個空的列表,而后的循環語句分別提取出每種影片的類型并存放在前面創建的列表之中,接著使用pandas庫下的unique函數得出所有類型,可以明顯得到,這些影片共存在16種類型,你可以使用’types.shape’來查看,這里就不再列示出來了。既然得到了影片類型,下面就該創建虛擬矩陣了,采用以下命令。
 
zero_matrix = np.zeros([len(movies),len(types)])
Dummies = pd.DataFrame(zero_matrix,columns = types)
Dummies.head(10)
零陣數據框
下面需要根據影片類型對虛擬矩陣重新賦值,見以下命令。
 
for ii,type in enumerate(movies.TYPE):
    indices = Dummies.columns.get_indexer(type.split(','))
    Dummies.iloc[ii,indices] = 1
賦值后的虛擬矩陣
現在是時候將虛擬矩陣和原數據表合并在一起了,這可以使用join函數實現。
 
movies_amend = movies.join(Dummies)
movies_amend.to_excel('修正后top20影片信息表.xlsx',index = False)
修正后影片信息表
這樣,就將生成的虛擬矩陣和原數據表合并在了一起,可以很方便地看出每部影片在所有類型下的具體賦值情況,雖然可以從一開始就能在原始表中做這個操作,但是小編強烈建議最好是將處理數據的流程單獨放在一起,而將處理后的結果與原表合并,這樣,你就不會因為一時的操作不當而引起原始數據的丟失。
 
寫到一起吧
雖然上面的分析中,并沒有用到多少代碼,但是小編這里還是將其整合在一起吧,便于大家系統地觀看。
 
# _*_ coding:utf-8 _*_
 
"""
    @author: liupu
    @date: 2018-8-5
    @filename: python2Dummies.py
    目的:使用python去快速生成虛擬矩陣
    工具:win7+python3.6+pandas
    數據集:Top20_movie.xlsx
"""
 
# 導入相關的分析庫
import numpy as np
import pandas as pd
 
# 讀取文件
movies = pd.read_excel('Top20_movie.xlsx') # 注意把當前目錄調整到文件所在目錄下
movies.head() # 大致看一下數據表信息
 
# 匯總影片類型
all_types = [] # 生成空列表存放影片類型
for type in movies.TYPE:
    all_types.extend(type.split(',')) # 統計每種影片的類型并將其放到影片列表中
types = pd.unique(all_types) # 繪制所有不重復的影片類型
 
# 生成虛擬矩陣并賦值
zero_matrix = np.zeros([len(movies),len(types)])
Dummies = pd.DataFrame(zero_matrix,columns = types)
for ii,type in enumerate(movies.TYPE):
    indices = Dummies.colums.get_indexer(type.split(','))
    Dummies.iloc[ii,indices] = 1
 
# 合并表格并導出表格
movies_amend = movies.join(Dummies)
movies_amend.to_excel('修正后top20影片信息表.xlsx',index = False)

標簽: pandas
頂一下
(0)
0%
踩一下
(0)
0%

Google提供的廣告

辽宁11选5任选四遗漏 双码跟指什么数字 车联网宣传图片 北京pk10人工在线预测 黑马屋股票论坛 欢乐真人麻将旧版 吉林十一选五规律 捕鱼游戏平台 南京手机麻将20进园子群 十一选五浙江开奖结果走势图 股票短线论坛