Python数据处理与数据可视化入门级别题目,带个人解析代码讲解和个人构思思维分析图。

题目如下:

123家已信贷记录的企业数据文件是2020年全国数学建模竞赛c题的附件1中的表单1,可自行网上下载;

如下是个人构思思维分析图:

 

然后代码实现和解析注释如下:

#制作人:早晚得猝死的yuan
'''
下面那些语句一开始不懂很正常,csdn看别人的代码,看看他怎么解释的,
多查查就知道大概做什么的了,然后调调参数,多看几个,看看能不能拼凑着用。
还有就是可以在代码后用 # 或者 ‘’’ 来注释来方便你去理解代码和让别人读懂,检查代码、调试代码也方便
'''
#先引用库 (一开始不懂没关系,知道大概干啥的就行)
from openpyxl import load_workbook
import xlwt
#获取excel数据
workbook = load_workbook('C:\\Users\\yuan\\Desktop\\附件1:123家有信贷记录企业的相关数据.xlsx')#找到需要xlsx文件的位置
sheets = workbook.get_sheet_names()                   # 从名称获取sheet
booksheet = workbook.get_sheet_by_name(sheets[0])     #获取指定sheet数据
rows = booksheet.rows                                 #获取sheet页的行数据
columns = booksheet.columns                            #获取sheet页的列数据
rows = booksheet.rows                                 #获取sheet页的行数据
columns = booksheet.columns                            #获取sheet页的列数据

#这里是全局变量
list_A = []         #A信誉等级企业名字
list_B = []         #B信誉等级企业名字
list_C = []         #C信誉等级企业名字
list_D = []         #D信誉等级企业名字

#迭代(循环储存的意思)所有Excel中的行与列
i = 1 #循环获取指定行要用,先在外边初始化,不能写循环里面,因为你想一想如果把i=1写循环里面,那i就一直循环是1了,指定行也就一直是1,这样不是我们想要的效果
for row in rows:
    i = i + 1
    name = booksheet.cell(row=i, column=2).value #获取企业名字的数据 (row是行,column是列)
    denji = booksheet.cell(row=i, column=3).value #获取信誉等级的数据
    weiyue = booksheet.cell(row=i, column=4).value #获取是否违约的数据
    #记住这里是嵌套的结构,每进一次循环,就判断一下,不懂嵌套的快去看c语言,这里嵌套要注意格式,这些判断太简单了
    #还有就是理解continue和break的区别,continue是结束当前一次循环,而break是整个for都结束了,别混淆了
    if (weiyue== "是"):           #判断是否违约
        continue #违约的话结束当前循环,不进行下面操作
    elif (weiyue == None):        #判断是否为空数据
        continue #空的话结束当前循环,不进行下面操作
    elif (denji== "A"):#信誉等级是A的情况
        list_A.append(name)       #A等级公司列表存入该公司名字
        list_A.append(denji)      #A等级公司列表存入该公司等级
    elif (denji== "B"):#信誉等级是B的情况
        list_B.append(name)       #B等级公司列表存入该公司名字和等级
        list_B.append(denji)      #B等级公司列表存入该公司等级
    elif (denji== "C"):#信誉等级是C的情况
        list_C.append(name)       #C等级公司列表存入该公司名字和等级
        list_C.append(denji)      #C等级公司列表存入该公司等级
    elif (denji== "D"):#信誉等级是D的情况
        list_D.append(name)       #D等级公司列表存入该公司名字和等级
        list_D.append(denji)      #D等级公司列表存入该公司等级

#按照等级排序循环将公司数据放入总列表里面,方便后面存入数据使用,如果你不想搞这个也行,后面存入你要多写几个,你可以尝试一下哈哈哈哈
sumlist = []                                        #创建一个新的空列表
#按照A、B、C排列顺序依次循环存入总列表
#如果遇到不知道怎么添加进去什么的问题,csdn就完了,别害怕而不敢写,很多逻辑和c语言差不多,只是语法不同罢了,大胆一点
for a in list_A:
    sumlist.append(a)
for b in list_B:
    sumlist.append(b)
for c in list_C:
    sumlist.append(c)
for d in list_D:
    sumlist.append(d)
# print(sumlist)
#调试测试使用(有时候不一定能一次性成功,使用有时候报错或者出问题了,就在一些地方输出看看是不是这个东西像自己所想那样,方便调试改错)
print("数据处理部分完成")
print("准备导出数据")


#创造新Excel里的表单和设置列名,(这里先不着急创建文件,最后面保存时会自动生成新的Excel,现在先将数据导入到表单)
book = xlwt.Workbook(encoding='utf-8',style_compression=0)      #设置表格的格式(让其中文能够正常显示)这个不用理解也行
sheet = book.add_sheet('无违约的不同等级的企业名单',cell_overwrite_ok=True)  #创建一个新的表单sheet
col = ('企业名字','信誉等级')                                       #两个列标题的名字写在一个元组里,便于后面循环写入
for i in range(0,2):                                             #通过循环在新Excel中写入两个列标题
    sheet.write(0,i,col[i])
print("在新Excel创建表单成功")

#存入数据
q=1  #这里初始化q的原因是为了让循环存入数据不会出现跳越格子存入,好好思考一下,调试一下代码感受一下,你可以想想不用q的话,什么办法也能一样效果)
for f in range(0,len(sumlist)):                 #通过循环总无违规公司列表,将对应数据写入新文件中
    if (f == 0):                                #第0个的数据写入新excel中”企业名字“那一列
        sheet.write(q,0,sumlist[f]) #sheet,write(指定的行,指定的列,对应的数据)
        print("正在存入数据new企业名字")                      #方便检测是否正常运行
    elif (f%2 == 1):                            #偶数的话是等级,所以写入新excel中”信誉等级“那一列
        sheet.write(q,1,sumlist[f]) #sheet,write(指定的行,指定的列,对应的数据)
        q = q + 1
        print("正在存入数据new信誉等级")                     #方便检测是否正常运行
    elif (f%2 != 1):                            #奇数的话是企业名字,所以写入新excel中”企业名字“那一列
        sheet.write(q,0,sumlist[f]) #sheet,write(指定的行,指定的列,对应的数据)
        print("正在存入数据new企业名字")                     #方便检测是否正常运行
print("导入数据结束")
savepath = "C:\\Users\\yuan\\Desktop\\无违约的不同等级企业数据.xlsx"  #指定路径
book.save(savepath)                               #按照路径进行保存,自动生成Excel
print("导出成功")
#对了如果需要重新编译运行,记得关文件,不然会报错笨蛋

#第二题部分
#开始画不同信用等级的公司数目数据统计图咯
'''
其实一开始不一定要完全熟练,csdn找到自己想要的效果运行图,
用他们的代码,然后大概读懂他们的代码,你调参数就行了,
但是记住了,别忘记更改一下跟自己不一样的路径呀或者是什么参数变量
如果遇到一些报错别着急,细心一点,查一下csdn,看看别人怎么解决的
或者自己看看是不是哪个地方有问题呢
(好吧其实我有时候也很急躁很烦哈哈哈哈哈)
'''
#先调用需要的库
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
font_set = FontProperties(fname = r"C:\windows\fonts\simsun.ttc",size = 15)  #设置系统中的字体(宋体)为字型样式
x = ["A","B","C","D"]#设置x轴
y = [0.5*len(list_A),0.5*len(list_B),0.5*len(list_C),0.5*len(list_D)] #设置y轴
#这里为什么要*0.5呢,是因为前面这个lsit_XXX导入数据分别有企业名字和信誉等级两个数据,使以一半才是他们企业真正的数目
plt.bar(x,y)#制作出xy图
plt.title("不同信用等级的公司数目数据统计图",fontproperties = font_set);#标题文字设置,你看title也就知道啥意思了
plt.xlabel("企业数目",fontproperties = font_set);   #x轴的左侧文字
plt.ylabel("信誉等级",fontproperties = font_set);   #y轴的右侧文字
plt.show()#展示图窗口

'''
有时候不一定说非要一定要熟练学过xxxx或者什么,更重要的是编程思想和解决问题的思路方式,和遇到问题时的搜索查资料能力
只有基础打好了,训练多了,才能走的更高更远!
多调试,多思考,多练
'''

因为作为入门级别,所以方法与解释可能有欠缺,如果有问题可以评论指点一下,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值