项目:识别Twitter用户性别

1.相关知识点

网络爬虫
文本特征提取
图像特征提取
使用scikit-learn完成机器学习

2.分析步骤

1.查看数据
df_obj.info()
df_obj.shape()
df_obj.head()
2.明确分析目标
3.数据清洗
df_obj.dropna()
df_obj.fillna()
4.特征工程 model.fit()
特征提取、归一化、降维处理
5.选择模型
训练模型
交叉验证
6.模型测试
model.predict()

3.代码及注释

main.py

# -*- coding: utf-8 -*-

import os
import pandas as pd
from common_tools import get_dataset_filename, unzip, cal_acc
from pd_tools import inspect_dataset, check_profile_image, \
    split_train_test, clean_text, proc_text, get_word_list_from_data, \
    extract_tf_idf, extract_rgb_feat, extract_rgb_hist_feat
import nltk
from nltk.text import TextCollection
import numpy as np
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.decomposition import PCA


# 声明数据集路径
dataset_path = './dataset'  # 数据集路径
zip_filename = 'twitter-user-gender-classification.zip'  # zip文件名
zip_filepath = os.path.join(dataset_path, zip_filename)  # zip文件路径
cln_datapath = './cln_data.csv'     # 清洗好的数据路径

# 是否第一次运行
is_first_run = False


def run_main():
    """
        主函数
    """
    # 声明变量
    dataset_filename = get_dataset_filename(zip_filepath)  # 数据集文件名(在zip中)
    dataset_filepath = os.path.join(dataset_path, dataset_filename)  # 数据集文件路径

    if is_first_run:

        print('解压zip...', end='')
        unzip(zip_filepath, dataset_path)
        print('完成.')

        # 读取数据
        data = pd.read_csv(dataset_filepath, encoding='latin1',
                           usecols=['gender', 'description', 'link_color',
                                    'profileimage', 'sidebar_color', 'text'])
        # 1. 查看加载的数据集
        inspect_dataset(data)

        # 2. 数据清洗
        # 2.1. 根据 'gender' 列过滤数据
        filtered_data = data[(data['gender'] == 'male') | (data['gender'] == 'female')]

        # 2.2 过滤掉 'description' 列为空的数据
        filtered_data = filtered_data.dropna(subset=['description'])

        # 2.3 过滤掉 'link_color' 列和 'sidebar_color' 列非法的16进制数据
        filtered_data = filtered_data[filtered_data['link_color'].str.len() == 6]
        filtered_data = filtered_data[filtered_data['sidebar_color'].str.len() == 6]

        # 2.4 清洗文本数据
        print('清洗文本数据...')
        cln_desc = filtered_data['description'].apply(clean_text)
        cln_text = filtered_data['text'].apply(clean_text)
        filtered_data['cln_desc'] = cln_desc
        filtered_data['cln_text'] = cln_text

        # 2.5 根据profileimage的链接判断头像图片是否有效,
        # 并生成新的列代表头像图片保存的路径
        print('下载头像数据...')
        saved_img_s = filtered_data['profileimage'].apply(check_profile_image)
        filtered_data['saved_image'] = saved_img_s
        # 过滤掉无效的头像数据
        filtered_data = filtered_data[filtered_data['saved_image'] != '']

        # 保存处理好的数据
        filtered_data.to_csv(cln_datapath, index=False)

    # 读取处理好的数据
    clean_data = pd.read_csv(cln_datapath, encoding='latin1',
                             usecols=['gender', 'cln_desc', 'cln_text',
                                      'link_color', 'sidebar_color', 'saved_image'])

    # 查看label的分布
    print(clean_data.groupby('gender').size())

    # 替换male->0, female->1
    clean_data
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值