【hot100篇-python刷题记录】【前 K 个高频元素】

R6-堆

印象题

法1:哈希表+排序

思路:

用哈希表记录吗每个数出现的次数,按照value值排序,输出倒数k个即可,但这样的话,需要根据values找keys,需要增加一遍遍历哈希表。

想到一个改进,直接用collections.Counter(),但这样的话,怎么输出又不太会处理,还是用第一种方法吧。

class Solution:
    def topKFrequent(self, nums: List[int], k: int) -> List[int]:
        dict=defaultdict(int)
        ret=[]
        for num in nums:
            dict[num]+=1
        final=sorted(dict.keys(),key= lambda x:dict[x],reverse=True)
        for i in range(k):
            ret.append(final[i])
        return ret

ps:靠,没用堆的知识

法2:最小堆维护k高

最大堆求topk小,最小堆求 topk 大 

所以这里使用最小堆的知识。

 

import heapq
class Solution:
    def topKFrequent(self, nums: List[int], k: int) -> List[int]:
        #使用字典统计出现频率:
        dict=defaultdict(int)
        for num in nums:
            dict[num]+=1
        
        #最小堆,用于维护出现频率最高的k个数字
        #如果有数字比根节点还大的话,就需要重构该最小堆树
        minHeap=[]
        for num,fre in dict.items():
            #堆内元素不足k个--堆未满,直接添加
            if (len(minHeap)<k):
                heapq.heappush(minHeap,(fre,num))
            #堆满,且当前高于根节点,重建
            elif fre>minHeap[0][0]:
                heapq.heappushpop(minHeap,(fre,num))

        #最后,从小顶堆中提取前k个频率最高的元素
        ret=[num for fre,num in minHeap] 
        return ret               

 

ps:

字典的使用

dict.keys()
dict.values()
dict.items()

堆的函数使用

 

在进行数据分析和建模之,数据预处理是必不可少的步骤。本文将介绍常见的数据预处理方法,以及如何用Python实现它们。 ## 缺失值处理 在实际数据中,经常会出现缺失值。这些缺失值可能是由于数据采集过程中的问题,或者是由于某些数据不可用或丢失。在分析过程中,缺失值会影响模型的准确性,因此需要进行处理。 ### 1. 删除缺失值 一种简单的方法是删除包含缺失值的行或列。这种方法简单、直接,但也可能会导致数据丢失过多。 ```python # 删除包含缺失值的行 df.dropna(inplace=True) # 删除包含缺失值的列 df.dropna(axis=1, inplace=True) ``` ### 2. 填充缺失值 另一种方法是用其他值填充缺失值。常见的填充方法包括: - 用平均值、中位数或众数填充 - 用一个或后一个非缺失值填充 - 用插值法填充(比如线性插值、多项式插值等) ```python # 用平均值填充缺失值 df.fillna(df.mean(), inplace=True) # 用一个非缺失值填充缺失值 df.fillna(method='ffill', inplace=True) # 用插值法填充缺失值 df.interpolate(inplace=True) ``` ## 异常值处理 异常值是指与其它数据极为不同的数据点。异常值可能是由于数据采集过程中的错误或异常,或者是由于真实的异常情况。在分析过程中,异常值会影响模型的准确性,因此需要进行处理。 ### 1. 删除异常值 一种简单的方法是删除包含异常值的行或列。这种方法可能会导致数据丢失过多。 ```python # 删除包含异常值的行 df = df[df['column'] < threshold] # 删除包含异常值的列 df.drop('column', axis=1, inplace=True) ``` ### 2. 替换异常值 另一种方法是用其他值替换异常值。常见的替换方法包括: - 用平均值、中位数或众数替换 - 用一个或后一个非异常值替换 - 用插值法替换(比如线性插值、多项式插值等) ```python # 用中位数替换异常值 median = df['column'].median() df.loc[df['column'] > threshold, 'column'] = median # 用一个非异常值替换异常值 df.loc[df['column'] > threshold, 'column'] = df.loc[df['column'] < threshold, 'column'].iloc[-1] # 用插值法替换异常值 df['column'] = df['column'].interpolate() ``` ## 数据标准化 在进行数据分析和建模之,通常需要对数据进行标准化。标准化可以将不同变量的取值范围统一,避免因为变量取值范围不同而导致的模型偏差。 常见的标准化方法包括: - Z-score标准化 - 最小-最大标准化 - 小数定标标准化 ```python # Z-score标准化 from sklearn.preprocessing import StandardScaler scaler = StandardScaler() df['column'] = scaler.fit_transform(df[['column']]) # 最小-最大标准化 from sklearn.preprocessing import MinMaxScaler scaler = MinMaxScaler() df['column'] = scaler.fit_transform(df[['column']]) # 小数定标标准化 df['column'] = df['column'] / 10**np.ceil(np.log10(df['column'].abs().max())) ``` ## 数据编码 在进行数据分析和建模之,通常需要对非数值型数据进行编码。编码可以将非数值型数据转换成数值型数据,方便模型进行计算。 常见的编码方法包括: - one-hot编码 - 标签编码 ```python # one-hot编码 from sklearn.preprocessing import OneHotEncoder encoder = OneHotEncoder() encoded = encoder.fit_transform(df[['column']]) df_encoded = pd.DataFrame(encoded.toarray(), columns=encoder.get_feature_names(['column'])) # 标签编码 from sklearn.preprocessing import LabelEncoder encoder = LabelEncoder() df['column'] = encoder.fit_transform(df['column']) ``` ## 特征选择 在进行数据分析和建模之,通常需要对特征进行选择。特征选择可以帮助我们选择最重要的特征,避免因为特征过多而导致的过拟合问题。 常见的特征选择方法包括: - 方差选择法 - 相关系数法 - 卡方检验法 - 互信息法 - 基于模型的选择法 ```python # 方差选择法 from sklearn.feature_selection import VarianceThreshold selector = VarianceThreshold(threshold=0.1) df_selected = selector.fit_transform(df) # 相关系数法 from sklearn.feature_selection import SelectKBest from scipy.stats import pearsonr selector = SelectKBest(score_func=pearsonr, k=5) df_selected = selector.fit_transform(df, target) # 卡方检验法 from sklearn.feature_selection import chi2 selector = SelectKBest(score_func=chi2, k=5) df_selected = selector.fit_transform(df, target) # 互信息法 from sklearn.feature_selection import mutual_info_classif selector = SelectKBest(score_func=mutual_info_classif, k=5) df_selected = selector.fit_transform(df, target) # 基于模型的选择法 from sklearn.feature_selection import SelectFromModel from sklearn.linear_model import LogisticRegression selector = SelectFromModel(LogisticRegression(penalty='l1', C=0.1)) df_selected = selector.fit_transform(df, target) ``` 以上就是常见的数据预处理方法和Python实现方式。在实际分析和建模中,我们需要根据具体情况选择合适的方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值