데이터 저널리즘스쿨 미팅데이

필요한 라이브러리 설치

In [0]:
# 데이터를 다루는 라이브러리 - pandas
import pandas as pd
In [0]:
# 엑셀 파일을 다룰 수 있는 라이브러리 - xlrd 
import xlrd
In [0]:
# 데이터 다루는 라이브러리 - numpy 
# 그래프 그리는 라이브러리 - matplotlib.pyplot
import matplotlib.pyplot as plt
import numpy as np

데이터 불러오기

In [0]:
# 공개된 데이터 파일을 불러옵니다
## 데이터 파일 링크 --> https://data.newstapa.org/datasets/%EA%B0%80%EC%A7%9C%ED%95%99%ED%9A%8C-WASET-%ED%95%9C%EA%B5%AD-%EA%B4%80%EB%A0%A8-%EB%8D%B0%EC%9D%B4%ED%84%B0 
!wget https://data.newstapa.org/datasets/%EA%B0%80%EC%A7%9C%ED%95%99%ED%9A%8C-WASET-%ED%95%9C%EA%B5%AD-%EA%B4%80%EB%A0%A8-%EB%8D%B0%EC%9D%B4%ED%84%B0/files/waset-20180727.csv
--2019-11-23 07:56:26--  https://data.newstapa.org/datasets/%EA%B0%80%EC%A7%9C%ED%95%99%ED%9A%8C-WASET-%ED%95%9C%EA%B5%AD-%EA%B4%80%EB%A0%A8-%EB%8D%B0%EC%9D%B4%ED%84%B0/files/waset-20180727.csv
Resolving data.newstapa.org (data.newstapa.org)... 216.239.32.21, 216.239.38.21, 216.239.34.21, ...
Connecting to data.newstapa.org (data.newstapa.org)|216.239.32.21|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 621599 (607K) [application/octet-stream]
Saving to: ‘waset-20180727.csv.1’

waset-20180727.csv. 100%[===================>] 607.03K   422KB/s    in 1.4s    

2019-11-23 07:56:28 (422 KB/s) - ‘waset-20180727.csv.1’ saved [621599/621599]

In [0]:
# 데이터 파일을 불러옵니다 
file_name = 'waset-20180727.csv'
In [0]:
# 불러온 csv 파일을 dataframe 형태로 저장합니다
df_data = pd.read_csv(file_name)
In [0]:
# 불러온 데이터를 print 함수를 활용해 확인합니다 
print(df_data)
        no          분류  ...  Year                                           Pdf Link
0        1  Periodical  ...  2007  https://waset.org/publications/10964/2d-and-3d...
1        2    Abstract  ...  2016  https://waset.org/pdf/books/?id=52549&pageNumb...
2        3    Abstract  ...  2015  https://waset.org/pdf/books/?id=26766&pageNumb...
3        4  Periodical  ...  2015  https://waset.org/publications/10000960/a-fram...
4        5    Abstract  ...  2016  https://waset.org/pdf/books/?id=52542&pageNumb...
...    ...         ...  ...   ...                                                ...
2436  2437    Abstract  ...  2015  https://waset.org/pdf/books/?id=20791&pageNumb...
2437  2438  Periodical  ...  2011  https://waset.org/publications/3793/probabilis...
2438  2439    Abstract  ...  2016  https://waset.org/pdf/books/?id=56451&pageNumb...
2439  2440  Periodical  ...  2017  https://waset.org/publications/10006877/an-exp...
2440  2441    Abstract  ...  2018  https://waset.org/pdf/books/?id=37891&pageNumb...

[2441 rows x 8 columns]

대학 수 막대 차트 그리기

In [0]:
# 카테고리별로 합계 구하기  value_counts
ratings = df_data['Institution'].value_counts()
In [0]:
print(ratings)
Gangneung-Wonju National University    126
Sungkyunkwan University                120
Seoul National University              112
Yonsei University                      104
Kyungpook National University           84
                                      ... 
Dong Uni                                 1
Seoul Theological University             1
Hanwha Corporation                       1
Ghent University Global Campus           1
RIST                                     1
Name: Institution, Length: 235, dtype: int64
In [0]:
# 합계 데이터 dataframe 형태로 만들기 
df_bar = ratings.reset_index()
df_bar.columns = ['university', 'counts']
print(df_bar)
                              university  counts
0    Gangneung-Wonju National University     126
1                Sungkyunkwan University     120
2              Seoul National University     112
3                      Yonsei University     104
4          Kyungpook National University      84
..                                   ...     ...
230                             Dong Uni       1
231         Seoul Theological University       1
232                   Hanwha Corporation       1
233       Ghent University Global Campus       1
234                                 RIST       1

[235 rows x 2 columns]
In [0]:
# 상위 10개 대학 추출하기 sort_values / ascending
df_ranking = df_bar.sort_values(['counts'], ascending=False)[0:10]
print(df_ranking)
                            university  counts
0  Gangneung-Wonju National University     126
1              Sungkyunkwan University     120
2            Seoul National University     112
3                    Yonsei University     104
4        Kyungpook National University      84
5          Chonbuk National University      79
6                    Sejong University      72
7                   Hanyang University      64
8            Pusan National University      60
9                     Korea University      52
In [0]:
# 그래프 항목 길이 구하기 
y_pos = np.arange(len(df_ranking))
In [0]:
# 막대 차트 그리기 
# 수평 막대 그리는 함수는 barh 
rects = plt.barh(y_pos, df_ranking['counts'], color='#333333')

# 막대 차트 y축에 카테고리 대학교 이름 추가하기 yticks
plt.yticks(y_pos, df_ranking['university'])

# 그래프 보여주기 
plt.show()

논문 수 연도별 추이 라인그래프 그리기

In [0]:
# 연도별 합계를 구한다
years = df_data['Year'].value_counts()
In [0]:
# 데이터 칼럼명을 붙입니다. 
df_years = years.reset_index()
df_years.columns = ['Year', 'counts']
print(df_years)
In [0]:
# 합쳐진 그래프로 그래프를 그려봅니다. 
plt.plot(df_years['Year'], df_years['counts'])
plt.show()
In [0]:
# 오류 확인하기 
print(df_years)
    Year  counts
0   2015     517
1   2016     495
2   2017     463
3   2014     428
4   2018     169
5   2012      97
6   2013      94
7   2007      46
8   2011      42
9   2009      38
10  2008      34
11  2010      18
In [0]:
# 오류 수정하기 
df_years = df_years.sort_values(by=['Year'])
print(df_years)
    Year  counts
7   2007      46
10  2008      34
9   2009      38
11  2010      18
8   2011      42
5   2012      97
6   2013      94
3   2014     428
0   2015     517
1   2016     495
2   2017     463
4   2018     169
In [0]:
# 기본 그래프 그리기 
plt.plot(df_years['Year'], df_years['counts'])
plt.show()
In [0]:
# 그래프 제목달기 
# 기본 그래프 그리기 plot, 제목 title
plt.plot(df_years['Year'], df_years['counts'])
plt.title('Waset data')
plt.show()
In [0]:
# 스타일 바꾸기 
## 색 바꾸기 - color 
## 선 두께, 스타일 바꾸기 - color, linewidth, marker, linestyle 
plt.plot(df_years['Year'], df_years['counts'], color='red', linewidth=2, marker='o', linestyle='--')
plt.show()
In [0]:
# 그래프 스타일 템플릿 사용하기 style use
## https://matplotlib.org/3.1.1/gallery/style_sheets/style_sheets_reference.html 

plt.style.use('bmh')
plt.plot(df_years['Year'], df_years['counts'])
plt.show()