Spyder临摹作业(西安交大国家艺术基金数据可视化培训第10天)
1 安装环境配置
备份:打开 Anaconda3.2019.03\Lib文件夹,新建一个备份文件夹,将site-packages文件夹(725m)使用winrar压缩到此文件夹中,命名为site-packages备份.rar。
替换:将老师提供的site-packages文件夹(大概150m)拷贝到Anaconda3.2019.03\Lib\中,必要时替换原有的相关文件。
2 工程
案例1:动态直方图(类似B站效果)
(1)工程文件样本:在E:\projects\Asm中创建一个Spyder文件夹,拷贝老师提供的CSV_CONV工程文件夹、Historical-ranking-data-visualization-based-on-d3.js-master文件夹。
(2)数据库:
源数据——data.csv:
使用excel打开data.csv,该数据库为2009-2017年全国32个省的数据,共有32行10列;
目标数据:
使用excel打开Historical-ranking-data-visualization-based-on-d3.js-master\src\example.csv文件,该数据库为4列(name,type,value,date等4个变量)、多行的数据。我们将使用python将源数据转换成目标数据,从而便于Historical-ranking-data-visualization加载。
(3)打开工程文件:
用Spyder打开CSV_CONV.py文件,另存为动态直方图_吴志勇20190529.py,该代码用于将源数据整形为目标数据,代码如下:
import os;
import string;
file =open("data.csv","r");
out =open("data_out.csv","w");
out.write("name,type,value,date\r");
def write_line(str):
strarray= str.split(",")
for i in range(8,-1,-1):
out.write(""+strarray[0]+"");
out.write(",");
out.write(strarray[0]);
out.write(",");
out.write(strarray[i+1]);
out.write(",");
out.write("%s"%(2017-i)+"-01-01");
out.write(",\r");
str=file.readline();
while True:
str=file.readline();
str=str.replace("\n","")
if (str==None or str==""):
break;
print(str);
write_line(str)
整形后输出的数据为data_out.csv
(4)可视化效果
进入Historical-ranking-data-visualization-based-on-d3.js-master\src,打开bargraph.html,这是一个使用D3.js完成的动态直方图小工具,能将符合example格式的数据库变成动态直方图。源代码不详,CSDN有类似文章可供参考。
选择data_out.csv即可看到效果。
乱码处理:使用Spyder打开Historical-ranking-data-visualization-based-on-d3.js-master\src\config.js,修改第9行代码为: //encoding: "UTF-8",
encoding: "GBK",
案例2:动态词云效果
(1)工程文件样本:同上
(2)数据库:
源数据—500.csv,共500行3列组成的一个排后榜
(3)数据可视化效果1
使用spyder打开word_cloud.py,另存为词云1_吴志勇20190529.py,代码如下:
import pandas as pd
import matplotlib.dates as mdate
import wordcloud as word
import matplotlib.pyplot as plt
df = pd.read_csv('500.csv',encoding = 'utf-8')
df = df.groupby(by = "国家").count()
print(df[:10]);
df = df['排名'].sort_values(ascending = False)
print(df[:10]);
font_path="./Deng.ttf"
word_cloud=word.WordCloud(
background_color = '#F3F3F3',
font_path = font_path,
width = 500,
height = 300,
margin = 2,
max_font_size = 200,
random_state = 42,
scale = 2,
colormap = 'viridis', # 默认virdis
)
word_cloud.generate_from_frequencies(df)
# or
# wordcloud.fit_words(df)
plt.imshow(word_cloud,interpolation = 'bilinear')
plt.axis('off')
plt.show()
如果需要将生成的图分辨率增大,并且保存在本地,则增加代码到最后一行:
word_cloud.to_file('500_big.png')