python数据分析

这篇博客详细介绍了如何使用Python进行微信好友数据的分析,包括男女比例、省份城市分布、情感分析、年级比例等,利用pyecharts进行可视化,并展示了各种图表的实现,如饼状图、柱状图、词云、地图等。
摘要由CSDN通过智能技术生成

一、 目的

根据上课讲的吴迪老师的微信好友数据分析,请选择你的微信好友数据,或者你的qq好友数据,或者你的班级同学数据,或者其他你能获取的其他人物数据
作为分析对象。然后利用上课讲的技术,但不限于,对其进行数据分析。比如分析微信好友数据,可以可视化好友男女比例分布,可视化省份来源,可视化签名的情感强度值等等。
要求:1分析数据用xls或者csv格式存储。
2.代码用py文件附件形式上传,方便我的下载。
3.在作业里可以介绍你的主要功能和可视化截图。
4.根据功能完整性和结果的酷给分。

二、项目完成功能总结

1:饼状图统计好友男女比例
2:柱状图学生省份和城市分析
3:分析191,192学生情感
4:柱状图17·18·19级学生男女比例
5:关系图example
6:词云
7:好友省份地图可视化
8:好友城市地图分析
9:好友头像集成大图
10: 微信好友名称分析职业特点

三、前期准备

1、需要用到的库

import os
import math
from PIL import Image
from pyecharts.charts import Pie
from pyecharts.charts import Bar
from pyecharts.charts import WordCloud
#用于设值全局配置和系列配置
from pyecharts import options as opts
import csv
import xlrd
import re
import jieba
from snownlp import SnowNLP
import matplotlib.pyplot as plt
import numpy as np
from pyecharts.charts import Graph
from collections import Counter
from pyecharts.charts import Map
from pyecharts.charts import Geo
from pyecharts.charts import Gauge
from pyecharts.charts import Liquid

2、文档

请添加图片描述提示:【qingxu.txt文本里就两个词语:积极(换行\n)消极;img文件夹里随便放微信头像或网上找的照片即可】

四、代码展示

'''
Autor: 何邦渊 
DateTime: 2022/4/22 22:08
IDE: PyCharm  
Function: 根据上课讲的吴迪老师的微信好友数据分析,请选择你的微信好友数据,或者你的qq好友数据,或者你的班级同学数据,或者其他你能获取的其他人物数据
          作为分析对象。然后利用上课讲的技术,但不限于,对其进行数据分析。比如分析微信好友数据,可以可视化好友男女比例分布,可视化省份来源,可视化签名的情感强度值等等。
          要求:1分析数据用xls或者csv格式存储。
          2.代码用py文件附件形式上传,方便我的下载。
          3.在作业里可以介绍你的主要功能和可视化截图。
          4.根据功能完整性和结果的酷给分。
'''
import os
import math
from PIL import Image
from pyecharts.charts import Pie
from pyecharts.charts import Bar
from pyecharts.charts import WordCloud
#用于设值全局配置和系列配置
from pyecharts import options as opts
import csv
import xlrd
import re
import jieba
from snownlp import SnowNLP
import matplotlib.pyplot as plt
import numpy as np
from pyecharts.charts import Graph
from collections import Counter
from pyecharts.charts import Map
from pyecharts.charts import Geo
from pyecharts.charts import Gauge
from pyecharts.charts import Liquid
'''
    例子1:饼状图统计好友男女比例
'''
# 1.1 读取csv文件,把性别信息读取出来
def getSex(filename):
    lstsex = []
    with open(filename,'r') as fr:
        reader = csv.reader(fr)
        for i in reader:
            lstsex.append(i[4])
    return lstsex
# 1.2 性别pyecharts可视化
def VisualSexpyechart(lstsex):
    sex = dict()
    # 2.1 提取好友性别信息,从1开始,因为第0个是自己
    for f in lstsex[1:]:
        if f == '1': # 男
            sex['man'] = sex.get('man',0) + 1
        elif f== '2': # 女
            sex['women'] = sex.get('women',0) + 1
        else: # 未知
            sex['unknown'] = sex.get('unknown',0) + 1
    # 在屏幕上打印出来
    total = len(lstsex[1:])
    # 2.2打印出自己的好友性别比例
    print("男性好友:%.2f%%" %(float(sex['man']) / total*100) + '\n' + "女性好友:%.2f%%" %(float(sex['women']) / total*100) +
          "不明性别好友:%.2f%%" %(float(sex['unknown']) / total*100))
    # 2.3使用pyecharts饼状图
    attr = ['男性好友','女性好友','不明性别好友']
    value = [sex['man'],sex['women'],sex['unknown']]
    # 饼图用的数据格式是[(key1,value1),(key2,value2)],所以先使用 zip函数将二者进行组合
    data_pair = [list(z) for z in zip(attr, value)]
    # 初始化配置项,内部可设置颜色
    (
        Pie(init_opts=opts.InitOpts(bg_color="white"))
        .add(
            # 系列名称,即该饼图的名称
            series_name="性别分析",
            # 系列数据项,格式为[(key1,value1),(key2,value2)]
            data_pair=data_pair,
            # 通过半径区分数据大小 “radius” 和 “area” 两种
            rosetype='',
            # 饼图的半径,设置成默认百分比,相对于容器高宽中较小的一项的一半
            radius="55%",
            # 饼图的圆心,第一项是相对于容器的宽度,第二项是相对于容器的高度
            center=["50%", "50%"],
            # 标签配置项
            label_opts=opts.LabelOpts(is_show=True, position="center"),
        )
        # 全局设置
        .set_global_opts(
            # 设置标题
            title_opts=opts.TitleOpts(
                # 名字
                title="微信好友性别比例",
                # 组件距离容器左侧的位置
                pos_left="center",
                # 组件距离容器上方的像素值
                pos_top="20",
                # 设置标题颜色
                title_textstyle_opts=opts.TextStyleOpts(color="black"),
            ),
            # 图例配置项,参数 是否显示图里组件
            legend_opts=opts.LegendOpts(is_show=True),
        )
        # 系列设置
        .set_series_opts(
            tooltip_opts=opts.TooltipOpts(
                trigger="item", formatter="{a} <br/>{b}: {c} ({d}%)"
            ),
            # 设置标签颜色
            label_opts=opts.LabelOpts(color="black"),
        )
        .render('好友性别比例.html')
    )
# 1.3 性别pyecharts 柱状图可视化
def VisualSexpyechart2(lstsex):
    sex = dict()
    # 2.1 提取好友性别信息,从1开始,因为第0个是自己
    for f in lstsex[1:]:
        if f == '1':  # 男
            sex['man'] = sex.get('man', 0) + 1
        elif f == '2':  # 女
            sex['women'] = sex.get('women', 0) + 1
        else:  # 未知
            sex['unknown'] = sex.get('unknown', 0) + 1
    # 在屏幕上打印出来
    total = len(lstsex[1:])
    # 2.2打印出自己的好友性别比例
    print(
        "男性好友:%.2f%%" % (float(sex['man']) / total * 100) + '\n' + "女性好友:%.2f%%" % (
                float(sex['women']) / total * 100) + '\n' +
        "不明性别好友:%.2f%%" % (float(sex['unknown']) / total * 100))
    # 2.3使用pyecharts饼状图
    attr = ['男性好友', '女性好友', '不明性别好友']
    value = [sex['man'], sex['women'], sex['unknown']]
    # # 饼图用的数据格式是[(key1,value1),(key2,value2)],所以先使用 zip函数将二者进行组合
    # data_pair = [list(z) for z in zip(attr, value)]
    # 初始化配置项,内部可设置颜色
    bar = (
        Bar()
            .add_xaxis(attr)
            .add_yaxis("amount", value, color='green')
            .set_global_opts(
            title_opts=opts.TitleOpts(title='微信数据分析'),
            yaxis_opts=opts.AxisOpts(name="amount"),
            xaxis_opts=opts.AxisOpts(name="sex")
        )

    ).render('好友性别比例2.html')
'''
    例子2:柱状图学生省份和城市分析
'''
# 2.1读取省份信息
def getProvince(filename):
    Province1 = {
   }
    Province2 = {
   }
    Province3 = {
   }
    a = []
    flag = 0
    for filename_kid in filename:
        flag += 1
        rd = xlrd.open_workbook(filename_kid)
        all_sheet = rd.sheet_names()
        for sheet_kid in all_sheet:
            table = rd.sheet_by_name(sheet_kid)
            nrows = table.nrows
            for i in range(nrows - 1):
                province = table.cell(i + 1, 6).value
                if flag == 1:
                    Province1[province] = Province1.get(province, 0) + 1
                elif flag == 2:
                    Province2[province] = Province2.get(province, 0) + 1
                else:
                    Province3[province] = Province3.get(province, 0) + 1
        if flag == 1:
            a.append(Province1)
        elif flag == 2:
            a.append(Province2)
        else:
            a.append(Province3)
    return a
# 2.2省份可视化
def Provincepyechart(province_list):
    province_dict = ['黑龙江', '四川', '天津', '内蒙古', '江苏', '海南', '辽宁', '陕西', '浙江', '河南', '山西', '湖北', '广西', '重庆', '吉林', '贵州',
                     '云南', '河北', '山东']
    province1_dict = province_list[0]
    province2_dict = province_list[1]
    province3_dict = province_list[2]
    province1 = []
    province2 = []
    province3 = []
    value1 = []
    value2 = []
    value3 = []
    for key, value in province1_dict.items():
        province1.append(key)
        value1.append(value)
    for key, value in province2_dict.items():
        province2.append(key)
        value2.append(value)
    for key, value in province3_dict.items():
        province3.append(key)
        value3.append(value)
    print(province1)
    print(province2)
    print(province3)
    bar = (
        Bar()
            .add_xaxis(province_dict)
            .add_yaxis('软件17学生', value1)

            .add_yaxis('软件18学生', value2)

            .add_yaxis('软件19学生', value3)
            .set_global_opts(title_opts=opts.TitleOpts(title="17,18,19级学生省份分析"),
                             xaxis_opts=opts.AxisOpts(
                                 axislabel_opts=opts.LabelOpts(
                                     rotate=45,  # Optional[Numeric]
                                 )
                             )
                             ))
    bar.render('17,18,19级学生省份分析.html')
# 2.3读取城市信息
def getCity(filename):
    City1 = {
   }
    City2 = {
   }
    City3 = {
   }
    a = []
    flag = 0
    for filename_kid in filename:
        flag += 1
        rd = xlrd.open_workbook(filename_kid)
        all_sheet = rd.sheet_names()
        for sheet_kid in all_sheet:
            table = rd.sheet_by_name(sheet_kid)
            nrows = table.nrows
            for i in range(nrows - 1):
                City = table.cell(i + 1, 7).value
                if flag == 1:
                    City1[City] = City1.get(City, 0) + 1
                elif flag == 2:
                    City2[City] = City2.get(City, 0) + 1
                else:
                    City3[City] = City3.get(City, 0) + 1
        if flag == 1:
            a.append(City1)
        elif flag == 2:
            a.append(City2)
        else:
            a.append(City3)
    return a
# 2.4城市可视化
def cityPyechart(city_list):
    city_dict = ['鸡西', '泰安', '阜阳', '北京', '兰州', '深圳', '阳春', '开封', '周口', '哈尔滨', '齐齐哈尔', '鹤岗', '大庆', '佳木斯', '宜昌', '怀化',
                 '常德', '德州', '临沂', '朔州', '临汾', '天津', '温州市', '重庆', '上饶', '金华', '石家庄', '巴中', '咸阳', '信阳']
    city1_dict = city_list[0]
    city2_dict = city_list[1]
    city3_dict = city_list[2]
    city1 = []
    city2 = []
    city3 = []
    value1 = []
    value2 = []
    value3 = []
    for key, value in city1_dict.items():
        city1.append(key)
        value1.append(value)
    for key, value in city2_dict.items():
        city2.append(key)
        value2.append(value)
    for key, value in city3_dict.items():
        city3.append(key)
        value3.append(value)
    print(city1)
    print(city2)
    print(city3)
    bar = (
        Bar()
            .add_xaxis(city_dict)
            .add_yaxis('软件17学生', value1)

            .add_yaxis('软件18学生', value2)

            .add_yaxis('软件19学生', value3)
            .set_global_opts(title_opts=opts.TitleOpts(title="17,18,19级学生省份分析"),
                             xaxis_opts=opts.AxisOpts(
                                 axislabel_opts=opts.LabelOpts(
                                     rotate=45,  # Optional[Numeric]
                                 )
                             )
                             ))
    bar.render('17,18,19级学生城市分析.html')

'''
    例子3:分析191,192学生情感
'''
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 3.1 读取Excel表格,保存txt文件词性,分析情感强度
def getStrong(filename,save):
    data = xlrd.open_workbook(filename,'r',encoding_override='utf-8')
    temp = []
    name = []
    tables = data.sheets()
    for i in range(len(tables)):
        list = data.sheet_by_index(i)
        rows = list.nrows
        for j in range(rows):
            if j== 0:
                continue
            name.append(list.row_values(j)[3])
            temp.append(list.row_values(j)[16])
        file = open(f"{
     save}",'a',encoding='utf-8')
        i = 0
        for ld in temp:
            signature = ld.strip().replace("emoji","").replace("span","")
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值