Skip to content

Commit 3aef7b1

Browse files
authored
Merge pull request #2 from chrbknudsen/main
forsøg med placering af notebook
2 parents ba9b393 + b44ff44 commit 3aef7b1

2 files changed

Lines changed: 208 additions & 1 deletion

File tree

episodes/data/graphs_nb.qmd

Lines changed: 207 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,207 @@
1+
---
2+
title: "breve"
3+
format: html
4+
---
5+
6+
Vi prøver et nyt format - stadig en hjemmeside, men nu med downloadbart quartodokument (ja, tough titties hvis du er på rstudio)
7+
8+
Men det fungerer fint i Rstudio på min maskine. Vi skal blot have det testet på en
9+
maskine der ikke har positron installeret.
10+
11+
12+
13+
14+
"https://kb-dk.github.io/cultural-heritage-data-guides-Python/Explore%20Denmarks%20Letters.html"
15+
16+
kan man læse en pythonistisk ting med analyse af de her breve.
17+
18+
Og herfra kan man downloade en zipfil:
19+
"https://loar.kb.dk/handle/1902/49123"
20+
21+
Den findes på
22+
23+
24+
"https://kb-dk.github.io/cultural-heritage-data-guides-Python/Explore%20Denmarks%20Letters.html"
25+
26+
```{r}
27+
# download.file("https://loar.kb.dk/bitstreams/15559883-a390-4ee2-8af2-4124948f7585/download",
28+
# "data/test.zip")
29+
```
30+
31+
Den skal vi nok ikke have på en hjemmeside...
32+
33+
```{r}
34+
library(tidyverse)
35+
# unzip("data/public_domain_Danmarks_Breve.zip", list = TRUE)
36+
```
37+
38+
When we have downloaded the zip-file, we can extract the csv file that we
39+
are intererested in:
40+
```{r}
41+
# unzip("data/public_domain_Danmarks_Breve.zip", files="public_domain_Danmarks_Breve/Denmarks_letters_dataset.csv",
42+
# exdir="data", junkpaths = TRUE)
43+
```
44+
45+
46+
The zip file contains other data - xml-files for each letter in the dataset,
47+
an python-notebook with examples on what to do with the data, a list of danish stopwords, readme files etc.
48+
And, a separate __MACOSX folder that we can safely ignore, and should not even exist in zip files meant for distribution.
49+
50+
Anyway...
51+
52+
Metadata for the csv-file is nowhere to be found in the zip-file, but we can reconstruct it:
53+
54+
55+
```{r}
56+
data <- read_csv("data/Denmarks_letters_dataset.csv")
57+
names(data)
58+
59+
```
60+
61+
|column_name | datatype| content|
62+
|---|---|---|
63+
|url | string | url til den oprindelige udgivelse|
64+
|sender | string | Afsendere - den person der skrev brevet |
65+
|sender_st | string | Afsendere - den person der skrev brevet - uden foranstillet komma |
66+
|recipiant| string | modtager af brevet, en del foranstillede kommaer |
67+
|recipiant_st| string | modtager af brevet, uden foranstillede kommaer. Når der står recipiant i stedet for recipent, er det formentlig en fejl introduceret da data blev ekstraheret fra kilden |
68+
|geo_name| string| Adresse - er det adressen på afsender eller modtager? |
69+
|raw_date| string | Den rå dato fra brevet|
70+
|raw_text | string | Den rå tekst - indholdet af brevet |
71+
|year_st |dbl | Året - står st mon for standardiseret? Eller renset.|
72+
|text_st | string | Også en relativt rå tekst. Det lader til primært at være at der ikke er escapeteng for linieskift etc. Og så er der sat en masse whitespaces ind mellem punktumme. bindestreger lader også til at være erstattet med mellemrum. |
73+
|word_count |dbl | Antal ord i brevet |
74+
|geo_name_st | string | adresse - men kogt ned til bynavne. |
75+
|xml_file_name | string | navn på source xml-fil. |
76+
|pubTitle | string | Titlen på den oprindelige brevudgivelse |
77+
|pubAuthor | string | Udgiveren af den oprindelige brevudgivelse |
78+
|pubPublisher| string | Forlaget på hvilket den oprindelige brevudgivelse kom |
79+
|pubPublisher_st | string | Standardiseret forlagsnavn.|
80+
|pubPlace | string | lokation for udgivelsen|
81+
|pubPlace_st | string | Standardiseret lokation for udgivelsen|
82+
|pubDate| string | årstal - og hvorfor bliver den opfattet som string? |
83+
84+
pubDate står som string fordi der har sneget sig en "1903-09-18". Det kan ikke håndteres som hverken
85+
tal eller dato, så vi defaulter til text.
86+
87+
Alle andre er text.
88+
89+
Bemærk dog at i hans notebook, optræder year_st som float, og word_count som int. Er der noget her?
90+
Nej, det er blot fordi den rå tekst har eksempelvis 1864.00 stående. Hvorfor der gør det ved ingen, men det er
91+
ikke et problem her.
92+
93+
94+
95+
Så trin 1 er noget rensning af data.
96+
97+
pubDate skal til dbl. vi behøver ikke gøre noget ved year_st. Vi har ikke brug for pubPlace. af pub* kolonnerne er det faktisk kun pubDate
98+
Vi har heller ikke brug for url, sender, og recipiant
99+
|url | string | url til den oprindelige udgivelse|
100+
|sender | string | Afsendere - den person der skrev brevet |
101+
|sender_st | string | Afsendere - den person der skrev brevet - uden foranstillet komma |
102+
|recipiant|
103+
104+
105+
```{r}
106+
data <- data |>
107+
select(sender_st, recipiant_st, year_st, text_st, geo_name_st)
108+
109+
110+
```
111+
112+
Det er så det data vi skriver til en fil, og indlæser. Vi kan også tilbyde de studerende at hente den direkte. HUSK VI SKAL HAVE RETTET STAVEFEJLEN I RECIPIANT_ST!
113+
114+
115+
```{r}
116+
library(GGally)
117+
library(network)
118+
library(sna)
119+
library(ggplot2)
120+
121+
122+
```
123+
124+
Det er en lidt. Ja.
125+
126+
Nå. Sådan et netværk viser hvem der skriver til hvem. Vi kunne også gøre det ved steder,
127+
men kender vi både afsender og modtager adressen? Det tror jeg ikke.
128+
Så - hvem skriver til hvem. Vi har brug for tokolonner:
129+
130+
131+
Vi kan nok ikke bruge rækker med NA-værdier til så meget:
132+
133+
Men her er antallet af breve sendt fra sender_st til recipiant_st (se nu at få rettet den stavefejl.)
134+
135+
Det er det vi kalder for edges.
136+
```{r}
137+
edges <- data |>
138+
drop_na(c(sender_st, recipiant_st)) |>
139+
count(from = sender_st, to = recipiant_st)
140+
141+
```
142+
143+
Så skal vi have knuderne - det er hver enkelt person (eller entitet) der optræder. Enten som
144+
afsender eller modtager. Så vi skal have en unik liste.
145+
146+
147+
```{r}
148+
nodes <- data |>
149+
select(sender_st, recipiant_st) |>
150+
pivot_longer(1:2) |>
151+
select(name = value) |>
152+
distinct(name) |>
153+
drop_na()
154+
```
155+
156+
Så kan vi bygge et graf-objekt:
157+
158+
159+
```{r}
160+
library(ggraph)
161+
library(tidygraph)
162+
g <- tbl_graph(nodes = nodes, edges = edges, directed = TRUE)
163+
g <- g %>%
164+
activate(edges) %>%
165+
filter(n >= 3) %>% # behold kun "tunge" forbindelser
166+
activate(nodes) %>%
167+
filter(!node_is_isolated())
168+
ggraph(g, layout = "fr") +
169+
geom_edge_link(aes(width = n), alpha = 0.35, show.legend = TRUE) +
170+
geom_node_point(size = 3) +
171+
geom_node_text(aes(label = name), repel = TRUE, size = 3) +
172+
scale_edge_width(range = c(2, 2.5)) +
173+
theme_void()
174+
175+
```
176+
177+
hvilke andre layouts er der?
178+
der er flere, men ikke alle virker.
179+
fr
180+
focus
181+
nicely
182+
183+
184+
dh
185+
gem
186+
graphopt
187+
grid
188+
mds
189+
sphere
190+
randomly
191+
fr
192+
kk
193+
drl
194+
lgl
195+
196+
197+
Under alle omstændigheder er det tydeligt at se at der delnetværk.
198+
Netværk som ikke er forbundet med andre.
199+
200+
Det er ikke så overraskende:
201+
202+
Men vi kan kun vise det hvis vi husker at have url med i datasættet. Ellers er det knap så tydeligt at der er et antal kilder.
203+
204+
205+
206+
Vi skal nok have lidt mere end bare det her. Det er lidt tyndt til to timer tror jeg.
207+

learners/data-and-downloads.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,4 @@ download data herfra
99
## Notebook
1010

1111
Her placerer vi så et downloadlink til et quarto dokument
12-
12+
[link](https://raw.githubusercontent.com/KUBDatalab/R-brief-graphs/main/episodes/data/graphs_nb.qmd)

0 commit comments

Comments
 (0)