日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

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

發布時間:2025/4/5 python 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用python进行统计及分析第7章,构建电影分类的dummies 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
##################################################### ##### 對電影數據的操作。 生成啞變量 #####################################################import osdata_dir = "python數據科學手冊/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''' 構建指標DataFrame的方法之一是從一個全零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 功能很好,就是獲得標簽,從一個列表里面,找到 相符合的, 獲得它的編號。 # 必須是 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''' 這個操作 值得學習。 ''' # # 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, 可以直接對變量名字全部修改。比如:

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

這部分用我自己的例子做一個。

有一個數據是這樣的。

一些組織的活動,也是分成好多類別。

?這個數據只不過稍微更復雜一點,服務類別是在dict_profile這個鍵里面。還需要抽出來。不影響。

import os path = "all_volunteer_data_dir/每一個項目的信息(包含多個字典)" 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['服務類別:'])serve_type

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

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

?好了,準備就緒,開始生成虛擬變量。

?

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

?這樣獲得所有服務類別的列表。

?不過,這個還是不能用到循環里

在循環里,加一個判斷,字符長度不能為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

結果,就能得到dummies

?查看第一行數據,結果如下:

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

?

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。