日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

利用python进行统计及分析第7章,构建电影分类的dummies

發(fā)布時(shí)間:2025/4/5 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用python进行统计及分析第7章,构建电影分类的dummies 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
##################################################### ##### 對(duì)電影數(shù)據(jù)的操作。 生成啞變量 #####################################################import osdata_dir = "python數(shù)據(jù)科學(xué)手冊(cè)/pydata-book-2nd-edition-代碼/datasets/movielens" mnames = ['movie_id', 'title', 'genres'] movies = pd.read_table(os.path.join(data_dir, 'movies.dat'), sep='::', header=None, names=mnames) movies.head()all_genres = [] for x in movies.genres:all_genres.extend(x.split('|')) movies.shape len(all_genres) genres = pd.unique(all_genres) len(genres) genres''' 構(gòu)建指標(biāo)DataFrame的方法之一是從一個(gè)全零DataFrame開始: '''zero_matrix = np.zeros((len(movies), len(genres))) zero_matrix.ndim zero_matrix.shapedummies = pd.DataFrame(zero_matrix, columns=genres) dummies gen = movies.genres[0] gen gen.split('|') dummies.columns.get_indexer(gen.split('|')) ###################### #### 這里的 get_indexer 功能很好,就是獲得標(biāo)簽,從一個(gè)列表里面,找到 相符合的, 獲得它的編號(hào)。 # 必須是 columns 的方法。 ###################### dummies.columns.get_indexer(movies.genres[1].split('|')) dummies.columns.get_indexer(movies.genres[3].split('|'))movies.genresfor i, gen in enumerate(movies.genres):indices = dummies.columns.get_indexer(gen.split("|"))dummies.iloc[i, indices] = 1 dummies''' 這個(gè)操作 值得學(xué)習(xí)。 ''' # # g2 = movies.genres[2] # g2 # g2.split('|') # # dummies # x = pd.DataFrame(np.zeros(18)) # x # x.get_indexer(g2.split('|')) # x.columns = genres # genres # dfx = pd.DataFrame(x, columns=genres) # dfx # dfx.get_indexer(g2.split('|')) # dfx.columns.get_indexer(g2.split('|')) # locx = dfx.columns.get_indexer(g2.split('|')) # locx # # dfx.iloc[0, locx] = 10 # dfx.iloc[0,] # dfxmovies_windic = movies.join(dummies.add_prefix('Genre_')) movies_windic.iloc[0]

這段代碼里面,最騷的操作就是? get_indexer。

使用cut生成虛擬變量也很方便。

比如

np.random.seed(12345) values = np.random.rand(10) values bins = [0, 0.2, 0.4, 0.6, 0.8, 1] pd.get_dummies(pd.cut(values, bins))

另外, add_prefix, 可以直接對(duì)變量名字全部修改。比如:

df = pd.DataFrame(np.arange(12).reshape(3, 4),columns=list('abcd')) df df.add_prefix('key_')

這部分用我自己的例子做一個(gè)。

有一個(gè)數(shù)據(jù)是這樣的。

一些組織的活動(dòng),也是分成好多類別。

?這個(gè)數(shù)據(jù)只不過稍微更復(fù)雜一點(diǎn),服務(wù)類別是在dict_profile這個(gè)鍵里面。還需要抽出來。不影響。

import os path = "all_volunteer_data_dir/每一個(gè)項(xiàng)目的信息(包含多個(gè)字典)" import pandas as pddf = pd.read_pickle(path) df.keys() df.iloc[0,] df.shape df = df.iloc[:100] df.shape df.keys() df['dict_profile']serve_type = [] for i in range(df.shape[0]):profile = df.iloc[i, ]['dict_profile']serve_type.append(profile['服務(wù)類別:'])serve_type

先得到serve_type的列表。然后添加僅df

df['serve_type'] = serve_typedf.iloc[0, ]["serve_type"].split('|') st1 =df.iloc[0, ]["serve_type"] st1.split('|') st1

?好了,準(zhǔn)備就緒,開始生成虛擬變量。

?

serve_type_all = [] for i in range(df.shape[0]):serve_type_listi = df.iloc[i,]['serve_type'].split("|")serve_type_all.extend(serve_type_listi)len(serve_type_all) pd.Series(serve_type_all).value_counts() import numpy as np serve_type_all = np.unique(serve_type_all) serve_type_all serve_type_all.delete([""]) serve_type_allnew_serve_type_all = np.delete(serve_type_all, 0) new_serve_type_all

?這樣獲得所有服務(wù)類別的列表。

?不過,這個(gè)還是不能用到循環(huán)里

在循環(huán)里,加一個(gè)判斷,字符長(zhǎng)度不能為0,就剔除了,空格。

for i, st in enumerate(df['serve_type']):st_list = st.split('|')clean_st_list = [ s for s in st_list if len(s) >0]indices = dummies.columns.get_indexer(clean_st_list)dummies.iloc[i, indices] = 1dummies

結(jié)果,就能得到dummies

?查看第一行數(shù)據(jù),結(jié)果如下:

df_with_serve_type = df.join(dummies.add_prefix("serveType_")) df_with_serve_type.iloc[0, ]

?

總結(jié)

以上是生活随笔為你收集整理的利用python进行统计及分析第7章,构建电影分类的dummies的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。