第二次小考

46题目

a.结果

b. 抖音个性化推荐需收集的数据包括:

1.用户基础数据(性别、年龄、地区)

2.用户兴趣偏好(点赞、收藏、浏览记录)

3.用户行为数据(视频停留时间、滑动频率)

4.社交数据(关注、私信、评论)

5.设备/时间数据(使用时间段、设备信息)

理由: 推荐系统要通过这些信息建立用户画像,从而精准匹配内容,提高用户粘性和活跃度。

47题

项目主题:疫情数据分析与可视化

我们将以 中国国内 COVID-19 疫情数据 为案例,完成以下内容:

数据采集(公开CSV)

数据清洗与分析

数据可视化(地图、柱状图、折线图)

使用 Tkinter 构建图形界面

使用 AI 工具辅助开发过程


 一、借助 AI 工具做项目规划

✅ 提问示例:

我想用 Python 开发一个疫情数据分析和可视化软件,应该包括哪些功能?项目结构怎么设计?

AI 回复建议:

功能模块:

数据读取与预处理

各省确诊数柱状图

确诊趋势折线图

地图可视化(pyecharts)

图形化界面(Tkinter)

项目结构:

covid_analysis/

├── data/               # 数据文件(csv)

├── charts/             # 生成的图表

├── app.py              # 主程序

├── data_loader.py      # 数据加载与清洗

├── visualizer.py       # 数据可视化

├── gui.py              # 图形界面

└── requirements.txt    # 项目依赖


 二、准备数据和环境

AI 提问:请推荐一个 COVID-19 数据公开 CSV 示例?

AI 通常会推荐如下格式的数据(也可以用 Kaggle 或百度公开数据):

Province,Date,Confirmed,Deaths,Recovered

Hubei,2020-01-22,444,17,28

Zhejiang,2020-01-22,10,0,0

...

安装依赖:

pip install pandas matplotlib pyecharts tk


 三、数据读取与清洗(data_loader.py)

AI 提问:如何读取 CSV 数据,并按省份/日期统计确诊数?

import pandas as pd

def load_data(path='data/covid.csv'):

    df = pd.read_csv(path)

    df['Date'] = pd.to_datetime(df['Date'])

    return df

def get_latest_province_data(df):

    latest_date = df['Date'].max()

    latest_df = df[df['Date'] == latest_date]

    return latest_df[['Province', 'Confirmed']].sort_values(by='Confirmed', ascending=False)

def get_trend_data(df, province):

    return df[df['Province'] == province][['Date', 'Confirmed']]


四、数据可视化(visualizer.py)

柱状图(各省确诊)

AI 提问:请用 Matplotlib 画出省份确诊数的横向柱状图

import matplotlib.pyplot as plt

def plot_province_bar(data):

    plt.figure(figsize=(10, 8))

    plt.barh(data['Province'], data['Confirmed'], color='skyblue')

    plt.xlabel("确诊数")

    plt.title("各省最新确诊数")

    plt.tight_layout()

    plt.savefig("charts/province_bar.png")

    plt.show()


折线图(某省疫情趋势)

def plot_trend(data, province):

    plt.figure(figsize=(10, 5))

    plt.plot(data['Date'], data['Confirmed'], marker='o', label=province)

    plt.xticks(rotation=45)

    plt.title(f"{province} 疫情趋势")

    plt.ylabel("确诊数")

    plt.grid(True)

    plt.legend()

    plt.tight_layout()

    plt.savefig(f"charts/{province}_trend.png")

    plt.show()


中国地图(AI 提供 pyecharts 示例)

from pyecharts.charts import Map

from pyecharts import options as opts

def plot_china_map(data):

    c = Map()

    c.add("确诊数", [list(z) for z in zip(data['Province'], data['Confirmed'])], "china")

    c.set_global_opts(

        title_opts=opts.TitleOpts(title="中国各省确诊人数分布"),

        visualmap_opts=opts.VisualMapOpts(max_=data['Confirmed'].max())

    )

    c.render("charts/china_map.html")


��️ 五、构建图形界面(gui.py)

AI 提问:如何用 Tkinter 做一个按钮点击生成图表的界面?

import tkinter as tk

from data_loader import load_data, get_latest_province_data, get_trend_data

from visualizer import plot_province_bar, plot_trend, plot_china_map

def run_gui():

    df = load_data()

    def gen_bar():

        latest = get_latest_province_data(df)

        plot_province_bar(latest)

    def gen_trend():

        province = entry.get()

        if province:

            data = get_trend_data(df, province)

            plot_trend(data, province)

    def gen_map():

        latest = get_latest_province_data(df)

        plot_china_map(latest)

    root = tk.Tk()

    root.title("疫情数据分析")

    root.geometry("400x300")

    tk.Button(root, text="生成各省确诊柱状图", command=gen_bar).pack(pady=10)

    tk.Label(root, text="输入省份名:").pack()

    entry = tk.Entry(root)

    entry.pack()

    tk.Button(root, text="生成趋势图", command=gen_trend).pack(pady=10)

    tk.Button(root, text="生成中国地图", command=gen_map).pack(pady=10)

    root.mainloop()

if __name__ == '__main__':

    run_gui()


 六、AI 辅助打包发布(PyInstaller)

AI 提问:如何用 PyInstaller 打包这个 Tkinter 应用为 .exe 文件?

pyinstaller -w -F gui.py


 七、项目文档与博客(AI 协助生成文案)

AI 提问:帮我写一份这个项目的技术总结、设计思路、使用方法,用 Markdown 格式。

AI 将帮你生成一份结构清晰的项目博客文档,包括:

项目简介

功能说明

项目结构

开发过程

技术栈说明

展望与总结


✅ 总结:AI 工具在项目中的角色

开发环节

人工操作

AI 辅助内容

项目规划

明确主题

自动设计结构、功能建议

编码实现

编写逻辑

自动生成代码、找 bug

可视化

选择图表

自动绘图模板、图形优化

界面设计

界面布局

自动构建 Tkinter/Django 代码

文档整理

写项目总结

自动生成 Markdown 技术博客

打包部署

使用打包工具

生成命令、处理依赖问题


48题

项目实现思路

  1. 获取微信好友信息:借助itchat库登录微信,获取好友信息并保存到文件。
  2. 可视化分析:运用matplotlibwordcloud库分别对好友性别、所在省份、城市进行可视化,同时对签名生成词云。
  3. 界面设计:使用tkinter构建图形用户界面,方便用户操作。
  4. 打包成可执行文件:通过pyinstaller将项目打包成.exe文件。

代码实现

import itchat

import pandas as pd

import matplotlib.pyplot as plt

from wordcloud import WordCloud

import jieba

import os

import tkinter as tk

from tkinter import messagebox

from PIL import Image, ImageTk

# 登录微信

def login_wechat():

    itchat.auto_login(hotReload=True)

    messagebox.showinfo("提示", "微信登录成功!")

# 保存好友信息到文件

def save_friends_info():

    friends = itchat.get_friends(update=True)[1:]

    data = []

    for friend in friends:

        data.append({

            'NickName': friend['NickName'],

            'Sex': friend['Sex'],

            'Province': friend['Province'],

            'City': friend['City'],

            'Signature': friend['Signature']

        })

    df = pd.DataFrame(data)

    df.to_csv('friends_info.csv', index=False)

    messagebox.showinfo("提示", "好友信息保存成功!")

# 好友性别可视化

def visualize_sex():

    friends = itchat.get_friends(update=True)[1:]

    male = female = other = 0

    for friend in friends:

        sex = friend['Sex']

        if sex == 1:

            male += 1

        elif sex == 2:

            female += 1

        else:

            other += 1

    total = len(friends)

    labels = ['男性', '女性', '其他']

    sizes = [male, female, other]

    colors = ['lightblue', 'pink', 'gray']

    plt.pie(sizes, labels=labels, colors=colors, autopct='%1.1f%%', startangle=90)

    plt.axis('equal')

    plt.title('微信好友性别分布')

    plt.show()

# 好友所在省份可视化

def visualize_province():

    friends = itchat.get_friends(update=True)[1:]

    provinces = [friend['Province'] for friend in friends if friend['Province']]

    df = pd.DataFrame({'Province': provinces})

    province_counts = df['Province'].value_counts()

    top_provinces = province_counts.head(10)

    top_provinces.plot(kind='bar')

    plt.xlabel('省份')

    plt.ylabel('好友数量')

    plt.title('微信好友所在省份分布(前10)')

    plt.xticks(rotation=45)

    plt.show()

# 所在城市可视化

def visualize_city():

    friends = itchat.get_friends(update=True)[1:]

    cities = [friend['City'] for friend in friends if friend['City']]

    df = pd.DataFrame({'City': cities})

    city_counts = df['City'].value_counts()

    top_cities = city_counts.head(10)

    top_cities.plot(kind='bar')

    plt.xlabel('城市')

    plt.ylabel('好友数量')

    plt.title('微信好友所在城市分布(前10)')

    plt.xticks(rotation=45)

    plt.show()

# 签名词云化

def visualize_signature():

    friends = itchat.get_friends(update=True)[1:]

    signatures = []

    for friend in friends:

        signature = friend['Signature'].strip().replace('span', '').replace('class', '').replace('emoji', '')

        if signature:

            signatures.append(signature)

    text = ''.join(signatures)

    words = jieba.lcut(text)

    new_text = ' '.join(words)

    wc = WordCloud(font_path='simhei.ttf', background_color='white').generate(new_text)

    plt.imshow(wc, interpolation='bilinear')

    plt.axis('off')

    plt.title('微信好友签名词云')

    plt.show()

# 创建主窗口

root = tk.Tk()

root.title("微信好友数据分析")

# 创建按钮

btn_login = tk.Button(root, text="登录微信", command=login_wechat)

btn_login.pack(pady=10)

btn_save = tk.Button(root, text="保存好友信息", command=save_friends_info)

btn_save.pack(pady=10)

btn_sex = tk.Button(root, text="好友性别可视化", command=visualize_sex)

btn_sex.pack(pady=10)

btn_province = tk.Button(root, text="好友所在省份可视化", command=visualize_province)

btn_province.pack(pady=10)

btn_city = tk.Button(root, text="所在城市可视化", command=visualize_city)

btn_city.pack(pady=10)

btn_signature = tk.Button(root, text="签名词云化", command=visualize_signature)

btn_signature.pack(pady=10)

# 运行主循环

root.mainloop()

    

代码解释

  1. 登录微信login_wechat函数利用itchat.auto_login方法登录微信。
  2. 保存好友信息save_friends_info函数获取好友信息并保存为csv文件。
  3. 可视化分析visualize_sexvisualize_provincevisualize_cityvisualize_signature函数分别对好友性别、所在省份、城市和签名进行可视化分析。
  4. 界面设计:使用tkinter创建主窗口和按钮,通过按钮触发相应功能。

打包成可执行文件

在命令行中执行以下命令将项目打包成.exe文件:

bash

pyinstaller -F wechat_friends_analysis.py

技术博客内容

你可以按照以下结构撰写技术博客:

  1. 项目背景:介绍项目的背景和目的。
  2. 设计思想:阐述项目的设计思路和实现方法。
  3. 相关源码:展示项目的主要代码,并对代码进行详细解释。
  4. 总结:总结项目的实现过程和遇到的问题。
  5. 未来展望:提出项目的改进方向和未来的发展计划。

注意事项

  • 运行代码前,请确保已经安装了itchatpandasmatplotlibwordcloudjiebaPillow等库。
  • 由于微信的安全机制,可能会出现登录失败的情况,请根据提示进行操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值